From 60cc405b63caa73c95153a6a1a5d31cc78265877 Mon Sep 17 00:00:00 2001 From: yaoxin <1752800946@qq.com> Date: Thu, 28 Mar 2024 18:28:44 +0800 Subject: [PATCH] test --- .idea/.gitignore | 8 + .idea/compiler.xml | 61 + .idea/encodings.xml | 60 + .idea/jarRepositories.xml | 25 + .../Maven__aopalliance_aopalliance_1_0.xml | 13 + .idea/libraries/Maven__cglib_cglib_3_1.xml | 13 + ..._ch_qos_logback_logback_classic_1_2_12.xml | 13 + ...en__ch_qos_logback_logback_core_1_2_12.xml | 13 + ...pring_cloud_alibaba_commons_2021_0_5_0.xml | 13 + ...alibaba_sentinel_datasource_2021_0_5_0.xml | 13 + ...ud_alibaba_sentinel_gateway_2021_0_5_0.xml | 13 + ...oud_circuitbreaker_sentinel_2021_0_5_0.xml | 13 + ...tarter_alibaba_nacos_config_2021_0_5_0.xml | 13 + ...ter_alibaba_nacos_discovery_2021_0_5_0.xml | 13 + ...cloud_starter_alibaba_seata_2021_0_5_0.xml | 13 + ...ud_starter_alibaba_sentinel_2021_0_5_0.xml | 13 + ..._csp_sentinel_annotation_aspectj_1_8_6.xml | 13 + ...tinel_api_gateway_adapter_common_1_8_6.xml | 13 + ..._sentinel_cluster_client_default_1_8_6.xml | 13 + ..._sentinel_cluster_common_default_1_8_6.xml | 13 + ..._sentinel_cluster_server_default_1_8_6.xml | 13 + ...n__com_alibaba_csp_sentinel_core_1_8_6.xml | 13 + ...sp_sentinel_datasource_extension_1_8_6.xml | 13 + ...ba_csp_sentinel_datasource_nacos_1_8_6.xml | 13 + ..._sentinel_parameter_flow_control_1_8_6.xml | 13 + ...aba_csp_sentinel_reactor_adapter_1_8_6.xml | 13 + ...nel_spring_cloud_gateway_adapter_1_8_6.xml | 13 + ..._sentinel_spring_webflux_adapter_1_8_6.xml | 13 + ...p_sentinel_spring_webmvc_adapter_1_8_6.xml | 13 + ...ba_csp_sentinel_transport_common_1_8_6.xml | 13 + ...p_sentinel_transport_simple_http_1_8_6.xml | 13 + .../Maven__com_alibaba_druid_1_2_16.xml | 13 + .../Maven__com_alibaba_druid_1_2_6.xml | 13 + ...ibaba_druid_spring_boot_starter_1_2_16.xml | 13 + ...com_alibaba_fastjson2_fastjson2_2_0_41.xml | 13 + .../Maven__com_alibaba_fastjson_1_2_83.xml | 13 + ...m_alibaba_fastjson_1_2_83_noneautotype.xml | 13 + ..._alibaba_nacos_nacos_auth_plugin_2_2_0.xml | 13 + ...__com_alibaba_nacos_nacos_client_2_2_0.xml | 13 + ...ba_nacos_nacos_encryption_plugin_2_2_0.xml | 13 + ...a_spring_spring_context_support_1_0_11.xml | 13 + ...baba_transmittable_thread_local_2_14_3.xml | 13 + ...c_datasource_spring_boot_starter_3_5_2.xml | 13 + ...ven__com_baomidou_mybatis_plus_3_5_3_1.xml | 13 + ...omidou_mybatis_plus_annotation_3_5_3_1.xml | 13 + ...idou_mybatis_plus_boot_starter_3_5_3_1.xml | 13 + ...com_baomidou_mybatis_plus_core_3_5_3_1.xml | 13 + ...aomidou_mybatis_plus_extension_3_5_3_1.xml | 13 + ...earch_thirdparty_simple_xml_safe_2_7_1.xml | 13 + .../Maven__com_fasterxml_classmate_1_5_1.xml | 13 + ...ackson_core_jackson_annotations_2_13_5.xml | 13 + ...erxml_jackson_core_jackson_core_2_13_5.xml | 13 + ...l_jackson_core_jackson_databind_2_13_5.xml | 13 + ..._datatype_jackson_datatype_jdk8_2_13_5.xml | 13 + ...atatype_jackson_datatype_jsr310_2_13_5.xml | 13 + ..._jackson_module_parameter_names_2_13_5.xml | 13 + ...thub_ben_manes_caffeine_caffeine_2_9_3.xml | 13 + ...__com_github_jsqlparser_jsqlparser_4_5.xml | 13 + ...com_github_pagehelper_pagehelper_5_3_3.xml | 13 + ...helper_spring_boot_autoconfigure_1_4_7.xml | 13 + ...r_pagehelper_spring_boot_starter_1_4_7.xml | 13 + ...om_github_tobato_fastdfs_client_1_27_2.xml | 13 + ...en__com_github_virtuald_curvesapi_1_06.xml | 13 + ..._com_google_code_findbugs_jsr305_3_0_2.xml | 13 + ...Maven__com_google_code_gson_gson_2_9_1.xml | 13 + ...rorprone_error_prone_annotations_2_2_0.xml | 13 + ...rorprone_error_prone_annotations_2_3_4.xml | 13 + ...__com_google_guava_failureaccess_1_0_1.xml | 13 + ...ven__com_google_guava_guava_27_0_1_jre.xml | 13 + ...Maven__com_google_guava_guava_30_0_jre.xml | 13 + ...9_0_empty_to_avoid_conflict_with_guava.xml | 13 + ...m_google_j2objc_j2objc_annotations_1_1.xml | 13 + ...m_google_j2objc_j2objc_annotations_1_3.xml | 13 + ...hmap_concurrentlinkedhashmap_lru_1_4_2.xml | 13 + .../Maven__com_ibm_icu_icu4j_61_1.xml | 13 + .../Maven__com_jhlabs_filters_2_0_235_1.xml | 13 + ...om_mchange_mchange_commons_java_0_2_15.xml | 13 + ...muyu_ruoyi_product_common_1_0_SNAPSHOT.xml | 13 + ...en__com_mysql_mysql_connector_j_8_0_33.xml | 13 + ...ven__com_squareup_okhttp3_okhttp_4_9_3.xml | 13 + .../Maven__com_squareup_okio_okio_2_8_0.xml | 13 + .../Maven__com_stoyanr_evictor_1_0_0.xml | 13 + .../Maven__com_typesafe_config_1_2_1.xml | 13 + .../Maven__com_zaxxer_HikariCP_4_0_3.xml | 13 + .../Maven__com_zaxxer_SparseBitSet_1_2.xml | 13 + ...mons_beanutils_commons_beanutils_1_9_3.xml | 13 + ...aven__commons_codec_commons_codec_1_15.xml | 13 + ..._collections_commons_collections_3_2_2.xml | 13 + ...mons_fileupload_commons_fileupload_1_5.xml | 13 + .../Maven__commons_io_commons_io_2_13_0.xml | 13 + .../Maven__commons_lang_commons_lang_2_6.xml | 13 + .../Maven__commons_pool_commons_pool_1_6.xml | 13 + ...entric_spring_boot_admin_server_2_7_10.xml | 13 + ..._spring_boot_admin_server_cloud_2_7_10.xml | 13 + ...ric_spring_boot_admin_server_ui_2_7_10.xml | 13 + ...pring_boot_admin_starter_server_2_7_10.xml | 13 + ...io_github_classgraph_classgraph_4_8_83.xml | 13 + ...__io_github_openfeign_feign_core_11_10.xml | 13 + ..._io_github_openfeign_feign_slf4j_11_10.xml | 13 + ...github_openfeign_form_feign_form_3_8_0.xml | 13 + ...openfeign_form_feign_form_spring_3_8_0.xml | 13 + .../Maven__io_jsonwebtoken_jjwt_0_9_1.xml | 13 + ...io_lettuce_lettuce_core_6_1_10_RELEASE.xml | 13 + ...__io_micrometer_micrometer_core_1_9_12.xml | 13 + .../libraries/Maven__io_minio_minio_8_2_2.xml | 13 + ...Maven__io_netty_netty_all_4_1_94_Final.xml | 13 + ...en__io_netty_netty_buffer_4_1_94_Final.xml | 13 + ...ven__io_netty_netty_codec_4_1_94_Final.xml | 13 + ..._io_netty_netty_codec_dns_4_1_94_Final.xml | 13 + ...netty_netty_codec_haproxy_4_1_94_Final.xml | 13 + ...o_netty_netty_codec_http2_4_1_94_Final.xml | 13 + ...io_netty_netty_codec_http_4_1_94_Final.xml | 13 + ...etty_netty_codec_memcache_4_1_94_Final.xml | 13 + ...io_netty_netty_codec_mqtt_4_1_94_Final.xml | 13 + ...o_netty_netty_codec_redis_4_1_94_Final.xml | 13 + ...io_netty_netty_codec_smtp_4_1_94_Final.xml | 13 + ...o_netty_netty_codec_socks_4_1_94_Final.xml | 13 + ...o_netty_netty_codec_stomp_4_1_94_Final.xml | 13 + ..._io_netty_netty_codec_xml_4_1_94_Final.xml | 13 + ...en__io_netty_netty_common_4_1_94_Final.xml | 13 + ...n__io_netty_netty_handler_4_1_94_Final.xml | 13 + ...netty_netty_handler_proxy_4_1_94_Final.xml | 13 + ...ty_netty_handler_ssl_ocsp_4_1_94_Final.xml | 13 + ...__io_netty_netty_resolver_4_1_94_Final.xml | 13 + ..._netty_netty_resolver_dns_4_1_94_Final.xml | 13 + ...esolver_dns_classes_macos_4_1_94_Final.xml | 13 + ...native_macos_osx_aarch_64_4_1_94_Final.xml | 13 + ...s_native_macos_osx_x86_64_4_1_94_Final.xml | 13 + ..._io_netty_netty_transport_4_1_94_Final.xml | 13 + ...y_transport_classes_epoll_4_1_94_Final.xml | 13 + ..._transport_classes_kqueue_4_1_94_Final.xml | 13 + ...tive_epoll_linux_aarch_64_4_1_94_Final.xml | 13 + ...native_epoll_linux_x86_64_4_1_94_Final.xml | 13 + ...ative_kqueue_osx_aarch_64_4_1_94_Final.xml | 13 + ..._native_kqueue_osx_x86_64_4_1_94_Final.xml | 13 + ...nsport_native_unix_common_4_1_94_Final.xml | 13 + ...etty_netty_transport_rxtx_4_1_94_Final.xml | 13 + ...etty_netty_transport_sctp_4_1_94_Final.xml | 13 + ...netty_netty_transport_udt_4_1_94_Final.xml | 13 + ...ectreactor_addons_reactor_extra_3_4_10.xml | 13 + ...eactor_netty_reactor_netty_core_1_0_33.xml | 13 + ...eactor_netty_reactor_netty_http_1_0_33.xml | 13 + ..._io_projectreactor_reactor_core_3_4_30.xml | 13 + ...ven__io_prometheus_simpleclient_0_15_0.xml | 13 + ...heus_simpleclient_tracer_common_0_15_0.xml | 13 + ...etheus_simpleclient_tracer_otel_0_15_0.xml | 13 + ..._simpleclient_tracer_otel_agent_0_15_0.xml | 13 + .../Maven__io_seata_seata_all_1_6_1.xml | 13 + .../Maven__io_seata_seata_common_1_5_2.xml | 13 + ...aven__io_seata_seata_config_core_1_5_2.xml | 13 + .../Maven__io_seata_seata_core_1_5_2.xml | 13 + ...n__io_seata_seata_discovery_core_1_5_2.xml | 13 + ...eata_spring_autoconfigure_client_1_6_1.xml | 13 + ..._seata_spring_autoconfigure_core_1_6_1.xml | 13 + ..._seata_seata_spring_boot_starter_1_6_1.xml | 13 + ...ven__io_springfox_springfox_core_3_0_0.xml | 13 + ...n__io_springfox_springfox_schema_3_0_0.xml | 13 + ...aven__io_springfox_springfox_spi_3_0_0.xml | 13 + ...o_springfox_springfox_spring_web_3_0_0.xml | 13 + ...ringfox_springfox_spring_webflux_3_0_0.xml | 13 + ...pringfox_springfox_spring_webmvc_3_0_0.xml | 13 + ..._io_springfox_springfox_swagger2_3_0_0.xml | 13 + ...ringfox_springfox_swagger_common_3_0_0.xml | 13 + ...o_springfox_springfox_swagger_ui_3_0_0.xml | 13 + ...gger_core_v3_swagger_annotations_2_1_2.xml | 13 + ...__io_swagger_swagger_annotations_1_6_2.xml | 13 + ...Maven__io_swagger_swagger_models_1_6_2.xml | 13 + ...nnotation_jakarta_annotation_api_1_3_5.xml | 13 + ...alidation_jakarta_validation_api_2_0_2.xml | 13 + ..._activation_javax_activation_api_1_2_0.xml | 13 + ..._javax_servlet_javax_servlet_api_4_0_1.xml | 13 + .../Maven__javax_servlet_servlet_api_2_5.xml | 13 + .../Maven__javax_xml_bind_jaxb_api_2_3_1.xml | 13 + ...aven__net_bytebuddy_byte_buddy_1_12_23.xml | 13 + ...Maven__net_coobird_thumbnailator_0_4_8.xml | 13 + ...layout_org_abego_treelayout_core_1_0_3.xml | 13 + .idea/libraries/Maven__org_antlr_ST4_4_3.xml | 13 + .../libraries/Maven__org_antlr_antlr4_4_8.xml | 13 + .../Maven__org_antlr_antlr4_runtime_4_8.xml | 13 + .../Maven__org_antlr_antlr_runtime_3_5_2.xml | 13 + ...pache_commons_commons_collections4_4_4.xml | 13 + ...g_apache_commons_commons_compress_1_19.xml | 13 + ...rg_apache_commons_commons_lang3_3_12_0.xml | 13 + ...org_apache_commons_commons_math3_3_6_1.xml | 13 + ...rg_apache_commons_commons_pool2_2_11_1.xml | 13 + .../Maven__org_apache_dubbo_dubbo_3_0_8.xml | 13 + ...bo_extensions_dubbo_filter_seata_1_0_0.xml | 13 + ...e_httpcomponents_httpasyncclient_4_1_5.xml | 13 + ...pache_httpcomponents_httpclient_4_5_14.xml | 13 + ..._apache_httpcomponents_httpcore_4_4_16.xml | 13 + ...che_httpcomponents_httpcore_nio_4_4_16.xml | 13 + ..._apache_logging_log4j_log4j_api_2_17_2.xml | 13 + ...he_logging_log4j_log4j_to_slf4j_2_17_2.xml | 13 + .../Maven__org_apache_poi_poi_4_1_2.xml | 13 + .../Maven__org_apache_poi_poi_ooxml_4_1_2.xml | 13 + ...org_apache_poi_poi_ooxml_schemas_4_1_2.xml | 13 + ..._tomcat_embed_tomcat_embed_core_9_0_76.xml | 13 + ...he_tomcat_embed_tomcat_embed_el_9_0_76.xml | 13 + ...at_embed_tomcat_embed_websocket_9_0_76.xml | 13 + ...ache_velocity_velocity_engine_core_2_3.xml | 13 + ...en__org_apache_xmlbeans_xmlbeans_3_1_0.xml | 13 + ...Maven__org_aspectj_aspectjweaver_1_9_7.xml | 13 + ...rg_attoparser_attoparser_2_0_5_RELEASE.xml | 13 + ...__org_bouncycastle_bcpkix_jdk15on_1_69.xml | 13 + ...__org_bouncycastle_bcprov_jdk15on_1_69.xml | 13 + ...__org_bouncycastle_bcutil_jdk15on_1_69.xml | 13 + ...rg_checkerframework_checker_qual_2_5_2.xml | 13 + ...rg_checkerframework_checker_qual_3_5_0.xml | 13 + ...s_mojo_animal_sniffer_annotations_1_17.xml | 13 + .../Maven__org_glassfish_javax_json_1_0_4.xml | 13 + ...__org_hdrhistogram_HdrHistogram_2_1_12.xml | 13 + ...idator_hibernate_validator_6_2_5_Final.xml | 13 + ...ven__org_javassist_javassist_3_28_0_GA.xml | 13 + ...boss_logging_jboss_logging_3_4_3_Final.xml | 13 + .../Maven__org_jetbrains_annotations_13_0.xml | 13 + ..._jetbrains_kotlin_kotlin_stdlib_1_6_21.xml | 13 + ...ins_kotlin_kotlin_stdlib_common_1_6_21.xml | 13 + ...n__org_latencyutils_LatencyUtils_2_0_3.xml | 13 + ...n__org_mapstruct_mapstruct_1_3_1_Final.xml | 13 + .../Maven__org_mybatis_mybatis_3_5_13.xml | 13 + ...aven__org_mybatis_mybatis_spring_2_1_1.xml | 13 + ...ybatis_spring_boot_autoconfigure_2_3_1.xml | 13 + ...boot_mybatis_spring_boot_starter_2_3_1.xml | 13 + .../libraries/Maven__org_ow2_asm_asm_4_2.xml | 13 + ...aven__org_projectlombok_lombok_1_18_28.xml | 13 + ...ven__org_quartz_scheduler_quartz_2_3_2.xml | 13 + ...reactivestreams_reactive_streams_1_0_4.xml | 13 + ...Maven__org_slf4j_jcl_over_slf4j_1_7_36.xml | 13 + .../Maven__org_slf4j_jul_to_slf4j_1_7_36.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_36.xml | 13 + ...pringframework_boot_spring_boot_2_7_13.xml | 13 + ...ework_boot_spring_boot_actuator_2_7_13.xml | 13 + ...ing_boot_actuator_autoconfigure_2_7_13.xml | 13 + ..._boot_spring_boot_autoconfigure_2_7_13.xml | 13 + ...mework_boot_spring_boot_starter_2_7_13.xml | 13 + ...ot_spring_boot_starter_actuator_2_7_13.xml | 13 + ...rk_boot_spring_boot_starter_aop_2_7_13.xml | 13 + ..._boot_spring_boot_starter_cache_2_7_13.xml | 13 + ..._spring_boot_starter_data_redis_2_7_13.xml | 13 + ...k_boot_spring_boot_starter_jdbc_2_7_13.xml | 13 + ...k_boot_spring_boot_starter_json_2_7_13.xml | 13 + ...oot_spring_boot_starter_logging_2_7_13.xml | 13 + ...ring_boot_starter_reactor_netty_2_7_13.xml | 13 + ...ot_spring_boot_starter_security_2_7_13.xml | 13 + ...t_spring_boot_starter_thymeleaf_2_7_13.xml | 13 + ...boot_spring_boot_starter_tomcat_2_7_13.xml | 13 + ..._spring_boot_starter_validation_2_7_13.xml | 13 + ...rk_boot_spring_boot_starter_web_2_7_13.xml | 13 + ...oot_spring_boot_starter_webflux_2_7_13.xml | 13 + ...ework_cloud_spring_cloud_commons_3_1_7.xml | 13 + ...ework_cloud_spring_cloud_context_3_1_7.xml | 13 + ...loud_spring_cloud_gateway_server_3_1_8.xml | 13 + ..._cloud_spring_cloud_loadbalancer_3_1_7.xml | 13 + ...loud_spring_cloud_openfeign_core_3_1_8.xml | 13 + ...ework_cloud_spring_cloud_starter_3_1_7.xml | 13 + ...d_spring_cloud_starter_bootstrap_3_1_7.xml | 13 + ...oud_spring_cloud_starter_gateway_3_1_8.xml | 13 + ...pring_cloud_starter_loadbalancer_3_1_7.xml | 13 + ...d_spring_cloud_starter_openfeign_3_1_8.xml | 13 + ...mework_data_spring_data_commons_2_7_13.xml | 13 + ...ework_data_spring_data_keyvalue_2_7_13.xml | 13 + ...ramework_data_spring_data_redis_2_7_13.xml | 13 + ...lugin_spring_plugin_core_2_0_0_RELEASE.xml | 13 + ...n_spring_plugin_metadata_2_0_0_RELEASE.xml | 13 + ..._security_spring_security_config_5_7_9.xml | 13 + ...rk_security_spring_security_core_5_7_9.xml | 13 + ..._security_spring_security_crypto_5_7_9.xml | 13 + ...ity_spring_security_rsa_1_0_11_RELEASE.xml | 13 + ...ork_security_spring_security_web_5_7_9.xml | 13 + ..._org_springframework_spring_aop_5_3_28.xml | 13 + ...rg_springframework_spring_beans_5_3_28.xml | 13 + ..._springframework_spring_context_5_3_28.xml | 13 + ...ramework_spring_context_support_5_3_28.xml | 13 + ...org_springframework_spring_core_5_3_28.xml | 13 + ...ringframework_spring_expression_5_3_28.xml | 13 + ..._org_springframework_spring_jcl_5_3_28.xml | 13 + ...org_springframework_spring_jdbc_5_3_28.xml | 13 + ..._org_springframework_spring_oxm_5_3_28.xml | 13 + ...__org_springframework_spring_tx_5_3_28.xml | 13 + ..._org_springframework_spring_web_5_3_28.xml | 13 + ..._springframework_spring_webflux_5_3_28.xml | 13 + ...g_springframework_spring_webmvc_5_3_28.xml | 13 + ...ymeleaf_extras_java8time_3_0_4_RELEASE.xml | 13 + ...org_thymeleaf_thymeleaf_3_0_15_RELEASE.xml | 13 + ...eleaf_thymeleaf_spring5_3_0_15_RELEASE.xml | 13 + ..._org_unbescape_unbescape_1_1_6_RELEASE.xml | 13 + .../Maven__org_yaml_snakeyaml_1_30.xml | 13 + .../Maven__pro_fessional_kaptcha_2_3_3.xml | 13 + .idea/misc.xml | 16 + .idea/modules.xml | 34 + .idea/muyu-ruoyi-server-product-dev.iml | 9 + .idea/uiDesigner.xml | 124 + .idea/vcs.xml | 6 + logs/muyu-auth/error.2024-03-21.log | 37 + logs/muyu-auth/error.log | 81 + logs/muyu-auth/info.2024-03-21.log | 52 + logs/muyu-auth/info.2024-03-22.log | 21 + logs/muyu-auth/info.2024-03-23.log | 21 + logs/muyu-auth/info.2024-03-24.log | 86 + logs/muyu-auth/info.2024-03-25.log | 42 + logs/muyu-auth/info.2024-03-26.log | 126 + logs/muyu-auth/info.log | 21 + logs/muyu-file/error.2024-03-21.log | 102 + logs/muyu-file/error.2024-03-24.log | 232 ++ logs/muyu-file/error.log | 92 + logs/muyu-file/info.2024-03-21.log | 72 + logs/muyu-file/info.2024-03-22.log | 21 + logs/muyu-file/info.2024-03-23.log | 21 + logs/muyu-file/info.2024-03-24.log | 95 + logs/muyu-file/info.2024-03-25.log | 42 + logs/muyu-file/info.2024-03-26.log | 126 + logs/muyu-file/info.log | 21 + logs/muyu-gateway/error.2024-03-21.log | 54 + logs/muyu-gateway/error.2024-03-23.log | 4 + logs/muyu-gateway/error.2024-03-24.log | 164 + logs/muyu-gateway/error.2024-03-25.log | 15 + logs/muyu-gateway/error.log | 52 + logs/muyu-gateway/info.2024-03-21.log | 47 + logs/muyu-gateway/info.2024-03-22.log | 388 +++ logs/muyu-gateway/info.2024-03-23.log | 21 + logs/muyu-gateway/info.2024-03-24.log | 1635 ++++++++++ logs/muyu-gateway/info.2024-03-25.log | 77 + logs/muyu-gateway/info.2024-03-26.log | 592 ++++ logs/muyu-gateway/info.log | 19 + logs/muyu-gen/error.log | 0 logs/muyu-gen/info.log | 27 + logs/muyu-job/error.log | 0 logs/muyu-job/info.log | 45 + logs/muyu-product/error.2024-03-21.log | 8 + logs/muyu-product/error.2024-03-23.log | 927 ++++++ logs/muyu-product/error.2024-03-24.log | 2738 +++++++++++++++++ logs/muyu-product/error.2024-03-25.log | 660 ++++ logs/muyu-product/error.2024-03-26.log | 1290 ++++++++ logs/muyu-product/error.log | 276 ++ logs/muyu-product/info.2024-03-21.log | 56 + logs/muyu-product/info.2024-03-22.log | 28 + logs/muyu-product/info.2024-03-23.log | 28 + logs/muyu-product/info.2024-03-24.log | 658 ++++ logs/muyu-product/info.2024-03-25.log | 224 ++ logs/muyu-product/info.2024-03-26.log | 224 ++ logs/muyu-product/info.log | 152 + logs/muyu-system/error.2024-03-21.log | 39 + logs/muyu-system/error.2024-03-22.log | 71 + logs/muyu-system/error.2024-03-23.log | 781 +++++ logs/muyu-system/error.2024-03-24.log | 1388 +++++++++ logs/muyu-system/error.log | 912 ++++++ logs/muyu-system/info.2024-03-21.log | 61 + logs/muyu-system/info.2024-03-22.log | 28 + logs/muyu-system/info.2024-03-23.log | 28 + logs/muyu-system/info.2024-03-24.log | 102 + logs/muyu-system/info.2024-03-25.log | 56 + logs/muyu-system/info.2024-03-26.log | 168 + logs/muyu-system/info.log | 28 + logs/muyu-visual-monitor/error.log | 278 ++ logs/muyu-visual-monitor/info.log | 99 + muyu-common-cache.iml | 126 + muyu-ruoyi-server/.gitignore | 46 + muyu-ruoyi-server/LICENSE | 21 + muyu-ruoyi-server/README.md | 26 + muyu-ruoyi-server/bin/clean.bat | 12 + muyu-ruoyi-server/bin/package.bat | 12 + muyu-ruoyi-server/bin/run-auth.bat | 14 + muyu-ruoyi-server/bin/run-gateway.bat | 14 + muyu-ruoyi-server/bin/run-modules-file.bat | 14 + muyu-ruoyi-server/bin/run-modules-gen.bat | 14 + muyu-ruoyi-server/bin/run-modules-job.bat | 14 + muyu-ruoyi-server/bin/run-modules-system.bat | 14 + muyu-ruoyi-server/bin/run-monitor.bat | 14 + muyu-ruoyi-server/docker/copy.sh | 41 + muyu-ruoyi-server/docker/deploy.sh | 67 + muyu-ruoyi-server/docker/docker-compose.yml | 140 + muyu-ruoyi-server/docker/muyu/auth/dockerfile | 15 + .../docker/muyu/auth/jar/readme.txt | 1 + .../docker/muyu/gateway/dockerfile | 15 + .../docker/muyu/gateway/jar/readme.txt | 1 + .../docker/muyu/modules/file/dockerfile | 15 + .../docker/muyu/modules/file/jar/readme.txt | 1 + .../docker/muyu/modules/gen/dockerfile | 15 + .../docker/muyu/modules/gen/jar/readme.txt | 1 + .../docker/muyu/modules/job/dockerfile | 15 + .../docker/muyu/modules/job/jar/readme.txt | 1 + .../docker/muyu/modules/system/dockerfile | 15 + .../docker/muyu/modules/system/jar/readme.txt | 1 + .../docker/muyu/visual/monitor/dockerfile | 15 + .../docker/muyu/visual/monitor/jar/readme.txt | 1 + muyu-ruoyi-server/docker/mysql/db/readme.txt | 1 + muyu-ruoyi-server/docker/mysql/dockerfile | 7 + .../docker/nacos/conf/application.properties | 32 + muyu-ruoyi-server/docker/nacos/dockerfile | 7 + .../docker/nginx/conf/nginx.conf | 41 + muyu-ruoyi-server/docker/nginx/dockerfile | 15 + .../docker/redis/conf/redis.conf | 1 + muyu-ruoyi-server/docker/redis/dockerfile | 13 + muyu-ruoyi-server/pom.xml | 323 ++ muyu-ruoyi-server/ruoyi-auth/pom.xml | 82 + .../com/ruoyi/auth/MuYuAuthApplication.java | 19 + .../auth/controller/TokenController.java | 72 + .../java/com/ruoyi/auth/form/LoginBody.java | 34 + .../com/ruoyi/auth/form/RegisterBody.java | 10 + .../ruoyi/auth/service/SysLoginService.java | 127 + .../auth/service/SysPasswordService.java | 76 + .../auth/service/SysRecordLogService.java | 44 + .../ruoyi-auth/src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 25 + .../ruoyi-auth/src/main/resources/logback.xml | 74 + .../ruoyi-common/muyu-common-cache/pom.xml | 30 + .../java/com/muyu/common/cache/Cache.java | 62 + .../com/muyu/common/cache/abs/CacheAbs.java | 96 + .../ruoyi-common/muyu-common-core/pom.xml | 141 + .../ruoyi/common/core/annotation/Excel.java | 176 ++ .../ruoyi/common/core/annotation/Excels.java | 17 + .../common/core/constant/CacheConstants.java | 58 + .../ruoyi/common/core/constant/Constants.java | 134 + .../common/core/constant/GenConstants.java | 186 ++ .../common/core/constant/HttpStatus.java | 93 + .../core/constant/ScheduleConstants.java | 56 + .../core/constant/SecurityConstants.java | 48 + .../core/constant/ServiceNameConstants.java | 23 + .../common/core/constant/TokenConstants.java | 24 + .../common/core/constant/UserConstants.java | 113 + .../core/context/SecurityContextHolder.java | 83 + .../com/ruoyi/common/core/domain/Result.java | 112 + .../ruoyi/common/core/enums/UserStatus.java | 26 + .../core/exception/CaptchaException.java | 14 + .../core/exception/CheckedException.java | 26 + .../core/exception/DemoModeException.java | 13 + .../core/exception/GlobalException.java | 51 + .../core/exception/InnerAuthException.java | 14 + .../core/exception/PreAuthorizeException.java | 13 + .../core/exception/ServiceException.java | 65 + .../common/core/exception/UtilException.java | 22 + .../exception/auth/NotLoginException.java | 14 + .../auth/NotPermissionException.java | 20 + .../core/exception/auth/NotRoleException.java | 20 + .../core/exception/base/BaseException.java | 69 + .../core/exception/file/FileException.java | 17 + .../FileNameLengthLimitExceededException.java | 14 + .../file/FileSizeLimitExceededException.java | 14 + .../exception/file/FileUploadException.java | 52 + .../file/InvalidExtensionException.java | 67 + .../core/exception/job/TaskException.java | 29 + .../user/CaptchaExpireException.java | 14 + .../core/exception/user/UserException.java | 16 + .../user/UserPasswordNotMatchException.java | 14 + .../ruoyi/common/core/text/CharsetKit.java | 94 + .../com/ruoyi/common/core/text/Convert.java | 903 ++++++ .../ruoyi/common/core/text/StrFormatter.java | 77 + .../ruoyi/common/core/utils/DateUtils.java | 158 + .../common/core/utils/ExceptionUtil.java | 35 + .../com/ruoyi/common/core/utils/JwtUtils.java | 123 + .../com/ruoyi/common/core/utils/ObjUtils.java | 65 + .../ruoyi/common/core/utils/PageUtils.java | 32 + .../ruoyi/common/core/utils/ServletUtils.java | 294 ++ .../ruoyi/common/core/utils/SpringUtils.java | 114 + .../ruoyi/common/core/utils/StringUtils.java | 504 +++ .../common/core/utils/bean/BeanUtils.java | 107 + .../core/utils/bean/BeanValidators.java | 21 + .../common/core/utils/file/FileTypeUtils.java | 85 + .../common/core/utils/file/FileUtils.java | 223 ++ .../common/core/utils/file/ImageUtils.java | 69 + .../common/core/utils/file/MimeTypeUtils.java | 56 + .../common/core/utils/html/EscapeUtil.java | 145 + .../common/core/utils/html/HTMLFilter.java | 498 +++ .../ruoyi/common/core/utils/ip/IpUtils.java | 331 ++ .../core/utils/poi/ExcelHandlerAdapter.java | 23 + .../common/core/utils/poi/ExcelUtil.java | 1230 ++++++++ .../core/utils/reflect/ReflectUtils.java | 324 ++ .../ruoyi/common/core/utils/sign/Base64.java | 256 ++ .../ruoyi/common/core/utils/sql/SqlUtil.java | 59 + .../ruoyi/common/core/utils/uuid/IdUtils.java | 44 + .../com/ruoyi/common/core/utils/uuid/Seq.java | 78 + .../ruoyi/common/core/utils/uuid/UUID.java | 450 +++ .../core/web/controller/BaseController.java | 129 + .../common/core/web/domain/BaseEntity.java | 80 + .../common/core/web/domain/TreeEntity.java | 88 + .../common/core/web/page/PageDomain.java | 93 + .../common/core/web/page/TableDataInfo.java | 44 + .../common/core/web/page/TableSupport.java | 53 + .../java/com/ruoyi/common/core/xss/Xss.java | 26 + .../ruoyi/common/core/xss/XssValidator.java | 31 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../muyu-common-datascope/pom.xml | 27 + .../datascope/annotation/DataScope.java | 28 + .../datascope/aspect/DataScopeAspect.java | 149 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../muyu-common-datasource/pom.xml | 35 + .../common/datasource/annotation/Master.java | 18 + .../common/datasource/annotation/Slave.java | 18 + .../ruoyi-common/muyu-common-log/pom.xml | 27 + .../com/ruoyi/common/log/annotation/Log.java | 46 + .../ruoyi/common/log/aspect/LogAspect.java | 220 ++ .../common/log/enums/BusinessStatus.java | 18 + .../ruoyi/common/log/enums/BusinessType.java | 58 + .../ruoyi/common/log/enums/OperatorType.java | 23 + .../log/filter/PropertyPreExcludeFilter.java | 20 + .../common/log/service/AsyncLogService.java | 27 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../ruoyi-common/muyu-common-redis/pom.xml | 33 + .../FastJson2JsonRedisSerializer.java | 47 + .../common/redis/configure/RedisConfig.java | 41 + .../common/redis/service/RedisService.java | 258 ++ ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../ruoyi-common/muyu-common-seata/pom.xml | 27 + .../ruoyi-common/muyu-common-security/pom.xml | 39 + .../annotation/EnableCustomConfig.java | 26 + .../annotation/EnableMyFeignClients.java | 27 + .../common/security/annotation/InnerAuth.java | 18 + .../common/security/annotation/Logical.java | 18 + .../security/annotation/RequiresLogin.java | 16 + .../annotation/RequiresPermissions.java | 25 + .../security/annotation/RequiresRoles.java | 25 + .../security/aspect/InnerAuthAspect.java | 46 + .../security/aspect/PreAuthorizeAspect.java | 89 + .../ruoyi/common/security/auth/AuthLogic.java | 327 ++ .../ruoyi/common/security/auth/AuthUtil.java | 154 + .../security/config/ApplicationConfig.java | 21 + .../common/security/config/WebMvcConfig.java | 32 + .../feign/FeignAutoConfiguration.java | 18 + .../feign/FeignRequestInterceptor.java | 48 + .../handler/GlobalExceptionHandler.java | 147 + .../interceptor/HeaderInterceptor.java | 49 + .../common/security/service/TokenService.java | 153 + .../common/security/utils/DictUtils.java | 71 + .../common/security/utils/SecurityUtils.java | 109 + ...ot.autoconfigure.AutoConfiguration.imports | 5 + .../ruoyi-common/muyu-common-swagger/pom.xml | 34 + .../annotation/EnableCustomSwagger2.java | 15 + .../config/SwaggerAutoConfiguration.java | 111 + .../config/SwaggerBeanPostProcessor.java | 45 + .../swagger/config/SwaggerProperties.java | 296 ++ .../config/SwaggerWebConfiguration.java | 18 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + .../ruoyi-common/muyu-common-system/pom.xml | 27 + .../ruoyi/common/system/domain/LoginUser.java | 131 + .../ruoyi/common/system/domain/SysDept.java | 213 ++ .../common/system/domain/SysDictData.java | 185 ++ .../common/system/domain/SysDictType.java | 106 + .../ruoyi/common/system/domain/SysFile.java | 45 + .../common/system/domain/SysLogininfor.java | 112 + .../common/system/domain/SysOperLog.java | 265 ++ .../ruoyi/common/system/domain/SysRole.java | 244 ++ .../ruoyi/common/system/domain/SysUser.java | 328 ++ .../system/remote/RemoteFileService.java | 29 + .../system/remote/RemoteLogService.java | 42 + .../system/remote/RemoteUserService.java | 40 + .../factory/RemoteFileFallbackFactory.java | 31 + .../factory/RemoteLogFallbackFactory.java | 37 + .../factory/RemoteUserFallbackFactory.java | 36 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + muyu-ruoyi-server/ruoyi-common/pom.xml | 31 + muyu-ruoyi-server/ruoyi-gateway/pom.xml | 118 + .../ruoyi/gateway/MuYuGatewayApplication.java | 17 + .../ruoyi/gateway/config/CaptchaConfig.java | 82 + .../ruoyi/gateway/config/GatewayConfig.java | 21 + .../gateway/config/KaptchaTextCreator.java | 61 + .../config/RouterFunctionConfiguration.java | 29 + .../ruoyi/gateway/config/SwaggerProvider.java | 76 + .../config/properties/CaptchaProperties.java | 41 + .../properties/IgnoreWhiteProperties.java | 31 + .../config/properties/XssProperties.java | 44 + .../com/ruoyi/gateway/filter/AuthFilter.java | 120 + .../gateway/filter/BlackListUrlFilter.java | 58 + .../gateway/filter/CacheRequestFilter.java | 75 + .../gateway/filter/ValidateCodeFilter.java | 69 + .../com/ruoyi/gateway/filter/XssFilter.java | 114 + .../handler/GatewayExceptionHandler.java | 48 + .../handler/SentinelFallbackHandler.java | 35 + .../ruoyi/gateway/handler/SwaggerHandler.java | 46 + .../gateway/handler/ValidateCodeHandler.java | 37 + .../gateway/model/resp/CaptchaCodeResp.java | 25 + .../gateway/service/ValidateCodeService.java | 23 + .../service/impl/ValidateCodeServiceImpl.java | 109 + .../src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 41 + .../src/main/resources/logback.xml | 74 + muyu-ruoyi-server/ruoyi-modules/pom.xml | 29 + .../ruoyi-modules/ruoyi-file/pom.xml | 97 + .../com/ruoyi/file/MuYuFileApplication.java | 19 + .../com/ruoyi/file/config/MinioConfig.java | 72 + .../ruoyi/file/config/ResourcesConfig.java | 48 + .../file/controller/SysFileController.java | 43 + .../service/FastDfsSysFileServiceImpl.java | 47 + .../ruoyi/file/service/ISysFileService.java | 21 + .../file/service/LocalSysFileServiceImpl.java | 50 + .../file/service/MinioSysFileServiceImpl.java | 50 + .../com/ruoyi/file/utils/FileUploadUtils.java | 163 + .../ruoyi-file/src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 44 + .../ruoyi-file/src/main/resources/logback.xml | 74 + .../ruoyi-modules/ruoyi-gen/pom.xml | 102 + .../com/ruoyi/gen/MuYuGenApplication.java | 22 + .../java/com/ruoyi/gen/config/GenConfig.java | 65 + .../ruoyi/gen/controller/GenController.java | 192 ++ .../java/com/ruoyi/gen/domain/GenTable.java | 373 +++ .../com/ruoyi/gen/domain/GenTableColumn.java | 357 +++ .../gen/mapper/GenTableColumnMapper.java | 66 + .../com/ruoyi/gen/mapper/GenTableMapper.java | 91 + .../service/GenTableColumnServiceImpl.java | 67 + .../gen/service/GenTableServiceImpl.java | 464 +++ .../gen/service/IGenTableColumnService.java | 47 + .../ruoyi/gen/service/IGenTableService.java | 130 + .../java/com/ruoyi/gen/util/GenUtils.java | 228 ++ .../ruoyi/gen/util/VelocityInitializer.java | 29 + .../com/ruoyi/gen/util/VelocityUtils.java | 336 ++ .../ruoyi-gen/src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 25 + .../ruoyi-gen/src/main/resources/logback.xml | 74 + .../mapper/generator/GenTableColumnMapper.xml | 157 + .../mapper/generator/GenTableMapper.xml | 317 ++ .../main/resources/vm/java/controller.java.vm | 121 + .../src/main/resources/vm/java/domain.java.vm | 145 + .../src/main/resources/vm/java/edit.java.vm | 63 + .../src/main/resources/vm/java/mapper.java.vm | 15 + .../src/main/resources/vm/java/query.java.vm | 62 + .../src/main/resources/vm/java/save.java.vm | 64 + .../main/resources/vm/java/service.java.vm | 22 + .../resources/vm/java/serviceImpl.java.vm | 76 + .../src/main/resources/vm/js/api.js.vm | 44 + .../src/main/resources/vm/sql/sql.vm | 22 + .../main/resources/vm/vue/index-tree.vue.vm | 505 +++ .../src/main/resources/vm/vue/index.vue.vm | 493 +++ .../resources/vm/vue/v3/index-tree.vue.vm | 474 +++ .../src/main/resources/vm/vue/v3/index.vue.vm | 590 ++++ .../src/main/resources/vm/vue/v3/readme.txt | 1 + .../src/main/resources/vm/xml/mapper.xml.vm | 16 + .../ruoyi-modules/ruoyi-job/pom.xml | 108 + .../com/ruoyi/job/MuYuJobApplication.java | 22 + .../com/ruoyi/job/config/ScheduleConfig.java | 57 + .../job/controller/SysJobController.java | 149 + .../job/controller/SysJobLogController.java | 81 + .../java/com/ruoyi/job/domain/SysJob.java | 179 ++ .../java/com/ruoyi/job/domain/SysJobLog.java | 165 + .../com/ruoyi/job/mapper/SysJobLogMapper.java | 70 + .../com/ruoyi/job/mapper/SysJobMapper.java | 74 + .../ruoyi/job/service/ISysJobLogService.java | 60 + .../com/ruoyi/job/service/ISysJobService.java | 113 + .../job/service/SysJobLogServiceImpl.java | 83 + .../ruoyi/job/service/SysJobServiceImpl.java | 239 ++ .../main/java/com/ruoyi/job/task/MyTask.java | 24 + .../com/ruoyi/job/util/AbstractQuartzJob.java | 97 + .../java/com/ruoyi/job/util/CronUtils.java | 56 + .../com/ruoyi/job/util/JobInvokeUtil.java | 165 + .../QuartzDisallowConcurrentExecution.java | 18 + .../ruoyi/job/util/QuartzJobExecution.java | 16 + .../com/ruoyi/job/util/ScheduleUtils.java | 121 + .../ruoyi-job/src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 25 + .../ruoyi-job/src/main/resources/logback.xml | 74 + .../resources/mapper/job/SysJobLogMapper.xml | 102 + .../resources/mapper/job/SysJobMapper.xml | 123 + .../ruoyi-modules/ruoyi-product/pom.xml | 25 + .../ruoyi-product/ruoyi-product-cache/pom.xml | 35 + .../muyu/product/cache/ProjectInfoCache.java | 61 + .../muyu/product/cache/ProjectInfoData.java | 18 + .../ruoyi-product-common/pom.xml | 30 + .../product/domain/AsAttributeInfoGroup.java | 61 + .../product/domain/AsCategoryAttribute.java | 66 + .../domain/AsCategoryAttributeGroup.java | 66 + .../ruoyi/product/domain/AsCategoryBrand.java | 66 + .../domain/AsSpecificationInfoGroup.java | 67 + .../ruoyi/product/domain/AttributeGroup.java | 88 + .../ruoyi/product/domain/AttributeInfo.java | 84 + .../com/ruoyi/product/domain/BrandInfo.java | 104 + .../ruoyi/product/domain/CategoryInfo.java | 70 + .../product/domain/ProductAttributeInfo.java | 104 + .../com/ruoyi/product/domain/ProductInfo.java | 144 + .../com/ruoyi/product/domain/ProductSku.java | 103 + .../product/domain/SpecificationGroup.java | 55 + .../product/domain/SpecificationInfo.java | 66 + .../product/domain/base/CategoryBase.java | 13 + .../product/domain/base/TreeBaseEntity.java | 52 + .../domain/model/AttributeGroupEditModel.java | 71 + .../domain/model/AttributeGroupSaveModel.java | 69 + .../domain/model/AttributeValueSaveModel.java | 41 + .../domain/model/CategoryInfoEditModel.java | 101 + .../domain/model/CategoryInfoSaveModel.java | 92 + .../domain/model/ProductInfoEditModel.java | 120 + .../domain/model/ProductInfoSaveModel.java | 132 + .../domain/model/ProductSkuSaveModel.java | 57 + .../model/TemplateAttributeGroupModel.java | 41 + .../domain/model/TemplateAttributeModel.java | 41 + .../domain/req/AttributeGroupEditReq.java | 41 + .../domain/req/AttributeGroupQueryReq.java | 34 + .../domain/req/AttributeGroupSaveReq.java | 48 + .../domain/req/AttributeInfoEditReq.java | 30 + .../domain/req/AttributeInfoQueryReq.java | 30 + .../domain/req/AttributeInfoSaveReq.java | 36 + .../product/domain/req/BrandInfoEditReq.java | 42 + .../product/domain/req/BrandInfoQueryReq.java | 38 + .../product/domain/req/BrandInfoSaveReq.java | 51 + .../product/domain/req/CategoryEditReq.java | 56 + .../product/domain/req/CategoryQueryReq.java | 38 + .../product/domain/req/CategorySaveReq.java | 64 + .../req/ProductAttributeInfoEditReq.java | 42 + .../req/ProductAttributeInfoQueryReq.java | 42 + .../req/ProductAttributeInfoSaveReq.java | 51 + .../domain/req/ProductInfoEditReq.java | 77 + .../domain/req/ProductInfoQueryReq.java | 62 + .../domain/req/ProductInfoSaveReq.java | 92 + .../domain/req/ProductSkuQueryReq.java | 51 + .../product/domain/req/ProductSkuSaveReq.java | 47 + .../domain/req/SpecificationInfoQueryReq.java | 30 + .../domain/req/SpecificationInfoSaveReq.java | 36 + .../ruoyi/product/domain/resp/Attribute.java | 32 + .../domain/resp/AttributeGroupInfoResp.java | 53 + .../domain/resp/AttributeGroupPageResp.java | 50 + .../product/domain/resp/CarouselImage.java | 29 + .../domain/resp/CategoryCommonDataResp.java | 44 + .../product/domain/resp/CategoryInfoResp.java | 85 + .../resp/CategoryParentCommonDataResp.java | 38 + .../ruoyi/product/domain/resp/Product.java | 35 + .../domain/resp/ProductDetailResp.java | 35 + .../product/domain/resp/ProductInfoResp.java | 113 + .../com/ruoyi/product/domain/resp/Rule.java | 35 + .../ruoyi/product/domain/resp/RuleValue.java | 18 + .../product/domain/resp/Specification.java | 36 + .../domain/resp/SpecificationInfoResp.java | 44 + .../ruoyi-product-remote/pom.xml | 28 + .../ruoyi-product-server/pom.xml | 121 + .../ruoyi/product/MuYuProductApplication.java | 22 + .../src/main/java/com/ruoyi/product/Test.java | 51 + .../cache/impl/ProjectInfoDataImpl.java | 29 + .../controller/AttributeGroupController.java | 115 + .../controller/AttributeInfoController.java | 113 + .../controller/BrandInfoController.java | 113 + .../controller/CategoryController.java | 134 + .../ProductAttributeInfoController.java | 110 + .../controller/ProductInfoController.java | 161 + .../controller/ProductSkuController.java | 84 + .../mapper/AsAttributeInfoGroupMapper.java | 14 + .../AsCategoryAttributeGroupMapper.java | 14 + .../mapper/AsCategoryAttributeMapper.java | 14 + .../product/mapper/AsCategoryBrandMapper.java | 14 + .../AsSpecificationInfoGroupMapper.java | 14 + .../product/mapper/AttributeGroupMapper.java | 14 + .../product/mapper/AttributeInfoMapper.java | 14 + .../ruoyi/product/mapper/BrandInfoMapper.java | 14 + .../ruoyi/product/mapper/CategoryMapper.java | 14 + .../mapper/ProductAttributeInfoMapper.java | 14 + .../product/mapper/ProductInfoMapper.java | 14 + .../product/mapper/ProductSkuMapper.java | 14 + .../mapper/SpecificationGroupMapper.java | 14 + .../mapper/SpecificationInfoMapper.java | 14 + .../service/AsAttributeInfoGroupService.java | 22 + .../AsCategoryAttributeGroupService.java | 22 + .../service/AsCategoryAttributeService.java | 22 + .../service/AsCategoryBrandService.java | 22 + .../AsSpecificationInfoGroupService.java | 22 + .../service/AttributeGroupService.java | 36 + .../product/service/AttributeInfoService.java | 25 + .../product/service/BrandInfoService.java | 22 + .../product/service/CategoryService.java | 74 + .../service/ProductAttributeInfoService.java | 22 + .../product/service/ProductInfoService.java | 62 + .../product/service/ProductSkuService.java | 22 + .../service/SpecificationGroupService.java | 22 + .../service/SpecificationInfoService.java | 22 + .../impl/AsAttributeInfoGroupServiceImpl.java | 48 + .../AsCategoryAttributeGroupServiceImpl.java | 48 + .../impl/AsCategoryAttributeServiceImpl.java | 48 + .../impl/AsCategoryBrandServiceImpl.java | 48 + .../AsSpecificationInfoGroupServiceImpl.java | 52 + .../impl/AttributeGroupServiceImpl.java | 164 + .../impl/AttributeInfoServiceImpl.java | 50 + .../service/impl/BrandInfoServiceImpl.java | 52 + .../service/impl/CategoryServiceImpl.java | 385 +++ .../impl/ProductAttributeInfoServiceImpl.java | 56 + .../service/impl/ProductInfoServiceImpl.java | 485 +++ .../service/impl/ProductSkuServiceImpl.java | 64 + .../impl/SpecificationGroupServiceImpl.java | 41 + .../impl/SpecificationInfoServiceImpl.java | 44 + .../src/main/java/com/ruoyi/product/test | 40 + .../src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 28 + .../src/main/resources/logback.xml | 74 + .../ruoyi-modules/ruoyi-system/pom.xml | 108 + .../ruoyi/system/MuYuSystemApplication.java | 22 + .../system/controller/MyBookController.java | 104 + .../controller/SysConfigController.java | 118 + .../system/controller/SysDeptController.java | 113 + .../controller/SysDictDataController.java | 107 + .../controller/SysDictTypeController.java | 115 + .../controller/SysLogininforController.java | 80 + .../system/controller/SysMenuController.java | 137 + .../controller/SysNoticeController.java | 80 + .../controller/SysOperlogController.java | 67 + .../system/controller/SysPostController.java | 110 + .../controller/SysProfileController.java | 134 + .../system/controller/SysRoleController.java | 214 ++ .../system/controller/SysUserController.java | 293 ++ .../controller/SysUserOnlineController.java | 69 + .../java/com/ruoyi/system/domain/MyBook.java | 138 + .../com/ruoyi/system/domain/SysConfig.java | 126 + .../java/com/ruoyi/system/domain/SysMenu.java | 269 ++ .../com/ruoyi/system/domain/SysNotice.java | 112 + .../java/com/ruoyi/system/domain/SysPost.java | 134 + .../com/ruoyi/system/domain/SysRoleDept.java | 45 + .../com/ruoyi/system/domain/SysRoleMenu.java | 45 + .../ruoyi/system/domain/SysUserOnline.java | 99 + .../com/ruoyi/system/domain/SysUserPost.java | 45 + .../com/ruoyi/system/domain/SysUserRole.java | 45 + .../system/domain/resp/AuthRoleResp.java | 33 + .../system/domain/resp/DeptTreeResp.java | 32 + .../ruoyi/system/domain/resp/ProfileResp.java | 34 + .../system/domain/resp/RoleMenuTreeResp.java | 31 + .../domain/resp/UserDetailInfoResp.java | 47 + .../system/domain/resp/UserInfoResp.java | 36 + .../com/ruoyi/system/domain/vo/MetaVo.java | 91 + .../com/ruoyi/system/domain/vo/RouterVo.java | 130 + .../ruoyi/system/domain/vo/TreeSelect.java | 74 + .../com/ruoyi/system/mapper/MyBookMapper.java | 61 + .../ruoyi/system/mapper/SysConfigMapper.java | 12 + .../ruoyi/system/mapper/SysDeptMapper.java | 131 + .../system/mapper/SysDictDataMapper.java | 105 + .../system/mapper/SysDictTypeMapper.java | 92 + .../system/mapper/SysLogininforMapper.java | 45 + .../ruoyi/system/mapper/SysMenuMapper.java | 138 + .../ruoyi/system/mapper/SysNoticeMapper.java | 67 + .../ruoyi/system/mapper/SysOperLogMapper.java | 52 + .../ruoyi/system/mapper/SysPostMapper.java | 110 + .../system/mapper/SysRoleDeptMapper.java | 50 + .../ruoyi/system/mapper/SysRoleMapper.java | 119 + .../system/mapper/SysRoleMenuMapper.java | 50 + .../ruoyi/system/mapper/SysUserMapper.java | 142 + .../system/mapper/SysUserPostMapper.java | 49 + .../system/mapper/SysUserRoleMapper.java | 69 + .../ruoyi/system/service/IMyBookService.java | 61 + .../system/service/SysConfigService.java | 44 + .../ruoyi/system/service/SysDeptService.java | 138 + .../system/service/SysDictDataService.java | 66 + .../system/service/SysDictTypeService.java | 106 + .../system/service/SysLogininforService.java | 43 + .../ruoyi/system/service/SysMenuService.java | 161 + .../system/service/SysNoticeService.java | 67 + .../system/service/SysOperLogService.java | 54 + .../system/service/SysPermissionService.java | 30 + .../ruoyi/system/service/SysPostService.java | 110 + .../ruoyi/system/service/SysRoleService.java | 191 ++ .../system/service/SysUserOnlineService.java | 51 + .../ruoyi/system/service/SysUserService.java | 228 ++ .../service/impl/MyBookServiceImpl.java | 99 + .../service/impl/SysConfigServiceImpl.java | 114 + .../service/impl/SysDeptServiceImpl.java | 318 ++ .../service/impl/SysDictDataServiceImpl.java | 108 + .../service/impl/SysDictTypeServiceImpl.java | 209 ++ .../impl/SysLogininforServiceImpl.java | 64 + .../service/impl/SysMenuServiceImpl.java | 487 +++ .../service/impl/SysNoticeServiceImpl.java | 93 + .../service/impl/SysOperLogServiceImpl.java | 77 + .../impl/SysPermissionServiceImpl.java | 76 + .../service/impl/SysPostServiceImpl.java | 174 ++ .../service/impl/SysRoleServiceImpl.java | 399 +++ .../impl/SysUserOnlineServiceImpl.java | 84 + .../service/impl/SysUserServiceImpl.java | 503 +++ .../src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 28 + .../src/main/resources/logback.xml | 74 + .../resources/mapper/system/MyBookMapper.xml | 101 + .../mapper/system/SysConfigMapper.xml | 128 + .../resources/mapper/system/SysDeptMapper.xml | 183 ++ .../mapper/system/SysDictDataMapper.xml | 143 + .../mapper/system/SysDictTypeMapper.xml | 107 + .../mapper/system/SysLogininforMapper.xml | 54 + .../resources/mapper/system/SysMenuMapper.xml | 258 ++ .../mapper/system/SysNoticeMapper.xml | 100 + .../mapper/system/SysOperLogMapper.xml | 103 + .../resources/mapper/system/SysPostMapper.xml | 131 + .../mapper/system/SysRoleDeptMapper.xml | 38 + .../resources/mapper/system/SysRoleMapper.xml | 163 + .../mapper/system/SysRoleMenuMapper.xml | 38 + .../resources/mapper/system/SysUserMapper.xml | 271 ++ .../mapper/system/SysUserPostMapper.xml | 38 + .../mapper/system/SysUserRoleMapper.xml | 51 + .../ruoyi-visual/muyu-monitor/pom.xml | 85 + .../monitor/MuYuMonitorApplication.java | 18 + .../monitor/config/WebSecurityConfigurer.java | 48 + .../src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 25 + .../src/main/resources/logback.xml | 74 + muyu-ruoyi-server/ruoyi-visual/pom.xml | 22 + muyu-ruoyi-server/sql/quartz.sql | 174 ++ muyu-ruoyi-server/sql/ry_20231130.sql | 696 +++++ muyu-ruoyi-server/sql/ry_config_20231204.sql | 219 ++ muyu-ruoyi-server/sql/ry_seata_20210128.sql | 80 + ruoyi-product-cache.iml | 131 + 885 files changed, 65517 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/libraries/Maven__aopalliance_aopalliance_1_0.xml create mode 100644 .idea/libraries/Maven__cglib_cglib_3_1.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_12.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_core_1_2_12.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_gateway_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_seata_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2021_0_5_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_druid_1_2_16.xml create mode 100644 .idea/libraries/Maven__com_alibaba_druid_1_2_6.xml create mode 100644 .idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_16.xml create mode 100644 .idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_41.xml create mode 100644 .idea/libraries/Maven__com_alibaba_fastjson_1_2_83.xml create mode 100644 .idea/libraries/Maven__com_alibaba_fastjson_1_2_83_noneautotype.xml create mode 100644 .idea/libraries/Maven__com_alibaba_nacos_nacos_auth_plugin_2_2_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_nacos_nacos_client_2_2_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_nacos_nacos_encryption_plugin_2_2_0.xml create mode 100644 .idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_11.xml create mode 100644 .idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_3.xml create mode 100644 .idea/libraries/Maven__com_baomidou_dynamic_datasource_spring_boot_starter_3_5_2.xml create mode 100644 .idea/libraries/Maven__com_baomidou_mybatis_plus_3_5_3_1.xml create mode 100644 .idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_5_3_1.xml create mode 100644 .idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_5_3_1.xml create mode 100644 .idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_5_3_1.xml create mode 100644 .idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_5_3_1.xml create mode 100644 .idea/libraries/Maven__com_carrotsearch_thirdparty_simple_xml_safe_2_7_1.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_5.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_5.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_5.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_5.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_5.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_5.xml create mode 100644 .idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_9_3.xml create mode 100644 .idea/libraries/Maven__com_github_jsqlparser_jsqlparser_4_5.xml create mode 100644 .idea/libraries/Maven__com_github_pagehelper_pagehelper_5_3_3.xml create mode 100644 .idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_4_7.xml create mode 100644 .idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_4_7.xml create mode 100644 .idea/libraries/Maven__com_github_tobato_fastdfs_client_1_27_2.xml create mode 100644 .idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml create mode 100644 .idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml create mode 100644 .idea/libraries/Maven__com_google_code_gson_gson_2_9_1.xml create mode 100644 .idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_2_0.xml create mode 100644 .idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml create mode 100644 .idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_27_0_1_jre.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_30_0_jre.xml create mode 100644 .idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml create mode 100644 .idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml create mode 100644 .idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml create mode 100644 .idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml create mode 100644 .idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml create mode 100644 .idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml create mode 100644 .idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml create mode 100644 .idea/libraries/Maven__com_muyu_ruoyi_product_common_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__com_mysql_mysql_connector_j_8_0_33.xml create mode 100644 .idea/libraries/Maven__com_squareup_okhttp3_okhttp_4_9_3.xml create mode 100644 .idea/libraries/Maven__com_squareup_okio_okio_2_8_0.xml create mode 100644 .idea/libraries/Maven__com_stoyanr_evictor_1_0_0.xml create mode 100644 .idea/libraries/Maven__com_typesafe_config_1_2_1.xml create mode 100644 .idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml create mode 100644 .idea/libraries/Maven__com_zaxxer_SparseBitSet_1_2.xml create mode 100644 .idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml create mode 100644 .idea/libraries/Maven__commons_codec_commons_codec_1_15.xml create mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml create mode 100644 .idea/libraries/Maven__commons_fileupload_commons_fileupload_1_5.xml create mode 100644 .idea/libraries/Maven__commons_io_commons_io_2_13_0.xml create mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_6.xml create mode 100644 .idea/libraries/Maven__commons_pool_commons_pool_1_6.xml create mode 100644 .idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_7_10.xml create mode 100644 .idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_7_10.xml create mode 100644 .idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_7_10.xml create mode 100644 .idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_7_10.xml create mode 100644 .idea/libraries/Maven__io_github_classgraph_classgraph_4_8_83.xml create mode 100644 .idea/libraries/Maven__io_github_openfeign_feign_core_11_10.xml create mode 100644 .idea/libraries/Maven__io_github_openfeign_feign_slf4j_11_10.xml create mode 100644 .idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml create mode 100644 .idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml create mode 100644 .idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml create mode 100644 .idea/libraries/Maven__io_lettuce_lettuce_core_6_1_10_RELEASE.xml create mode 100644 .idea/libraries/Maven__io_micrometer_micrometer_core_1_9_12.xml create mode 100644 .idea/libraries/Maven__io_minio_minio_8_2_2.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_all_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_buffer_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_dns_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_haproxy_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_http2_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_http_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_memcache_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_mqtt_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_redis_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_smtp_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_socks_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_stomp_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_xml_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_common_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_ssl_ocsp_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_aarch_64_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_aarch_64_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_aarch_64_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_rxtx_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_sctp_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_udt_4_1_94_Final.xml create mode 100644 .idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_4_10.xml create mode 100644 .idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_33.xml create mode 100644 .idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_33.xml create mode 100644 .idea/libraries/Maven__io_projectreactor_reactor_core_3_4_30.xml create mode 100644 .idea/libraries/Maven__io_prometheus_simpleclient_0_15_0.xml create mode 100644 .idea/libraries/Maven__io_prometheus_simpleclient_tracer_common_0_15_0.xml create mode 100644 .idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_0_15_0.xml create mode 100644 .idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_agent_0_15_0.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_all_1_6_1.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_common_1_5_2.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_config_core_1_5_2.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_core_1_5_2.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_discovery_core_1_5_2.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_spring_autoconfigure_client_1_6_1.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_spring_autoconfigure_core_1_6_1.xml create mode 100644 .idea/libraries/Maven__io_seata_seata_spring_boot_starter_1_6_1.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_core_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_schema_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_spi_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_spring_web_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_spring_webflux_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_spring_webmvc_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_swagger2_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_swagger_common_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_swagger_ui_3_0_0.xml create mode 100644 .idea/libraries/Maven__io_swagger_core_v3_swagger_annotations_2_1_2.xml create mode 100644 .idea/libraries/Maven__io_swagger_swagger_annotations_1_6_2.xml create mode 100644 .idea/libraries/Maven__io_swagger_swagger_models_1_6_2.xml create mode 100644 .idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml create mode 100644 .idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml create mode 100644 .idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml create mode 100644 .idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml create mode 100644 .idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml create mode 100644 .idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_23.xml create mode 100644 .idea/libraries/Maven__net_coobird_thumbnailator_0_4_8.xml create mode 100644 .idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml create mode 100644 .idea/libraries/Maven__org_antlr_ST4_4_3.xml create mode 100644 .idea/libraries/Maven__org_antlr_antlr4_4_8.xml create mode 100644 .idea/libraries/Maven__org_antlr_antlr4_runtime_4_8.xml create mode 100644 .idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_math3_3_6_1.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_pool2_2_11_1.xml create mode 100644 .idea/libraries/Maven__org_apache_dubbo_dubbo_3_0_8.xml create mode 100644 .idea/libraries/Maven__org_apache_dubbo_extensions_dubbo_filter_seata_1_0_0.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_5.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_14.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_16.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_16.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_76.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_76.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_76.xml create mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_engine_core_2_3.xml create mode 100644 .idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml create mode 100644 .idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_7.xml create mode 100644 .idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_69.xml create mode 100644 .idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_69.xml create mode 100644 .idea/libraries/Maven__org_bouncycastle_bcutil_jdk15on_1_69.xml create mode 100644 .idea/libraries/Maven__org_checkerframework_checker_qual_2_5_2.xml create mode 100644 .idea/libraries/Maven__org_checkerframework_checker_qual_3_5_0.xml create mode 100644 .idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_17.xml create mode 100644 .idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml create mode 100644 .idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml create mode 100644 .idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_5_Final.xml create mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_28_0_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_3_Final.xml create mode 100644 .idea/libraries/Maven__org_jetbrains_annotations_13_0.xml create mode 100644 .idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml create mode 100644 .idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml create mode 100644 .idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml create mode 100644 .idea/libraries/Maven__org_mapstruct_mapstruct_1_3_1_Final.xml create mode 100644 .idea/libraries/Maven__org_mybatis_mybatis_3_5_13.xml create mode 100644 .idea/libraries/Maven__org_mybatis_mybatis_spring_2_1_1.xml create mode 100644 .idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_3_1.xml create mode 100644 .idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_3_1.xml create mode 100644 .idea/libraries/Maven__org_ow2_asm_asm_4_2.xml create mode 100644 .idea/libraries/Maven__org_projectlombok_lombok_1_18_28.xml create mode 100644 .idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml create mode 100644 .idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_4.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_36.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_3_1_7.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_3_1_7.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_3_1_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_loadbalancer_3_1_7.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_3_1_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_3_1_7.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_bootstrap_3_1_7.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_3_1_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_loadbalancer_3_1_7.xml create mode 100644 .idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_3_1_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_commons_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_redis_2_7_13.xml create mode 100644 .idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_config_5_7_9.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_core_5_7_9.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_7_9.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_11_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_security_spring_security_web_5_7_9.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_support_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jcl_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jdbc_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_oxm_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_tx_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_web_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webflux_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_5_3_28.xml create mode 100644 .idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_15_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_15_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml create mode 100644 .idea/libraries/Maven__pro_fessional_kaptcha_2_3_3.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/muyu-ruoyi-server-product-dev.iml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 logs/muyu-auth/error.2024-03-21.log create mode 100644 logs/muyu-auth/error.log create mode 100644 logs/muyu-auth/info.2024-03-21.log create mode 100644 logs/muyu-auth/info.2024-03-22.log create mode 100644 logs/muyu-auth/info.2024-03-23.log create mode 100644 logs/muyu-auth/info.2024-03-24.log create mode 100644 logs/muyu-auth/info.2024-03-25.log create mode 100644 logs/muyu-auth/info.2024-03-26.log create mode 100644 logs/muyu-auth/info.log create mode 100644 logs/muyu-file/error.2024-03-21.log create mode 100644 logs/muyu-file/error.2024-03-24.log create mode 100644 logs/muyu-file/error.log create mode 100644 logs/muyu-file/info.2024-03-21.log create mode 100644 logs/muyu-file/info.2024-03-22.log create mode 100644 logs/muyu-file/info.2024-03-23.log create mode 100644 logs/muyu-file/info.2024-03-24.log create mode 100644 logs/muyu-file/info.2024-03-25.log create mode 100644 logs/muyu-file/info.2024-03-26.log create mode 100644 logs/muyu-file/info.log create mode 100644 logs/muyu-gateway/error.2024-03-21.log create mode 100644 logs/muyu-gateway/error.2024-03-23.log create mode 100644 logs/muyu-gateway/error.2024-03-24.log create mode 100644 logs/muyu-gateway/error.2024-03-25.log create mode 100644 logs/muyu-gateway/error.log create mode 100644 logs/muyu-gateway/info.2024-03-21.log create mode 100644 logs/muyu-gateway/info.2024-03-22.log create mode 100644 logs/muyu-gateway/info.2024-03-23.log create mode 100644 logs/muyu-gateway/info.2024-03-24.log create mode 100644 logs/muyu-gateway/info.2024-03-25.log create mode 100644 logs/muyu-gateway/info.2024-03-26.log create mode 100644 logs/muyu-gateway/info.log create mode 100644 logs/muyu-gen/error.log create mode 100644 logs/muyu-gen/info.log create mode 100644 logs/muyu-job/error.log create mode 100644 logs/muyu-job/info.log create mode 100644 logs/muyu-product/error.2024-03-21.log create mode 100644 logs/muyu-product/error.2024-03-23.log create mode 100644 logs/muyu-product/error.2024-03-24.log create mode 100644 logs/muyu-product/error.2024-03-25.log create mode 100644 logs/muyu-product/error.2024-03-26.log create mode 100644 logs/muyu-product/error.log create mode 100644 logs/muyu-product/info.2024-03-21.log create mode 100644 logs/muyu-product/info.2024-03-22.log create mode 100644 logs/muyu-product/info.2024-03-23.log create mode 100644 logs/muyu-product/info.2024-03-24.log create mode 100644 logs/muyu-product/info.2024-03-25.log create mode 100644 logs/muyu-product/info.2024-03-26.log create mode 100644 logs/muyu-product/info.log create mode 100644 logs/muyu-system/error.2024-03-21.log create mode 100644 logs/muyu-system/error.2024-03-22.log create mode 100644 logs/muyu-system/error.2024-03-23.log create mode 100644 logs/muyu-system/error.2024-03-24.log create mode 100644 logs/muyu-system/error.log create mode 100644 logs/muyu-system/info.2024-03-21.log create mode 100644 logs/muyu-system/info.2024-03-22.log create mode 100644 logs/muyu-system/info.2024-03-23.log create mode 100644 logs/muyu-system/info.2024-03-24.log create mode 100644 logs/muyu-system/info.2024-03-25.log create mode 100644 logs/muyu-system/info.2024-03-26.log create mode 100644 logs/muyu-system/info.log create mode 100644 logs/muyu-visual-monitor/error.log create mode 100644 logs/muyu-visual-monitor/info.log create mode 100644 muyu-common-cache.iml create mode 100644 muyu-ruoyi-server/.gitignore create mode 100644 muyu-ruoyi-server/LICENSE create mode 100644 muyu-ruoyi-server/README.md create mode 100644 muyu-ruoyi-server/bin/clean.bat create mode 100644 muyu-ruoyi-server/bin/package.bat create mode 100644 muyu-ruoyi-server/bin/run-auth.bat create mode 100644 muyu-ruoyi-server/bin/run-gateway.bat create mode 100644 muyu-ruoyi-server/bin/run-modules-file.bat create mode 100644 muyu-ruoyi-server/bin/run-modules-gen.bat create mode 100644 muyu-ruoyi-server/bin/run-modules-job.bat create mode 100644 muyu-ruoyi-server/bin/run-modules-system.bat create mode 100644 muyu-ruoyi-server/bin/run-monitor.bat create mode 100644 muyu-ruoyi-server/docker/copy.sh create mode 100644 muyu-ruoyi-server/docker/deploy.sh create mode 100644 muyu-ruoyi-server/docker/docker-compose.yml create mode 100644 muyu-ruoyi-server/docker/muyu/auth/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/auth/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/muyu/gateway/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/gateway/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/muyu/modules/file/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/modules/file/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/muyu/modules/gen/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/modules/gen/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/muyu/modules/job/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/modules/job/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/muyu/modules/system/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/modules/system/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/muyu/visual/monitor/dockerfile create mode 100644 muyu-ruoyi-server/docker/muyu/visual/monitor/jar/readme.txt create mode 100644 muyu-ruoyi-server/docker/mysql/db/readme.txt create mode 100644 muyu-ruoyi-server/docker/mysql/dockerfile create mode 100644 muyu-ruoyi-server/docker/nacos/conf/application.properties create mode 100644 muyu-ruoyi-server/docker/nacos/dockerfile create mode 100644 muyu-ruoyi-server/docker/nginx/conf/nginx.conf create mode 100644 muyu-ruoyi-server/docker/nginx/dockerfile create mode 100644 muyu-ruoyi-server/docker/redis/conf/redis.conf create mode 100644 muyu-ruoyi-server/docker/redis/dockerfile create mode 100644 muyu-ruoyi-server/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-auth/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/MuYuAuthApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-auth/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-cache/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excel.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excels.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/GenConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/HttpStatus.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ScheduleConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/context/SecurityContextHolder.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/domain/Result.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/enums/UserStatus.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotLoginException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotPermissionException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotRoleException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileNameLengthLimitExceededException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileSizeLimitExceededException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileUploadException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/InvalidExtensionException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/CaptchaExpireException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserPasswordNotMatchException.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/CharsetKit.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/Convert.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/StrFormatter.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ExceptionUtil.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ObjUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/SpringUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileTypeUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/ImageUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/MimeTypeUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/EscapeUtil.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/HTMLFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ip/IpUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelHandlerAdapter.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/reflect/ReflectUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sign/Base64.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/IdUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/Seq.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/UUID.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/TreeEntity.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/PageDomain.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableDataInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableSupport.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Master.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Slave.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessStatus.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessType.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/OperatorType.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/filter/PropertyPreExcludeFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-redis/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-seata/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableMyFeignClients.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/annotation/EnableCustomSwagger2.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerAutoConfiguration.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerBeanPostProcessor.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerProperties.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/LoginUser.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDept.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictData.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictType.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysFile.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysLogininfor.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysOperLog.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysRole.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysUser.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteFileService.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteLogService.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteUserService.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteFileFallbackFactory.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteLogFallbackFactory.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteUserFallbackFactory.java create mode 100644 muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 muyu-ruoyi-server/ruoyi-common/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-gateway/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/MuYuGatewayApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CaptchaConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/RouterFunctionConfiguration.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CaptchaProperties.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/IgnoreWhiteProperties.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/XssProperties.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/BlackListUrlFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SentinelFallbackHandler.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/ValidateCodeHandler.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/model/resp/CaptchaCodeResp.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/ValidateCodeService.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/impl/ValidateCodeServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-gateway/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/MuYuFileApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/MinioConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/MuYuGenApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/config/GenConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableColumnMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableColumnServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableColumnService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/edit.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/query.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/save.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/js/api.js.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/sql/sql.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/MuYuJobApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/ScheduleConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobLogController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJob.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJobLog.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobLogMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobLogService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobLogServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/MyTask.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/AbstractQuartzJob.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/CronUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzDisallowConcurrentExecution.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzJobExecution.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ScheduleUtils.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobLogMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsAttributeInfoGroup.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttribute.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttributeGroup.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryBrand.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsSpecificationInfoGroup.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeGroup.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/BrandInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/CategoryInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductAttributeInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductSku.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationGroup.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationInfo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/CategoryBase.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/TreeBaseEntity.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupEditModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupSaveModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeValueSaveModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoEditModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoSaveModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoEditModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoSaveModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductSkuSaveModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeGroupModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeModel.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupEditReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoEditReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoEditReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryEditReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategorySaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoEditReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoEditReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoQueryReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoSaveReq.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Attribute.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupInfoResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupPageResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CarouselImage.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryCommonDataResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryInfoResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryParentCommonDataResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Product.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductDetailResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductInfoResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Rule.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/RuleValue.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Specification.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/SpecificationInfoResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-remote/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/MuYuProductApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/Test.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/cache/impl/ProjectInfoDataImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeGroupController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeInfoController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/BrandInfoController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/CategoryController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductAttributeInfoController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductInfoController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductSkuController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsAttributeInfoGroupMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeGroupMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryBrandMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsSpecificationInfoGroupMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeGroupMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeInfoMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/BrandInfoMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/CategoryMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductAttributeInfoMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductInfoMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductSkuMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationGroupMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationInfoMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsAttributeInfoGroupService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeGroupService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryBrandService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsSpecificationInfoGroupService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeGroupService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeInfoService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/BrandInfoService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/CategoryService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductAttributeInfoService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductInfoService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductSkuService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationGroupService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationInfoService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsAttributeInfoGroupServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeGroupServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryBrandServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsSpecificationInfoGroupServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeGroupServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeInfoServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/BrandInfoServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/CategoryServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductAttributeInfoServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductInfoServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductSkuServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationGroupServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationInfoServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/test create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/MuYuSystemApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/MyBookController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/MyBook.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/AuthRoleResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/DeptTreeResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/ProfileResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/RoleMenuTreeResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserDetailInfoResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserInfoResp.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TreeSelect.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MyBookMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IMyBookService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysConfigService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDeptService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictDataService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictTypeService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLogininforService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysMenuService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperLogService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPostService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRoleService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MyBookServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MyBookMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml create mode 100644 muyu-ruoyi-server/ruoyi-visual/muyu-monitor/pom.xml create mode 100644 muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/MuYuMonitorApplication.java create mode 100644 muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java create mode 100644 muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/banner.txt create mode 100644 muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/bootstrap.yml create mode 100644 muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/logback.xml create mode 100644 muyu-ruoyi-server/ruoyi-visual/pom.xml create mode 100644 muyu-ruoyi-server/sql/quartz.sql create mode 100644 muyu-ruoyi-server/sql/ry_20231130.sql create mode 100644 muyu-ruoyi-server/sql/ry_config_20231204.sql create mode 100644 muyu-ruoyi-server/sql/ry_seata_20210128.sql create mode 100644 ruoyi-product-cache.iml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..cf08e7c --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..5411d3e --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..20edb4e --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml new file mode 100644 index 0000000..f264578 --- /dev/null +++ b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__cglib_cglib_3_1.xml b/.idea/libraries/Maven__cglib_cglib_3_1.xml new file mode 100644 index 0000000..b256ae3 --- /dev/null +++ b/.idea/libraries/Maven__cglib_cglib_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_12.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_12.xml new file mode 100644 index 0000000..10e551e --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_12.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_12.xml new file mode 100644 index 0000000..0afe32e --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2021_0_5_0.xml new file mode 100644 index 0000000..80062ab --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_commons_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2021_0_5_0.xml new file mode 100644 index 0000000..c8611dc --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_datasource_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_gateway_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_gateway_2021_0_5_0.xml new file mode 100644 index 0000000..14c7054 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_alibaba_sentinel_gateway_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2021_0_5_0.xml new file mode 100644 index 0000000..cc84033 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_circuitbreaker_sentinel_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2021_0_5_0.xml new file mode 100644 index 0000000..759e974 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_config_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2021_0_5_0.xml new file mode 100644 index 0000000..3e7c919 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_nacos_discovery_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_seata_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_seata_2021_0_5_0.xml new file mode 100644 index 0000000..8905cc1 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_seata_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2021_0_5_0.xml b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2021_0_5_0.xml new file mode 100644 index 0000000..642bcec --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_cloud_spring_cloud_starter_alibaba_sentinel_2021_0_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_6.xml new file mode 100644 index 0000000..6e0226a --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_annotation_aspectj_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_6.xml new file mode 100644 index 0000000..c6f8fc9 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_api_gateway_adapter_common_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_6.xml new file mode 100644 index 0000000..deb6725 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_client_default_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_6.xml new file mode 100644 index 0000000..ae29fec --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_common_default_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_6.xml new file mode 100644 index 0000000..81a81d6 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_cluster_server_default_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_6.xml new file mode 100644 index 0000000..639e646 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_core_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_6.xml new file mode 100644 index 0000000..bda9329 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_extension_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_6.xml new file mode 100644 index 0000000..518676f --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_datasource_nacos_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_6.xml new file mode 100644 index 0000000..f7cbdd4 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_parameter_flow_control_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_6.xml new file mode 100644 index 0000000..1da0bba --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_reactor_adapter_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_6.xml new file mode 100644 index 0000000..c5eee0b --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_cloud_gateway_adapter_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_6.xml new file mode 100644 index 0000000..2d5bb4a --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webflux_adapter_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_6.xml new file mode 100644 index 0000000..5fc42ed --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_spring_webmvc_adapter_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_6.xml new file mode 100644 index 0000000..c02f370 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_common_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_6.xml b/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_6.xml new file mode 100644 index 0000000..9b18999 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_csp_sentinel_transport_simple_http_1_8_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_druid_1_2_16.xml b/.idea/libraries/Maven__com_alibaba_druid_1_2_16.xml new file mode 100644 index 0000000..e0a1bb3 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_druid_1_2_16.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_druid_1_2_6.xml b/.idea/libraries/Maven__com_alibaba_druid_1_2_6.xml new file mode 100644 index 0000000..153afa6 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_druid_1_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_16.xml b/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_16.xml new file mode 100644 index 0000000..e5d0fa7 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_2_16.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_41.xml b/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_41.xml new file mode 100644 index 0000000..dbac1c8 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_41.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_fastjson_1_2_83.xml b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_83.xml new file mode 100644 index 0000000..1379fa0 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_83.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_fastjson_1_2_83_noneautotype.xml b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_83_noneautotype.xml new file mode 100644 index 0000000..177f58c --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_83_noneautotype.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_nacos_nacos_auth_plugin_2_2_0.xml b/.idea/libraries/Maven__com_alibaba_nacos_nacos_auth_plugin_2_2_0.xml new file mode 100644 index 0000000..5cb531c --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_nacos_nacos_auth_plugin_2_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_nacos_nacos_client_2_2_0.xml b/.idea/libraries/Maven__com_alibaba_nacos_nacos_client_2_2_0.xml new file mode 100644 index 0000000..e74a1c3 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_nacos_nacos_client_2_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_nacos_nacos_encryption_plugin_2_2_0.xml b/.idea/libraries/Maven__com_alibaba_nacos_nacos_encryption_plugin_2_2_0.xml new file mode 100644 index 0000000..875c35b --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_nacos_nacos_encryption_plugin_2_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_11.xml b/.idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_11.xml new file mode 100644 index 0000000..45414f1 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_spring_spring_context_support_1_0_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_3.xml b/.idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_3.xml new file mode 100644 index 0000000..434cdc7 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_baomidou_dynamic_datasource_spring_boot_starter_3_5_2.xml b/.idea/libraries/Maven__com_baomidou_dynamic_datasource_spring_boot_starter_3_5_2.xml new file mode 100644 index 0000000..6b0eb6e --- /dev/null +++ b/.idea/libraries/Maven__com_baomidou_dynamic_datasource_spring_boot_starter_3_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_baomidou_mybatis_plus_3_5_3_1.xml b/.idea/libraries/Maven__com_baomidou_mybatis_plus_3_5_3_1.xml new file mode 100644 index 0000000..a15912b --- /dev/null +++ b/.idea/libraries/Maven__com_baomidou_mybatis_plus_3_5_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_5_3_1.xml b/.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_5_3_1.xml new file mode 100644 index 0000000..e5f885f --- /dev/null +++ b/.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_5_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_5_3_1.xml b/.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_5_3_1.xml new file mode 100644 index 0000000..32e28a7 --- /dev/null +++ b/.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_5_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_5_3_1.xml b/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_5_3_1.xml new file mode 100644 index 0000000..7f716bd --- /dev/null +++ b/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_5_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_5_3_1.xml b/.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_5_3_1.xml new file mode 100644 index 0000000..164aee0 --- /dev/null +++ b/.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_5_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_carrotsearch_thirdparty_simple_xml_safe_2_7_1.xml b/.idea/libraries/Maven__com_carrotsearch_thirdparty_simple_xml_safe_2_7_1.xml new file mode 100644 index 0000000..1352fa1 --- /dev/null +++ b/.idea/libraries/Maven__com_carrotsearch_thirdparty_simple_xml_safe_2_7_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml new file mode 100644 index 0000000..85d2dbf --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_5.xml new file mode 100644 index 0000000..87deb3b --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_5.xml new file mode 100644 index 0000000..87fd6c3 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_5.xml new file mode 100644 index 0000000..78c5314 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_5.xml new file mode 100644 index 0000000..c8445fb --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_5.xml new file mode 100644 index 0000000..294a935 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_5.xml new file mode 100644 index 0000000..e591615 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_9_3.xml b/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_9_3.xml new file mode 100644 index 0000000..b410482 --- /dev/null +++ b/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_9_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_4_5.xml b/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_4_5.xml new file mode 100644 index 0000000..07cf6ac --- /dev/null +++ b/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_4_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_3_3.xml b/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_3_3.xml new file mode 100644 index 0000000..2d6c18c --- /dev/null +++ b/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_4_7.xml b/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_4_7.xml new file mode 100644 index 0000000..af8b832 --- /dev/null +++ b/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_4_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_4_7.xml b/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_4_7.xml new file mode 100644 index 0000000..b1e2708 --- /dev/null +++ b/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_4_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_tobato_fastdfs_client_1_27_2.xml b/.idea/libraries/Maven__com_github_tobato_fastdfs_client_1_27_2.xml new file mode 100644 index 0000000..371cad5 --- /dev/null +++ b/.idea/libraries/Maven__com_github_tobato_fastdfs_client_1_27_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml b/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml new file mode 100644 index 0000000..d397de2 --- /dev/null +++ b/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_06.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml new file mode 100644 index 0000000..a7cd777 --- /dev/null +++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_code_gson_gson_2_9_1.xml b/.idea/libraries/Maven__com_google_code_gson_gson_2_9_1.xml new file mode 100644 index 0000000..90c3820 --- /dev/null +++ b/.idea/libraries/Maven__com_google_code_gson_gson_2_9_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_2_0.xml b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_2_0.xml new file mode 100644 index 0000000..c2d64ba --- /dev/null +++ b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml new file mode 100644 index 0000000..8328ec1 --- /dev/null +++ b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml b/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml new file mode 100644 index 0000000..28ddd67 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_27_0_1_jre.xml b/.idea/libraries/Maven__com_google_guava_guava_27_0_1_jre.xml new file mode 100644 index 0000000..cbd1f79 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_27_0_1_jre.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_30_0_jre.xml b/.idea/libraries/Maven__com_google_guava_guava_30_0_jre.xml new file mode 100644 index 0000000..dd3ee41 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_30_0_jre.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml b/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml new file mode 100644 index 0000000..96b7341 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml new file mode 100644 index 0000000..1b25e95 --- /dev/null +++ b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml new file mode 100644 index 0000000..1d75d13 --- /dev/null +++ b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml b/.idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml new file mode 100644 index 0000000..e1703e0 --- /dev/null +++ b/.idea/libraries/Maven__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml b/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml new file mode 100644 index 0000000..cb9638f --- /dev/null +++ b/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml b/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml new file mode 100644 index 0000000..8842854 --- /dev/null +++ b/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml new file mode 100644 index 0000000..78d932d --- /dev/null +++ b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_muyu_ruoyi_product_common_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__com_muyu_ruoyi_product_common_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..f9bcf43 --- /dev/null +++ b/.idea/libraries/Maven__com_muyu_ruoyi_product_common_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mysql_mysql_connector_j_8_0_33.xml b/.idea/libraries/Maven__com_mysql_mysql_connector_j_8_0_33.xml new file mode 100644 index 0000000..3d2e0ab --- /dev/null +++ b/.idea/libraries/Maven__com_mysql_mysql_connector_j_8_0_33.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_squareup_okhttp3_okhttp_4_9_3.xml b/.idea/libraries/Maven__com_squareup_okhttp3_okhttp_4_9_3.xml new file mode 100644 index 0000000..fc806e4 --- /dev/null +++ b/.idea/libraries/Maven__com_squareup_okhttp3_okhttp_4_9_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_squareup_okio_okio_2_8_0.xml b/.idea/libraries/Maven__com_squareup_okio_okio_2_8_0.xml new file mode 100644 index 0000000..846f083 --- /dev/null +++ b/.idea/libraries/Maven__com_squareup_okio_okio_2_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_stoyanr_evictor_1_0_0.xml b/.idea/libraries/Maven__com_stoyanr_evictor_1_0_0.xml new file mode 100644 index 0000000..45c5034 --- /dev/null +++ b/.idea/libraries/Maven__com_stoyanr_evictor_1_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_config_1_2_1.xml b/.idea/libraries/Maven__com_typesafe_config_1_2_1.xml new file mode 100644 index 0000000..38f8e1c --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_config_1_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml b/.idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml new file mode 100644 index 0000000..35d543d --- /dev/null +++ b/.idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_zaxxer_SparseBitSet_1_2.xml b/.idea/libraries/Maven__com_zaxxer_SparseBitSet_1_2.xml new file mode 100644 index 0000000..135cf69 --- /dev/null +++ b/.idea/libraries/Maven__com_zaxxer_SparseBitSet_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml new file mode 100644 index 0000000..0032a58 --- /dev/null +++ b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_15.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_15.xml new file mode 100644 index 0000000..8f4dd01 --- /dev/null +++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml new file mode 100644 index 0000000..175d972 --- /dev/null +++ b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_5.xml b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_5.xml new file mode 100644 index 0000000..dd3e67e --- /dev/null +++ b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_13_0.xml b/.idea/libraries/Maven__commons_io_commons_io_2_13_0.xml new file mode 100644 index 0000000..80b691c --- /dev/null +++ b/.idea/libraries/Maven__commons_io_commons_io_2_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml new file mode 100644 index 0000000..5dce0af --- /dev/null +++ b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml b/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml new file mode 100644 index 0000000..675c941 --- /dev/null +++ b/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_7_10.xml b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_7_10.xml new file mode 100644 index 0000000..77f69de --- /dev/null +++ b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_2_7_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_7_10.xml b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_7_10.xml new file mode 100644 index 0000000..f715808 --- /dev/null +++ b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_cloud_2_7_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_7_10.xml b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_7_10.xml new file mode 100644 index 0000000..6aaf39f --- /dev/null +++ b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_server_ui_2_7_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_7_10.xml b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_7_10.xml new file mode 100644 index 0000000..40cb3e4 --- /dev/null +++ b/.idea/libraries/Maven__de_codecentric_spring_boot_admin_starter_server_2_7_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_github_classgraph_classgraph_4_8_83.xml b/.idea/libraries/Maven__io_github_classgraph_classgraph_4_8_83.xml new file mode 100644 index 0000000..73dd47c --- /dev/null +++ b/.idea/libraries/Maven__io_github_classgraph_classgraph_4_8_83.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_github_openfeign_feign_core_11_10.xml b/.idea/libraries/Maven__io_github_openfeign_feign_core_11_10.xml new file mode 100644 index 0000000..96442ea --- /dev/null +++ b/.idea/libraries/Maven__io_github_openfeign_feign_core_11_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_github_openfeign_feign_slf4j_11_10.xml b/.idea/libraries/Maven__io_github_openfeign_feign_slf4j_11_10.xml new file mode 100644 index 0000000..0ba72f0 --- /dev/null +++ b/.idea/libraries/Maven__io_github_openfeign_feign_slf4j_11_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml b/.idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml new file mode 100644 index 0000000..4357eb8 --- /dev/null +++ b/.idea/libraries/Maven__io_github_openfeign_form_feign_form_3_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml b/.idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml new file mode 100644 index 0000000..9d263c2 --- /dev/null +++ b/.idea/libraries/Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml b/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml new file mode 100644 index 0000000..bc5d8dd --- /dev/null +++ b/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_lettuce_lettuce_core_6_1_10_RELEASE.xml b/.idea/libraries/Maven__io_lettuce_lettuce_core_6_1_10_RELEASE.xml new file mode 100644 index 0000000..52ec4ce --- /dev/null +++ b/.idea/libraries/Maven__io_lettuce_lettuce_core_6_1_10_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_micrometer_micrometer_core_1_9_12.xml b/.idea/libraries/Maven__io_micrometer_micrometer_core_1_9_12.xml new file mode 100644 index 0000000..87a5be9 --- /dev/null +++ b/.idea/libraries/Maven__io_micrometer_micrometer_core_1_9_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_minio_minio_8_2_2.xml b/.idea/libraries/Maven__io_minio_minio_8_2_2.xml new file mode 100644 index 0000000..b3702a8 --- /dev/null +++ b/.idea/libraries/Maven__io_minio_minio_8_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_all_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_all_4_1_94_Final.xml new file mode 100644 index 0000000..f2429fb --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_all_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_94_Final.xml new file mode 100644 index 0000000..997a9d5 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_4_1_94_Final.xml new file mode 100644 index 0000000..af710bc --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_94_Final.xml new file mode 100644 index 0000000..2c96647 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_haproxy_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_haproxy_4_1_94_Final.xml new file mode 100644 index 0000000..fca6467 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_haproxy_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_94_Final.xml new file mode 100644 index 0000000..9fcc076 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_94_Final.xml new file mode 100644 index 0000000..f40c973 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_memcache_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_memcache_4_1_94_Final.xml new file mode 100644 index 0000000..a18acfa --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_memcache_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_mqtt_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_mqtt_4_1_94_Final.xml new file mode 100644 index 0000000..9a4ae4e --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_mqtt_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_redis_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_redis_4_1_94_Final.xml new file mode 100644 index 0000000..e606ba0 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_redis_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_smtp_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_smtp_4_1_94_Final.xml new file mode 100644 index 0000000..7b1c08b --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_smtp_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_94_Final.xml new file mode 100644 index 0000000..a8a68ff --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_stomp_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_stomp_4_1_94_Final.xml new file mode 100644 index 0000000..a0b7a4a --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_stomp_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_xml_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_xml_4_1_94_Final.xml new file mode 100644 index 0000000..132e142 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_xml_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_common_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_common_4_1_94_Final.xml new file mode 100644 index 0000000..7c477e9 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_common_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_4_1_94_Final.xml new file mode 100644 index 0000000..be6cf1b --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_94_Final.xml new file mode 100644 index 0000000..8208da3 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_ssl_ocsp_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_ssl_ocsp_4_1_94_Final.xml new file mode 100644 index 0000000..56a2546 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_ssl_ocsp_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_94_Final.xml new file mode 100644 index 0000000..31a908c --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_94_Final.xml new file mode 100644 index 0000000..92ea8a5 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_94_Final.xml new file mode 100644 index 0000000..ce15e5c --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_aarch_64_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_aarch_64_4_1_94_Final.xml new file mode 100644 index 0000000..7efe616 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_aarch_64_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_94_Final.xml new file mode 100644 index 0000000..caefab5 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_4_1_94_Final.xml new file mode 100644 index 0000000..4208e0b --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_94_Final.xml new file mode 100644 index 0000000..f2536a3 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_94_Final.xml new file mode 100644 index 0000000..bfbf4cf --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_aarch_64_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_aarch_64_4_1_94_Final.xml new file mode 100644 index 0000000..b8e6b24 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_aarch_64_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_94_Final.xml new file mode 100644 index 0000000..eb377bb --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_aarch_64_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_aarch_64_4_1_94_Final.xml new file mode 100644 index 0000000..2f50412 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_aarch_64_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_94_Final.xml new file mode 100644 index 0000000..6aee7c5 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_94_Final.xml new file mode 100644 index 0000000..a814451 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_rxtx_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_rxtx_4_1_94_Final.xml new file mode 100644 index 0000000..ec9900a --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_rxtx_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_sctp_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_sctp_4_1_94_Final.xml new file mode 100644 index 0000000..ba604a4 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_sctp_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_udt_4_1_94_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_udt_4_1_94_Final.xml new file mode 100644 index 0000000..c4c78e4 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_udt_4_1_94_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_4_10.xml b/.idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_4_10.xml new file mode 100644 index 0000000..6514f2b --- /dev/null +++ b/.idea/libraries/Maven__io_projectreactor_addons_reactor_extra_3_4_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_33.xml b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_33.xml new file mode 100644 index 0000000..4b8ab20 --- /dev/null +++ b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_33.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_33.xml b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_33.xml new file mode 100644 index 0000000..b7dd50c --- /dev/null +++ b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_33.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_projectreactor_reactor_core_3_4_30.xml b/.idea/libraries/Maven__io_projectreactor_reactor_core_3_4_30.xml new file mode 100644 index 0000000..1752215 --- /dev/null +++ b/.idea/libraries/Maven__io_projectreactor_reactor_core_3_4_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_prometheus_simpleclient_0_15_0.xml b/.idea/libraries/Maven__io_prometheus_simpleclient_0_15_0.xml new file mode 100644 index 0000000..7d8ce56 --- /dev/null +++ b/.idea/libraries/Maven__io_prometheus_simpleclient_0_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_common_0_15_0.xml b/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_common_0_15_0.xml new file mode 100644 index 0000000..ad14495 --- /dev/null +++ b/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_common_0_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_0_15_0.xml b/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_0_15_0.xml new file mode 100644 index 0000000..0cae4a7 --- /dev/null +++ b/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_0_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_agent_0_15_0.xml b/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_agent_0_15_0.xml new file mode 100644 index 0000000..038bb13 --- /dev/null +++ b/.idea/libraries/Maven__io_prometheus_simpleclient_tracer_otel_agent_0_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_all_1_6_1.xml b/.idea/libraries/Maven__io_seata_seata_all_1_6_1.xml new file mode 100644 index 0000000..59dbbd6 --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_all_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_common_1_5_2.xml b/.idea/libraries/Maven__io_seata_seata_common_1_5_2.xml new file mode 100644 index 0000000..e00509a --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_common_1_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_config_core_1_5_2.xml b/.idea/libraries/Maven__io_seata_seata_config_core_1_5_2.xml new file mode 100644 index 0000000..709e261 --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_config_core_1_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_core_1_5_2.xml b/.idea/libraries/Maven__io_seata_seata_core_1_5_2.xml new file mode 100644 index 0000000..36d6d71 --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_core_1_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_discovery_core_1_5_2.xml b/.idea/libraries/Maven__io_seata_seata_discovery_core_1_5_2.xml new file mode 100644 index 0000000..2abad24 --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_discovery_core_1_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_spring_autoconfigure_client_1_6_1.xml b/.idea/libraries/Maven__io_seata_seata_spring_autoconfigure_client_1_6_1.xml new file mode 100644 index 0000000..8c2dabf --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_spring_autoconfigure_client_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_spring_autoconfigure_core_1_6_1.xml b/.idea/libraries/Maven__io_seata_seata_spring_autoconfigure_core_1_6_1.xml new file mode 100644 index 0000000..4b71716 --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_spring_autoconfigure_core_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_seata_seata_spring_boot_starter_1_6_1.xml b/.idea/libraries/Maven__io_seata_seata_spring_boot_starter_1_6_1.xml new file mode 100644 index 0000000..a20fb21 --- /dev/null +++ b/.idea/libraries/Maven__io_seata_seata_spring_boot_starter_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_core_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_core_3_0_0.xml new file mode 100644 index 0000000..3ec4639 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_core_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_schema_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_schema_3_0_0.xml new file mode 100644 index 0000000..b003968 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_schema_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_spi_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_spi_3_0_0.xml new file mode 100644 index 0000000..1023432 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_spi_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_spring_web_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_spring_web_3_0_0.xml new file mode 100644 index 0000000..c24938b --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_spring_web_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_spring_webflux_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_spring_webflux_3_0_0.xml new file mode 100644 index 0000000..6b7db78 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_spring_webflux_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_spring_webmvc_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_spring_webmvc_3_0_0.xml new file mode 100644 index 0000000..a682aa5 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_spring_webmvc_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_swagger2_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_swagger2_3_0_0.xml new file mode 100644 index 0000000..e7a0e5b --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_swagger2_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_swagger_common_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_swagger_common_3_0_0.xml new file mode 100644 index 0000000..19c6ec5 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_swagger_common_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_3_0_0.xml b/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_3_0_0.xml new file mode 100644 index 0000000..cd4efc7 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_3_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_swagger_core_v3_swagger_annotations_2_1_2.xml b/.idea/libraries/Maven__io_swagger_core_v3_swagger_annotations_2_1_2.xml new file mode 100644 index 0000000..b126c51 --- /dev/null +++ b/.idea/libraries/Maven__io_swagger_core_v3_swagger_annotations_2_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_swagger_swagger_annotations_1_6_2.xml b/.idea/libraries/Maven__io_swagger_swagger_annotations_1_6_2.xml new file mode 100644 index 0000000..0f1ea15 --- /dev/null +++ b/.idea/libraries/Maven__io_swagger_swagger_annotations_1_6_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_swagger_swagger_models_1_6_2.xml b/.idea/libraries/Maven__io_swagger_swagger_models_1_6_2.xml new file mode 100644 index 0000000..bad19b2 --- /dev/null +++ b/.idea/libraries/Maven__io_swagger_swagger_models_1_6_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml new file mode 100644 index 0000000..bb9696d --- /dev/null +++ b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml b/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml new file mode 100644 index 0000000..8e2a326 --- /dev/null +++ b/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml b/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml new file mode 100644 index 0000000..a4c7403 --- /dev/null +++ b/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml new file mode 100644 index 0000000..dfa1d75 --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml b/.idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml new file mode 100644 index 0000000..8fa6eb7 --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml b/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml new file mode 100644 index 0000000..bd3ac24 --- /dev/null +++ b/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_23.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_23.xml new file mode 100644 index 0000000..89c991a --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_23.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_coobird_thumbnailator_0_4_8.xml b/.idea/libraries/Maven__net_coobird_thumbnailator_0_4_8.xml new file mode 100644 index 0000000..8e07e0c --- /dev/null +++ b/.idea/libraries/Maven__net_coobird_thumbnailator_0_4_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml b/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml new file mode 100644 index 0000000..6444974 --- /dev/null +++ b/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_ST4_4_3.xml b/.idea/libraries/Maven__org_antlr_ST4_4_3.xml new file mode 100644 index 0000000..777d29e --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_ST4_4_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_antlr4_4_8.xml b/.idea/libraries/Maven__org_antlr_antlr4_4_8.xml new file mode 100644 index 0000000..0e1fca5 --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_antlr4_4_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_8.xml b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_8.xml new file mode 100644 index 0000000..d65c09c --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml b/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml new file mode 100644 index 0000000..90b97df --- /dev/null +++ b/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml new file mode 100644 index 0000000..6c9e86a --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml b/.idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml new file mode 100644 index 0000000..e175e92 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_compress_1_19.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml new file mode 100644 index 0000000..c46f9f2 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_math3_3_6_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_math3_3_6_1.xml new file mode 100644 index 0000000..a59b049 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_math3_3_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_11_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_11_1.xml new file mode 100644 index 0000000..345c0f4 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_11_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_dubbo_dubbo_3_0_8.xml b/.idea/libraries/Maven__org_apache_dubbo_dubbo_3_0_8.xml new file mode 100644 index 0000000..847dd52 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_dubbo_dubbo_3_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_dubbo_extensions_dubbo_filter_seata_1_0_0.xml b/.idea/libraries/Maven__org_apache_dubbo_extensions_dubbo_filter_seata_1_0_0.xml new file mode 100644 index 0000000..573051f --- /dev/null +++ b/.idea/libraries/Maven__org_apache_dubbo_extensions_dubbo_filter_seata_1_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_5.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_5.xml new file mode 100644 index 0000000..889dc78 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpasyncclient_4_1_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_14.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_14.xml new file mode 100644 index 0000000..b6a9423 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_16.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_16.xml new file mode 100644 index 0000000..f56fd42 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_16.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_16.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_16.xml new file mode 100644 index 0000000..7b4c7ea --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_16.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml new file mode 100644 index 0000000..ee9b72b --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml new file mode 100644 index 0000000..3ed2ad6 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_4_1_2.xml b/.idea/libraries/Maven__org_apache_poi_poi_4_1_2.xml new file mode 100644 index 0000000..f549c89 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml new file mode 100644 index 0000000..f41bba7 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml new file mode 100644 index 0000000..2ea5daa --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_76.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_76.xml new file mode 100644 index 0000000..f577f0c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_76.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_76.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_76.xml new file mode 100644 index 0000000..5f4aadf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_76.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_76.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_76.xml new file mode 100644 index 0000000..e5cdf0f --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_76.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_engine_core_2_3.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_engine_core_2_3.xml new file mode 100644 index 0000000..e44e420 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_velocity_velocity_engine_core_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml b/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml new file mode 100644 index 0000000..f9957cf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_3_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_7.xml b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_7.xml new file mode 100644 index 0000000..74a4492 --- /dev/null +++ b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml b/.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml new file mode 100644 index 0000000..b38ec48 --- /dev/null +++ b/.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_69.xml b/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_69.xml new file mode 100644 index 0000000..765baf3 --- /dev/null +++ b/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_69.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_69.xml b/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_69.xml new file mode 100644 index 0000000..5ed59c2 --- /dev/null +++ b/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_69.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bouncycastle_bcutil_jdk15on_1_69.xml b/.idea/libraries/Maven__org_bouncycastle_bcutil_jdk15on_1_69.xml new file mode 100644 index 0000000..3140482 --- /dev/null +++ b/.idea/libraries/Maven__org_bouncycastle_bcutil_jdk15on_1_69.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_checkerframework_checker_qual_2_5_2.xml b/.idea/libraries/Maven__org_checkerframework_checker_qual_2_5_2.xml new file mode 100644 index 0000000..a0c1387 --- /dev/null +++ b/.idea/libraries/Maven__org_checkerframework_checker_qual_2_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_checkerframework_checker_qual_3_5_0.xml b/.idea/libraries/Maven__org_checkerframework_checker_qual_3_5_0.xml new file mode 100644 index 0000000..5e34ba5 --- /dev/null +++ b/.idea/libraries/Maven__org_checkerframework_checker_qual_3_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_17.xml b/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_17.xml new file mode 100644 index 0000000..f574fa3 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml b/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml new file mode 100644 index 0000000..fb7c64b --- /dev/null +++ b/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml b/.idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml new file mode 100644 index 0000000..51f5260 --- /dev/null +++ b/.idea/libraries/Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_5_Final.xml b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_5_Final.xml new file mode 100644 index 0000000..5e7653f --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_2_5_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_28_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_28_0_GA.xml new file mode 100644 index 0000000..f3b8f8a --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_28_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_3_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_3_Final.xml new file mode 100644 index 0000000..309b5cc --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_3_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_annotations_13_0.xml b/.idea/libraries/Maven__org_jetbrains_annotations_13_0.xml new file mode 100644 index 0000000..ff1fe3f --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_annotations_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml new file mode 100644 index 0000000..3b696b6 --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml new file mode 100644 index 0000000..5696e15 --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml b/.idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml new file mode 100644 index 0000000..8dfc1bd --- /dev/null +++ b/.idea/libraries/Maven__org_latencyutils_LatencyUtils_2_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mapstruct_mapstruct_1_3_1_Final.xml b/.idea/libraries/Maven__org_mapstruct_mapstruct_1_3_1_Final.xml new file mode 100644 index 0000000..e619c25 --- /dev/null +++ b/.idea/libraries/Maven__org_mapstruct_mapstruct_1_3_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mybatis_mybatis_3_5_13.xml b/.idea/libraries/Maven__org_mybatis_mybatis_3_5_13.xml new file mode 100644 index 0000000..3956bef --- /dev/null +++ b/.idea/libraries/Maven__org_mybatis_mybatis_3_5_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_1_1.xml b/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_1_1.xml new file mode 100644 index 0000000..9c04a06 --- /dev/null +++ b/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_3_1.xml b/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_3_1.xml new file mode 100644 index 0000000..fc2be56 --- /dev/null +++ b/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_3_1.xml b/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_3_1.xml new file mode 100644 index 0000000..4ef3d9f --- /dev/null +++ b/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_4_2.xml b/.idea/libraries/Maven__org_ow2_asm_asm_4_2.xml new file mode 100644 index 0000000..28f2898 --- /dev/null +++ b/.idea/libraries/Maven__org_ow2_asm_asm_4_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_projectlombok_lombok_1_18_28.xml b/.idea/libraries/Maven__org_projectlombok_lombok_1_18_28.xml new file mode 100644 index 0000000..c42be2a --- /dev/null +++ b/.idea/libraries/Maven__org_projectlombok_lombok_1_18_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml b/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml new file mode 100644 index 0000000..9bc1536 --- /dev/null +++ b/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_4.xml b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_4.xml new file mode 100644 index 0000000..751299a --- /dev/null +++ b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_36.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_36.xml new file mode 100644 index 0000000..5034932 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_36.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml new file mode 100644 index 0000000..3bd3906 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml new file mode 100644 index 0000000..20d6633 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_7_13.xml new file mode 100644 index 0000000..94deef9 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_7_13.xml new file mode 100644 index 0000000..abfab23 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_7_13.xml new file mode 100644 index 0000000..36967a9 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_13.xml new file mode 100644 index 0000000..e9b18f7 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_7_13.xml new file mode 100644 index 0000000..1230f0a --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_7_13.xml new file mode 100644 index 0000000..0e68601 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_7_13.xml new file mode 100644 index 0000000..14908fa --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_7_13.xml new file mode 100644 index 0000000..e36bc30 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_cache_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_7_13.xml new file mode 100644 index 0000000..21d139b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_7_13.xml new file mode 100644 index 0000000..0621cba --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_7_13.xml new file mode 100644 index 0000000..ab750ae --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_7_13.xml new file mode 100644 index 0000000..4be818b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_7_13.xml new file mode 100644 index 0000000..0cee4d9 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_reactor_netty_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_7_13.xml new file mode 100644 index 0000000..5c176d0 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_7_13.xml new file mode 100644 index 0000000..92a4683 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_13.xml new file mode 100644 index 0000000..1957e84 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_7_13.xml new file mode 100644 index 0000000..aa2a77e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_7_13.xml new file mode 100644 index 0000000..f1e53e4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_7_13.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_7_13.xml new file mode 100644 index 0000000..b17d663 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_webflux_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_3_1_7.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_3_1_7.xml new file mode 100644 index 0000000..e1fb663 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_commons_3_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_3_1_7.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_3_1_7.xml new file mode 100644 index 0000000..b86ae85 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_context_3_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_3_1_8.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_3_1_8.xml new file mode 100644 index 0000000..e854011 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_gateway_server_3_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_loadbalancer_3_1_7.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_loadbalancer_3_1_7.xml new file mode 100644 index 0000000..f18b5e9 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_loadbalancer_3_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_3_1_8.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_3_1_8.xml new file mode 100644 index 0000000..0f21a7e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_openfeign_core_3_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_3_1_7.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_3_1_7.xml new file mode 100644 index 0000000..3742983 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_3_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_bootstrap_3_1_7.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_bootstrap_3_1_7.xml new file mode 100644 index 0000000..b7c873d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_bootstrap_3_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_3_1_8.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_3_1_8.xml new file mode 100644 index 0000000..bb67d48 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_gateway_3_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_loadbalancer_3_1_7.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_loadbalancer_3_1_7.xml new file mode 100644 index 0000000..8f052ce --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_loadbalancer_3_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_3_1_8.xml b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_3_1_8.xml new file mode 100644 index 0000000..e746ac5 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_cloud_spring_cloud_starter_openfeign_3_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_7_13.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_7_13.xml new file mode 100644 index 0000000..6e52a0b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_7_13.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_7_13.xml new file mode 100644 index 0000000..784cefd --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_7_13.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_7_13.xml new file mode 100644 index 0000000..a290b76 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_7_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml new file mode 100644 index 0000000..de412ab --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml new file mode 100644 index 0000000..2d4f2b1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_7_9.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_7_9.xml new file mode 100644 index 0000000..406c6b4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_7_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_7_9.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_7_9.xml new file mode 100644 index 0000000..2da1138 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_7_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_7_9.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_7_9.xml new file mode 100644 index 0000000..6531658 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_7_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_11_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_11_RELEASE.xml new file mode 100644 index 0000000..5c93c4f --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_rsa_1_0_11_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_7_9.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_7_9.xml new file mode 100644 index 0000000..7312c75 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_7_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_aop_5_3_28.xml new file mode 100644 index 0000000..0fd96b3 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_beans_5_3_28.xml new file mode 100644 index 0000000..ad70dd4 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_context_5_3_28.xml new file mode 100644 index 0000000..cfb34f1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_support_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_context_support_5_3_28.xml new file mode 100644 index 0000000..0d4d864 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_support_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_core_5_3_28.xml new file mode 100644 index 0000000..af6e69b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_expression_5_3_28.xml new file mode 100644 index 0000000..ecafbf2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_28.xml new file mode 100644 index 0000000..789fb15 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_28.xml new file mode 100644 index 0000000..6df256c --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_oxm_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_oxm_5_3_28.xml new file mode 100644 index 0000000..3a73685 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_oxm_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_tx_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_tx_5_3_28.xml new file mode 100644 index 0000000..28ac772 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_tx_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_web_5_3_28.xml new file mode 100644 index 0000000..ce0c765 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webflux_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_webflux_5_3_28.xml new file mode 100644 index 0000000..2e0078d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webflux_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_28.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_28.xml new file mode 100644 index 0000000..3e9a839 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml b/.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml new file mode 100644 index 0000000..1ff59c6 --- /dev/null +++ b/.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_15_RELEASE.xml b/.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_15_RELEASE.xml new file mode 100644 index 0000000..79c1825 --- /dev/null +++ b/.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_15_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_15_RELEASE.xml b/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_15_RELEASE.xml new file mode 100644 index 0000000..5142556 --- /dev/null +++ b/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_15_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml b/.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml new file mode 100644 index 0000000..affb7a1 --- /dev/null +++ b/.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml new file mode 100644 index 0000000..f01db85 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__pro_fessional_kaptcha_2_3_3.xml b/.idea/libraries/Maven__pro_fessional_kaptcha_2_3_3.xml new file mode 100644 index 0000000..36b2400 --- /dev/null +++ b/.idea/libraries/Maven__pro_fessional_kaptcha_2_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..bfbd4aa --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1252150 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/muyu-ruoyi-server-product-dev.iml b/.idea/muyu-ruoyi-server-product-dev.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/muyu-ruoyi-server-product-dev.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/logs/muyu-auth/error.2024-03-21.log b/logs/muyu-auth/error.2024-03-21.log new file mode 100644 index 0000000..3270095 --- /dev/null +++ b/logs/muyu-auth/error.2024-03-21.log @@ -0,0 +1,37 @@ +20:36:44.151 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tokenController': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.ruoyi.auth.controller.TokenController] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.auth.MuYuAuthApplication.main(MuYuAuthApplication.java:17) +Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.ruoyi.auth.controller.TokenController] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:485) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267) + ... 18 common frames omitted +Caused by: java.lang.NoClassDefFoundError: com/ruoyi/common/core/domain/Result + at java.base/java.lang.Class.getDeclaredMethods0(Native Method) + at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402) + at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467) + ... 20 common frames omitted +Caused by: java.lang.ClassNotFoundException: com.ruoyi.common.core.domain.Result + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 24 common frames omitted diff --git a/logs/muyu-auth/error.log b/logs/muyu-auth/error.log new file mode 100644 index 0000000..61dc9aa --- /dev/null +++ b/logs/muyu-auth/error.log @@ -0,0 +1,81 @@ +18:22:16.067 [main] ERROR c.a.c.n.r.NacosServiceRegistry - [register,81] - nacos registry, ruoyi-auth register failed...NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr='43.142.44.217:8848', username='', password='', endpoint='', namespace='', watchDelay=30000, logName='', service='ruoyi-auth', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={IPv6=null, preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.159.1', networkInterface='', port=9200, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null, instanceEnabled=true, ephemeral=true, failureToleranceEnabled=false}, ipDeleteTimeout=null, failFast=true}}, +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) + at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) + at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) + at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) + at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.auth.MuYuAuthApplication.main(MuYuAuthApplication.java:17) +18:22:16.589 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is java.lang.reflect.UndeclaredThrowableException + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) + at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.auth.MuYuAuthApplication.main(MuYuAuthApplication.java:17) +Caused by: java.lang.reflect.UndeclaredThrowableException: null + at org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:83) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) + at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) + at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) + ... 14 common frames omitted +Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) + at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) + ... 27 common frames omitted diff --git a/logs/muyu-auth/info.2024-03-21.log b/logs/muyu-auth/info.2024-03-21.log new file mode 100644 index 0000000..de58604 --- /dev/null +++ b/logs/muyu-auth/info.2024-03-21.log @@ -0,0 +1,52 @@ +20:36:40.485 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:36:40.550 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:36:40.870 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:36:40.871 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:36:42.468 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:36:43.835 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +20:36:43.836 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:36:43.836 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:36:43.942 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:36:44.112 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +20:41:25.833 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:41:25.899 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:41:26.255 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:26.256 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:27.880 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:41:29.551 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +20:41:29.552 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:41:29.552 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:41:29.643 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:41:30.425 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +20:41:31.566 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +20:41:31.613 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:31.613 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:31.812 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +20:41:32.152 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 6.91 seconds (JVM running for 7.78) +20:41:32.167 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +20:41:32.168 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +20:41:32.169 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +20:41:32.672 [RMI TCP Connection(4)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:03:58.808 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:03:58.822 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:10:27.179 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +21:10:27.250 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +21:10:27.578 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:10:27.579 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:10:29.480 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +21:10:31.113 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +21:10:31.115 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +21:10:31.115 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +21:10:37.094 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +21:10:37.985 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +21:10:39.073 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +21:10:39.101 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:10:39.101 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:10:39.349 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +21:10:39.570 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 13.037 seconds (JVM running for 14.592) +21:10:39.586 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +21:10:39.588 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +21:10:39.593 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +21:10:39.935 [RMI TCP Connection(7)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:23:37.092 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:23:37.107 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-auth/info.2024-03-22.log b/logs/muyu-auth/info.2024-03-22.log new file mode 100644 index 0000000..0eb1284 --- /dev/null +++ b/logs/muyu-auth/info.2024-03-22.log @@ -0,0 +1,21 @@ +08:53:29.696 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:53:29.755 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:53:30.089 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:30.089 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:31.989 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:53:35.168 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +08:53:35.170 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:53:35.171 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:53:35.288 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:53:36.565 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:53:38.946 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +08:53:38.989 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:38.989 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:39.197 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +08:53:39.577 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 10.518 seconds (JVM running for 11.679) +08:53:39.605 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +08:53:39.616 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +08:53:39.617 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +08:53:39.889 [RMI TCP Connection(18)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:30:53.481 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:30:53.548 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-auth/info.2024-03-23.log b/logs/muyu-auth/info.2024-03-23.log new file mode 100644 index 0000000..f600a26 --- /dev/null +++ b/logs/muyu-auth/info.2024-03-23.log @@ -0,0 +1,21 @@ +08:25:08.903 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:25:08.974 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:25:09.304 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:09.304 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:10.800 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:25:13.603 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +08:25:13.605 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:25:13.605 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:25:13.727 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:25:14.869 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:25:16.658 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +08:25:16.695 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:16.695 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:16.910 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +08:25:17.199 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 8.849 seconds (JVM running for 9.974) +08:25:17.228 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +08:25:17.237 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +08:25:17.238 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +08:25:17.608 [RMI TCP Connection(13)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +13:58:55.182 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +13:58:55.199 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-auth/info.2024-03-24.log b/logs/muyu-auth/info.2024-03-24.log new file mode 100644 index 0000000..0960b74 --- /dev/null +++ b/logs/muyu-auth/info.2024-03-24.log @@ -0,0 +1,86 @@ +09:06:01.528 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:06:01.608 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:06:02.004 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:02.005 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:03.867 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:06:06.806 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +09:06:06.809 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:06:06.809 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:06:06.928 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:06:08.639 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:06:10.879 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +09:06:10.915 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:10.915 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:11.738 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +09:06:12.092 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 11.396 seconds (JVM running for 13.112) +09:06:12.118 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +09:06:12.127 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +09:06:12.127 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +09:06:12.574 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:33:13.350 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:33:13.367 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:04:32.160 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:04:32.222 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:04:32.601 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:32.602 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:34.152 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:04:35.949 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +14:04:35.951 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:04:35.952 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:04:36.067 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:04:37.083 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:04:38.332 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +14:04:38.361 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:38.361 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:38.582 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +14:04:38.828 [http-nio-9200-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:04:38.894 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 7.291 seconds (JVM running for 8.319) +14:04:38.919 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +14:04:38.921 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +14:04:38.922 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +14:58:13.541 [lettuce-eventExecutorLoop-1-2] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:58:15.995 [lettuce-nioEventLoop-4-2] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +16:47:16.500 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.516 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +18:22:04.191 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:22:04.268 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:22:04.678 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:04.679 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:07.674 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:22:10.166 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +18:22:10.168 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:22:10.169 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:22:10.343 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:22:12.419 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:22:15.585 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +18:22:15.646 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:15.647 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:16.496 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Pausing ProtocolHandler ["http-nio-9200"] +18:22:16.496 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +18:22:16.506 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Stopping ProtocolHandler ["http-nio-9200"] +18:22:16.510 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Destroying ProtocolHandler ["http-nio-9200"] +18:27:43.868 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:27:43.944 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:27:44.340 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:27:44.341 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:27:46.511 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:27:48.211 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +18:27:48.212 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:27:48.212 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:27:48.330 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:27:49.370 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:27:51.065 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +18:27:51.132 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:27:51.132 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:27:51.601 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 192.168.43.159:9200 register finished +18:27:51.936 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 8.725 seconds (JVM running for 9.685) +18:27:51.960 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +18:27:51.964 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +18:27:51.965 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +18:27:52.450 [RMI TCP Connection(9)-192.168.43.159] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +19:08:04.432 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +19:08:04.514 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +19:08:35.670 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +19:08:35.750 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +19:08:36.173 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +19:08:36.174 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. diff --git a/logs/muyu-auth/info.2024-03-25.log b/logs/muyu-auth/info.2024-03-25.log new file mode 100644 index 0000000..c10c256 --- /dev/null +++ b/logs/muyu-auth/info.2024-03-25.log @@ -0,0 +1,42 @@ +09:41:22.877 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:41:22.941 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:41:23.330 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:23.330 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:24.896 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:41:26.593 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +09:41:26.595 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:41:26.595 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:41:26.687 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:41:27.520 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:41:28.534 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +09:41:28.562 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:28.563 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:28.753 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +09:41:28.961 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 6.667 seconds (JVM running for 8.394) +09:41:28.978 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +09:41:28.980 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +09:41:28.981 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +09:41:29.538 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:48:40.348 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:48:40.370 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:07:09.914 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:07:09.976 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:07:10.338 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:10.339 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:12.236 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:07:13.976 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +14:07:13.977 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:07:13.977 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:07:14.084 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:07:14.991 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:07:16.174 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +14:07:16.216 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:16.216 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:16.518 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +14:07:16.891 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 7.644 seconds (JVM running for 8.748) +14:07:16.915 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +14:07:16.917 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +14:07:16.918 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +14:07:17.276 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:24:39.294 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:24:39.314 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-auth/info.2024-03-26.log b/logs/muyu-auth/info.2024-03-26.log new file mode 100644 index 0000000..c3ac169 --- /dev/null +++ b/logs/muyu-auth/info.2024-03-26.log @@ -0,0 +1,126 @@ +08:42:47.253 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:42:47.340 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:42:47.733 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:42:47.733 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:42:49.447 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:42:52.387 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +08:42:52.388 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:42:52.389 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:42:52.500 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:42:53.690 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:42:55.570 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +08:42:55.651 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:42:55.651 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:42:55.930 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +08:42:56.650 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 10.204 seconds (JVM running for 11.453) +08:42:56.681 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +08:42:56.690 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +08:42:56.691 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +08:42:56.794 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:59:28.248 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:59:28.324 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:16:54.025 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:16:54.093 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:16:54.456 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:16:54.457 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:16:56.612 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:16:58.380 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +14:16:58.382 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:16:58.382 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:16:58.510 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:16:59.890 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:17:01.578 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +14:17:01.621 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:01.621 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:01.841 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +14:17:02.085 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 8.672 seconds (JVM running for 9.984) +14:17:02.103 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +14:17:02.107 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +14:17:02.108 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +14:17:02.533 [RMI TCP Connection(6)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:21:04.226 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:21:04.254 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:21:25.040 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:21:25.105 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:21:25.495 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:25.495 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:27.256 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:21:28.842 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +14:21:28.843 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:21:28.844 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:21:28.982 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:21:29.934 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:21:31.346 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +14:21:31.371 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:31.371 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:31.568 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +14:21:31.835 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 7.425 seconds (JVM running for 8.462) +14:21:31.852 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +14:21:31.853 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +14:21:31.854 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +14:21:32.016 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:29:50.869 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:29:50.897 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:31:37.685 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:31:37.762 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:31:38.141 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:38.142 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:40.116 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:31:41.825 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +14:31:41.826 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:31:41.827 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:31:41.941 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:31:42.997 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:31:44.887 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +14:31:44.918 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:44.918 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:45.248 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +14:31:45.601 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 8.52 seconds (JVM running for 9.575) +14:31:45.620 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +14:31:45.621 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +14:31:45.622 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +14:31:46.157 [RMI TCP Connection(13)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:36:29.911 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:36:29.988 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:36:41.365 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:36:41.426 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:36:41.755 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:41.756 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:43.637 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:36:45.109 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +14:36:45.110 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:36:45.110 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:36:45.218 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:36:46.038 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:36:47.365 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +14:36:47.395 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:47.395 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:47.764 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +14:36:48.159 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 7.424 seconds (JVM running for 8.344) +14:36:48.182 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +14:36:48.184 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +14:36:48.185 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +14:36:48.573 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:00:36.906 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:00:36.923 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:05:11.417 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +16:05:11.472 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +16:05:11.786 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:11.786 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:13.425 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +16:05:15.053 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +16:05:15.055 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +16:05:15.055 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +16:05:15.187 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +16:05:16.552 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +16:05:18.185 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +16:05:18.222 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:18.222 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:18.420 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +16:05:18.671 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 7.859 seconds (JVM running for 9.035) +16:05:18.691 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +16:05:18.692 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +16:05:18.693 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +16:05:19.068 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +20:27:46.196 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +20:27:46.217 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-auth/info.log b/logs/muyu-auth/info.log new file mode 100644 index 0000000..4785b70 --- /dev/null +++ b/logs/muyu-auth/info.log @@ -0,0 +1,21 @@ +10:04:56.327 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:04:56.383 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:04:56.708 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:04:56.708 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:04:59.291 [main] INFO c.r.a.MuYuAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:05:00.785 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"] +10:05:00.788 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:05:00.789 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:05:00.925 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:05:02.280 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:05:04.543 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9200"] +10:05:04.581 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:04.581 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:04.805 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-auth 10.1.123.83:9200 register finished +10:05:05.152 [main] INFO c.r.a.MuYuAuthApplication - [logStarted,61] - Started MuYuAuthApplication in 9.351 seconds (JVM running for 10.952) +10:05:05.171 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth.yml, group=DEFAULT_GROUP +10:05:05.173 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth-dev.yml, group=DEFAULT_GROUP +10:05:05.174 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-auth, group=DEFAULT_GROUP +10:05:05.731 [RMI TCP Connection(12)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +17:29:55.395 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +17:29:55.415 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/error.2024-03-21.log b/logs/muyu-file/error.2024-03-21.log new file mode 100644 index 0000000..9f522fa --- /dev/null +++ b/logs/muyu-file/error.2024-03-21.log @@ -0,0 +1,102 @@ +20:36:54.502 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourcesConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'file.prefix' in value "${file.prefix}" + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.file.MuYuFileApplication.main(MuYuFileApplication.java:17) +Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'file.prefix' in value "${file.prefix}" + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) + at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191) + at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1332) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) + ... 17 common frames omitted +20:41:39.131 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourcesConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'file.prefix' in value "${file.prefix}" + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.file.MuYuFileApplication.main(MuYuFileApplication.java:17) +Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'file.prefix' in value "${file.prefix}" + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) + at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191) + at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1332) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) + ... 17 common frames omitted +20:53:08.713 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fastDfsSysFileServiceImpl': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'fdfs.domain' in value "${fdfs.domain}" + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.file.MuYuFileApplication.main(MuYuFileApplication.java:17) +Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'fdfs.domain' in value "${fdfs.domain}" + at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) + at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191) + at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1332) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) + ... 17 common frames omitted diff --git a/logs/muyu-file/error.2024-03-24.log b/logs/muyu-file/error.2024-03-24.log new file mode 100644 index 0000000..6260ae5 --- /dev/null +++ b/logs/muyu-file/error.2024-03-24.log @@ -0,0 +1,232 @@ +12:16:41.188 [http-nio-9300-exec-4] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.] with root cause +org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes. + at org.apache.tomcat.util.http.fileupload.impl.FileItemStreamImpl$1.raiseError(FileItemStreamImpl.java:117) + at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76) + at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:106) + at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:97) + at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:317) + at org.apache.catalina.connector.Request.parseParts(Request.java:2849) + at org.apache.catalina.connector.Request.getParts(Request.java:2750) + at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:796) + at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:95) + at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:88) + at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:122) + at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1210) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1044) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +14:58:46.145 [http-nio-9300-exec-7] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 7 milliseconds, 2500 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@7e25a1c3[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@44125a0, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2a65ef39, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@61df03b9}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor75.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor61.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 7 milliseconds, 2500 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@7e25a1c3[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@44125a0, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2a65ef39, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@61df03b9}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 85 common frames omitted +18:22:19.780 [main] ERROR c.a.c.n.r.NacosServiceRegistry - [register,81] - nacos registry, ruoyi-file register failed...NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr='43.142.44.217:8848', username='', password='', endpoint='', namespace='', watchDelay=30000, logName='', service='ruoyi-file', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={IPv6=null, preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.159.1', networkInterface='', port=9300, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null, instanceEnabled=true, ephemeral=true, failureToleranceEnabled=false}, ipDeleteTimeout=null, failFast=true}}, +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) + at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) + at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) + at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) + at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.file.MuYuFileApplication.main(MuYuFileApplication.java:17) +18:22:20.188 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is java.lang.reflect.UndeclaredThrowableException + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) + at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.file.MuYuFileApplication.main(MuYuFileApplication.java:17) +Caused by: java.lang.reflect.UndeclaredThrowableException: null + at org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:83) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) + at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) + at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) + ... 14 common frames omitted +Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) + at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) + ... 27 common frames omitted diff --git a/logs/muyu-file/error.log b/logs/muyu-file/error.log new file mode 100644 index 0000000..d412453 --- /dev/null +++ b/logs/muyu-file/error.log @@ -0,0 +1,92 @@ +10:54:48.154 [http-nio-9300-exec-7] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 878900 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@79253cb0[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@153ff875, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@319bbc23, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@73d68527}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor81.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor67.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 878900 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@79253cb0[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@153ff875, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@319bbc23, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@73d68527}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 85 common frames omitted diff --git a/logs/muyu-file/info.2024-03-21.log b/logs/muyu-file/info.2024-03-21.log new file mode 100644 index 0000000..6d0cbef --- /dev/null +++ b/logs/muyu-file/info.2024-03-21.log @@ -0,0 +1,72 @@ +20:36:50.682 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:36:50.745 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:36:51.068 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:36:51.069 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:36:52.602 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:36:54.121 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +20:36:54.123 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:36:54.123 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:36:54.262 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:36:54.463 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +20:41:34.704 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:41:34.767 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:41:35.198 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:35.199 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:36.802 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:41:38.787 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +20:41:38.788 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:41:38.788 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:41:38.919 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:41:39.093 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +20:53:05.707 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:53:05.755 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:53:06.014 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:53:06.014 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:53:07.330 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:53:08.433 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +20:53:08.434 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:53:08.434 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:53:08.539 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:53:08.684 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +20:56:11.593 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:56:11.640 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:56:11.929 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:56:11.929 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:56:13.184 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:56:14.364 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +20:56:14.366 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:56:14.366 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:56:14.466 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:56:15.040 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +20:56:16.051 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +20:56:16.072 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:56:16.072 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:56:16.259 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +20:56:16.517 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 5.429 seconds (JVM running for 6.365) +20:56:16.530 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +20:56:16.530 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +20:56:16.531 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +20:56:16.991 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:03:58.812 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:03:58.832 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:10:40.306 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +21:10:40.369 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +21:10:40.715 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:10:40.716 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:10:42.305 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +21:10:43.598 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +21:10:43.599 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +21:10:43.600 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +21:10:43.719 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +21:10:44.348 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +21:10:45.631 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +21:10:45.651 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:10:45.652 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:10:45.900 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +21:10:46.261 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 6.53 seconds (JVM running for 7.467) +21:10:46.277 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +21:10:46.277 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +21:10:46.278 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +21:10:46.767 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:23:37.125 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:23:37.146 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/info.2024-03-22.log b/logs/muyu-file/info.2024-03-22.log new file mode 100644 index 0000000..df707f6 --- /dev/null +++ b/logs/muyu-file/info.2024-03-22.log @@ -0,0 +1,21 @@ +08:53:36.100 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:53:36.169 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:53:36.468 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:36.469 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:38.928 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:53:41.060 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +08:53:41.062 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:53:41.062 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:53:41.225 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:53:42.288 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:53:44.398 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +08:53:44.424 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:44.424 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:44.611 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +08:53:44.942 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 9.406 seconds (JVM running for 10.325) +08:53:44.958 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +08:53:44.959 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +08:53:44.960 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +08:53:45.461 [RMI TCP Connection(30)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:30:53.589 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:30:53.618 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/info.2024-03-23.log b/logs/muyu-file/info.2024-03-23.log new file mode 100644 index 0000000..b0af952 --- /dev/null +++ b/logs/muyu-file/info.2024-03-23.log @@ -0,0 +1,21 @@ +08:25:14.998 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:25:15.052 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:25:15.392 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:15.393 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:17.692 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:25:19.233 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +08:25:19.234 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:25:19.234 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:25:19.358 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:25:20.091 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:25:21.147 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +08:25:21.166 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:21.167 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:21.349 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +08:25:21.588 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 7.094 seconds (JVM running for 7.935) +08:25:21.601 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +08:25:21.602 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +08:25:21.602 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +08:25:21.685 [RMI TCP Connection(13)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +13:58:55.272 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +13:58:55.290 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/info.2024-03-24.log b/logs/muyu-file/info.2024-03-24.log new file mode 100644 index 0000000..fcc15f8 --- /dev/null +++ b/logs/muyu-file/info.2024-03-24.log @@ -0,0 +1,95 @@ +09:06:08.159 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:06:08.213 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:06:08.605 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:08.605 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:11.635 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:06:13.035 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +09:06:13.036 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:06:13.037 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:06:13.166 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:06:13.836 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:06:15.234 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +09:06:15.272 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:15.272 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:15.468 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +09:06:16.190 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 8.545 seconds (JVM running for 9.558) +09:06:16.229 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +09:06:16.231 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +09:06:16.231 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +09:06:16.787 [RMI TCP Connection(8)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:33:13.360 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:33:13.376 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:04:39.074 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:04:39.123 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:04:39.418 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:39.418 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:40.794 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:04:42.374 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +14:04:42.375 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:04:42.375 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:04:42.487 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:04:43.271 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:04:44.506 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +14:04:44.534 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:44.535 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:44.723 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +14:04:44.990 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 6.456 seconds (JVM running for 7.368) +14:04:45.006 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +14:04:45.006 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +14:04:45.007 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +14:04:45.326 [RMI TCP Connection(4)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:47:16.540 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.559 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +18:22:10.634 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:22:10.711 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:22:11.218 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:11.219 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:14.634 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:22:16.562 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +18:22:16.563 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:22:16.564 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:22:16.754 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:22:17.647 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:22:19.413 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +18:22:19.443 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:19.443 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:20.148 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Pausing ProtocolHandler ["http-nio-9300"] +18:22:20.148 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +18:22:20.153 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Stopping ProtocolHandler ["http-nio-9300"] +18:22:20.157 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Destroying ProtocolHandler ["http-nio-9300"] +18:27:50.269 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:27:50.371 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:27:50.843 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:27:50.843 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:27:53.539 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:27:55.022 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +18:27:55.024 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:27:55.024 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:27:55.151 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:27:55.861 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:27:57.569 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +18:27:57.595 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:27:57.595 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:27:58.163 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 192.168.43.159:9300 register finished +18:27:58.883 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 9.302 seconds (JVM running for 10.179) +18:27:58.906 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +18:27:58.907 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +18:27:58.913 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +18:27:59.509 [RMI TCP Connection(13)-192.168.43.159] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +19:08:04.439 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +19:08:04.511 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +19:08:12.510 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +19:08:12.565 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +19:08:12.867 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +19:08:12.868 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +19:08:14.790 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +19:08:17.762 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +19:08:19.385 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +19:08:19.385 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +19:08:19.918 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 192.168.43.159:9300 register finished +19:08:20.506 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 8.687 seconds (JVM running for 9.741) +19:08:20.526 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +19:08:20.527 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +19:08:20.529 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +19:08:20.547 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +19:08:20.701 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/info.2024-03-25.log b/logs/muyu-file/info.2024-03-25.log new file mode 100644 index 0000000..495e265 --- /dev/null +++ b/logs/muyu-file/info.2024-03-25.log @@ -0,0 +1,42 @@ +09:41:29.463 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:41:29.537 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:41:29.927 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:29.928 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:32.466 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:41:34.255 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +09:41:34.256 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:41:34.257 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:41:34.380 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:41:35.095 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:41:36.352 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +09:41:36.376 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:36.376 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:36.582 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +09:41:36.845 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 7.873 seconds (JVM running for 8.719) +09:41:36.860 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +09:41:36.861 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +09:41:36.862 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +09:41:37.340 [RMI TCP Connection(8)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:48:40.379 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:48:40.419 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:07:17.157 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:07:17.211 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:07:17.496 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:17.497 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:19.502 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:07:21.310 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +14:07:21.311 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:07:21.312 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:07:21.434 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:07:22.191 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:07:23.479 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +14:07:23.498 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:23.498 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:23.793 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +14:07:24.102 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 7.448 seconds (JVM running for 8.239) +14:07:24.120 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +14:07:24.121 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +14:07:24.121 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +14:07:24.313 [RMI TCP Connection(9)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:24:39.329 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:24:39.369 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/info.2024-03-26.log b/logs/muyu-file/info.2024-03-26.log new file mode 100644 index 0000000..e3a8ed3 --- /dev/null +++ b/logs/muyu-file/info.2024-03-26.log @@ -0,0 +1,126 @@ +08:42:54.220 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:42:54.278 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:42:54.742 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:42:54.747 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:42:57.600 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:42:59.841 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +08:42:59.843 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:42:59.843 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:42:59.975 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:43:00.793 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:43:02.165 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +08:43:02.190 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:02.190 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:02.368 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +08:43:02.657 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 9.025 seconds (JVM running for 9.994) +08:43:02.674 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +08:43:02.675 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +08:43:02.675 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +08:43:02.944 [RMI TCP Connection(9)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:59:28.215 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:59:28.228 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:16:59.216 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:16:59.286 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:16:59.646 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:16:59.646 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:01.491 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:17:03.079 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +14:17:03.081 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:17:03.081 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:17:03.218 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:17:03.965 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:17:05.341 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +14:17:05.364 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:05.364 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:05.559 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +14:17:05.953 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 7.351 seconds (JVM running for 8.266) +14:17:05.968 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +14:17:05.968 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +14:17:05.969 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +14:17:06.202 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:21:04.261 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:21:04.278 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:21:12.870 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:21:12.930 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:21:13.313 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:13.313 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:14.994 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:21:16.329 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +14:21:16.331 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:21:16.331 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:21:16.455 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:21:17.153 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:21:18.719 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +14:21:18.745 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:18.745 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:19.934 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +14:21:20.376 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 8.118 seconds (JVM running for 9.498) +14:21:20.399 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +14:21:20.400 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +14:21:20.401 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +14:21:20.946 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:29:50.903 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:29:50.980 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:31:44.358 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:31:44.443 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:31:44.862 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:44.862 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:46.732 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:31:48.418 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +14:31:48.419 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:31:48.419 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:31:48.558 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:31:49.431 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:31:51.105 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +14:31:51.141 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:51.141 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:51.395 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +14:31:51.965 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 8.334 seconds (JVM running for 9.91) +14:31:51.989 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +14:31:51.990 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +14:31:51.991 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +14:31:52.320 [RMI TCP Connection(10)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:36:29.936 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:36:29.988 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:36:36.538 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:36:36.589 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:36:36.926 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:36.926 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:38.960 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:36:40.146 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +14:36:40.148 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:36:40.148 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:36:40.277 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:36:40.966 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:36:42.676 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +14:36:42.701 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:42.702 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:43.014 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +14:36:43.619 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 7.683 seconds (JVM running for 8.654) +14:36:43.641 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +14:36:43.642 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +14:36:43.643 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +14:36:43.708 [RMI TCP Connection(4)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:00:36.875 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:00:36.886 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:05:16.567 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +16:05:16.624 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +16:05:16.986 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:16.987 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:18.797 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +16:05:20.577 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +16:05:20.579 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +16:05:20.580 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +16:05:20.693 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +16:05:21.425 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +16:05:22.634 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +16:05:22.653 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:22.653 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:22.829 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +16:05:23.159 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 7.237 seconds (JVM running for 8.203) +16:05:23.183 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +16:05:23.183 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +16:05:23.184 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +16:05:23.599 [RMI TCP Connection(13)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +20:27:46.225 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +20:27:46.279 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-file/info.log b/logs/muyu-file/info.log new file mode 100644 index 0000000..8935f31 --- /dev/null +++ b/logs/muyu-file/info.log @@ -0,0 +1,21 @@ +10:05:01.838 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:05:01.907 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:05:02.341 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:02.343 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:04.787 [main] INFO c.r.f.MuYuFileApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:05:06.650 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9300"] +10:05:06.652 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:05:06.652 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:05:06.807 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:05:07.606 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:05:09.034 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9300"] +10:05:09.073 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:09.073 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:09.268 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-file 10.1.123.83:9300 register finished +10:05:09.610 [main] INFO c.r.f.MuYuFileApplication - [logStarted,61] - Started MuYuFileApplication in 8.581 seconds (JVM running for 9.513) +10:05:09.625 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file-dev.yml, group=DEFAULT_GROUP +10:05:09.626 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file, group=DEFAULT_GROUP +10:05:09.627 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-file.yml, group=DEFAULT_GROUP +10:05:09.707 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +17:29:55.449 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +17:29:55.470 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gateway/error.2024-03-21.log b/logs/muyu-gateway/error.2024-03-21.log new file mode 100644 index 0000000..5f489d5 --- /dev/null +++ b/logs/muyu-gateway/error.2024-03-21.log @@ -0,0 +1,54 @@ +20:37:06.568 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'routerFunctionConfiguration': Unsatisfied dependency expressed through field 'validateCodeHandler'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'validateCodeHandler': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.ruoyi.gateway.handler.ValidateCodeHandler] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.gateway.MuYuGatewayApplication.main(MuYuGatewayApplication.java:15) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'validateCodeHandler': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.ruoyi.gateway.handler.ValidateCodeHandler] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1302) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) + ... 20 common frames omitted +Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.ruoyi.gateway.handler.ValidateCodeHandler] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b] + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:485) + at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267) + ... 32 common frames omitted +Caused by: java.lang.NoClassDefFoundError: com/ruoyi/common/core/exception/CaptchaException + at java.base/java.lang.Class.getDeclaredMethods0(Native Method) + at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402) + at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504) + at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:467) + ... 34 common frames omitted +Caused by: java.lang.ClassNotFoundException: com.ruoyi.common.core.exception.CaptchaException + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 38 common frames omitted diff --git a/logs/muyu-gateway/error.2024-03-23.log b/logs/muyu-gateway/error.2024-03-23.log new file mode 100644 index 0000000..70f56b6 --- /dev/null +++ b/logs/muyu-gateway/error.2024-03-23.log @@ -0,0 +1,4 @@ +13:21:27.794 [reactor-http-nio-17] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/,异常信息:404 NOT_FOUND +13:21:28.469 [reactor-http-nio-17] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/favicon.ico,异常信息:404 NOT_FOUND +13:21:35.824 [reactor-http-nio-19] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/,异常信息:404 NOT_FOUND +13:21:36.057 [reactor-http-nio-19] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/favicon.ico,异常信息:404 NOT_FOUND diff --git a/logs/muyu-gateway/error.2024-03-24.log b/logs/muyu-gateway/error.2024-03-24.log new file mode 100644 index 0000000..87cd6f3 --- /dev/null +++ b/logs/muyu-gateway/error.2024-03-24.log @@ -0,0 +1,164 @@ +09:07:09.694 [reactor-http-nio-2] ERROR c.r.g.f.AuthFilter - [unauthorizedResponse,93] - [鉴权异常处理]请求路径:/system/user/getInfo +15:19:56.131 [boundedElastic-81] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 32200 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@47b88906[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6114f55a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2db08aad, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@456a24ef}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at reactor.core.publisher.MonoCallable.call(MonoCallable.java:92) + at reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:227) + at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) + at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 32200 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@47b88906[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6114f55a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2db08aad, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@456a24ef}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 21 common frames omitted +15:22:59.151 [boundedElastic-92] ERROR c.a.c.n.d.r.NacosReactiveDiscoveryClient - [lambda$getServices$3,94] - get services from nacos server fail, +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 329400 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@4d0413a3[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6114f55a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2db08aad, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@456a24ef}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient.lambda$getServices$3(NacosReactiveDiscoveryClient.java:87) + at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) + at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 329400 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@4d0413a3[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6114f55a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2db08aad, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@456a24ef}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 19 common frames omitted +15:22:59.151 [boundedElastic-91] ERROR c.a.c.n.d.r.NacosReactiveDiscoveryClient - [lambda$getServices$3,94] - get services from nacos server fail, +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 429600 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@7ee0d892[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6114f55a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2db08aad, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@456a24ef}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient.lambda$getServices$3(NacosReactiveDiscoveryClient.java:87) + at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) + at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 429600 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@7ee0d892[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@6114f55a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2db08aad, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@456a24ef}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 19 common frames omitted +18:22:30.722 [main] ERROR c.a.c.n.r.NacosServiceRegistry - [register,81] - nacos registry, ruoyi-gateway register failed...NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr='43.142.44.217:8848', username='', password='', endpoint='', namespace='', watchDelay=30000, logName='', service='ruoyi-gateway', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={IPv6=null, preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.159.1', networkInterface='', port=8080, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null, instanceEnabled=true, ephemeral=true, failureToleranceEnabled=false}, ipDeleteTimeout=null, failFast=true}}, +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) + at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) + at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) + at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57) + at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:40) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) + at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) + at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.gateway.MuYuGatewayApplication.main(MuYuGatewayApplication.java:15) +18:22:33.278 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is java.lang.reflect.UndeclaredThrowableException + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) + at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) + at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) + at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) + at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) + at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.gateway.MuYuGatewayApplication.main(MuYuGatewayApplication.java:15) +Caused by: java.lang.reflect.UndeclaredThrowableException: null + at org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:83) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:232) + at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:133) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:98) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:86) + at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) + at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57) + at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:40) + at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) + ... 14 common frames omitted +Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:209) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) + at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) + at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) + ... 28 common frames omitted diff --git a/logs/muyu-gateway/error.2024-03-25.log b/logs/muyu-gateway/error.2024-03-25.log new file mode 100644 index 0000000..50820f8 --- /dev/null +++ b/logs/muyu-gateway/error.2024-03-25.log @@ -0,0 +1,15 @@ +09:44:13.489 [boundedElastic-4] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/productInfo/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:44:13.489 [boundedElastic-9] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/category/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:44:13.489 [boundedElastic-5] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/brand/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:16.937 [boundedElastic-13] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/brand/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:16.937 [boundedElastic-9] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/category/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:16.938 [boundedElastic-13] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/productInfo/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:18.288 [boundedElastic-4] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/brand/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:18.288 [boundedElastic-14] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/productInfo/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:18.289 [boundedElastic-4] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/category/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:22.402 [boundedElastic-4] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/brand/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:22.572 [boundedElastic-14] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/category/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:22.572 [boundedElastic-4] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/productInfo/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:29.982 [boundedElastic-14] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/category/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:29.982 [boundedElastic-4] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/brand/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" +09:46:30.281 [boundedElastic-14] ERROR c.r.g.h.GatewayExceptionHandler - [handle,44] - [网关异常处理]请求路径:/product/productInfo/list,异常信息:503 SERVICE_UNAVAILABLE "Unable to find instance for ruoyi-product" diff --git a/logs/muyu-gateway/error.log b/logs/muyu-gateway/error.log new file mode 100644 index 0000000..7cfb507 --- /dev/null +++ b/logs/muyu-gateway/error.log @@ -0,0 +1,52 @@ +10:54:50.517 [boundedElastic-147] ERROR c.a.c.n.d.r.NacosReactiveDiscoveryClient - [lambda$getServices$3,94] - get services from nacos server fail, +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 milliseconds, 585100 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@2ef21732[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@3d27096f, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@a11c10a, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@312716e4}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient.lambda$getServices$3(NacosReactiveDiscoveryClient.java:87) + at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) + at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 milliseconds, 585100 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@2ef21732[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@3d27096f, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@a11c10a, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@312716e4}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 19 common frames omitted +10:54:50.517 [boundedElastic-146] ERROR c.a.c.n.d.r.NacosReactiveDiscoveryClient - [lambda$getServices$3,94] - get services from nacos server fail, +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 milliseconds, 616700 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@16ff675b[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@3d27096f, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@a11c10a, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@312716e4}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient.lambda$getServices$3(NacosReactiveDiscoveryClient.java:87) + at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) + at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) + at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 milliseconds, 616700 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@16ff675b[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@3d27096f, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@a11c10a, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@312716e4}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 19 common frames omitted diff --git a/logs/muyu-gateway/info.2024-03-21.log b/logs/muyu-gateway/info.2024-03-21.log new file mode 100644 index 0000000..f23533d --- /dev/null +++ b/logs/muyu-gateway/info.2024-03-21.log @@ -0,0 +1,47 @@ +20:37:02.909 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:37:02.965 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:37:03.366 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:37:03.366 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:37:05.040 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:41:44.722 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:41:44.784 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:41:45.198 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:45.198 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:46.790 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:41:50.276 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +20:41:50.855 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +20:41:51.259 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:51.259 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:51.448 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:41:51.991 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:51.992 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:52.193 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +20:41:52.332 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +20:41:52.356 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 8.367 seconds (JVM running for 9.57) +20:41:52.359 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +20:41:52.359 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +20:41:52.361 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +20:41:52.803 [RMI TCP Connection(4)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +21:03:58.835 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:03:58.848 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:10:53.590 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +21:10:53.647 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +21:10:54.001 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:10:54.002 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:10:55.761 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +21:11:00.369 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +21:11:00.881 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +21:11:01.283 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:11:01.284 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:11:01.449 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +21:11:02.131 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:11:02.131 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:11:02.326 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +21:11:02.483 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +21:11:02.507 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 9.567 seconds (JVM running for 10.545) +21:11:02.511 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +21:11:02.511 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +21:11:02.514 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +21:11:02.730 [RMI TCP Connection(11)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +21:23:37.124 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:23:37.146 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gateway/info.2024-03-22.log b/logs/muyu-gateway/info.2024-03-22.log new file mode 100644 index 0000000..a5bfea1 --- /dev/null +++ b/logs/muyu-gateway/info.2024-03-22.log @@ -0,0 +1,388 @@ +08:53:46.757 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:53:46.843 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:53:47.287 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:47.287 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:49.490 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:53:53.032 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +08:53:53.576 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +08:53:53.976 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:53.976 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:55.152 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +08:53:56.396 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:56.396 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:56.599 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +08:53:56.825 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +08:53:56.854 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 10.663 seconds (JVM running for 11.537) +08:53:56.858 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +08:53:56.859 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +08:53:56.862 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +08:53:57.057 [RMI TCP Connection(27)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:28:43.488 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:29:01.737 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:29:21.714 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:29:41.726 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:30:01.749 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:30:21.733 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:30:41.760 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:31:01.736 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:31:21.724 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:31:41.732 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:32:01.728 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:32:21.739 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:32:41.737 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:33:01.713 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:33:21.715 [boundedElastic-43] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:33:41.723 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:34:01.742 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:34:21.735 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:34:41.772 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:35:02.008 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:35:21.724 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:35:41.743 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:36:01.754 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:36:21.989 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:36:41.731 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:01.766 [boundedElastic-43] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:21.722 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:41.723 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:01.751 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:21.742 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:41.730 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:01.735 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:21.719 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:41.767 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:01.734 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:21.729 [boundedElastic-43] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:41.744 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:01.721 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:21.983 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:41.735 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:01.732 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:21.711 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:41.747 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:01.719 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:21.766 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:41.728 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:01.758 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:21.729 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:41.742 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:01.759 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:21.719 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:41.726 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:01.723 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:21.738 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:41.731 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:01.742 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:21.726 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:41.725 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:01.716 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:21.737 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:41.741 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:01.730 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:21.716 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:41.734 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:01.723 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:21.720 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:41.716 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:01.736 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:21.760 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:41.738 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:01.726 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:21.759 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:41.726 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:01.747 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:21.734 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:41.756 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:01.760 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:21.728 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:41.750 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:01.730 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:21.730 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:41.781 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:01.738 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:21.732 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:41.732 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:01.748 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:21.765 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:41.735 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:01.724 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:21.765 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:41.754 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:01.749 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:21.746 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:41.740 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:01.734 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:21.748 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:41.746 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:01.724 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:21.756 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:41.755 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:01.726 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:22.286 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:41.884 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:01.983 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:21.721 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:41.724 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:01.724 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:21.733 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:41.758 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:01.734 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:21.744 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:41.777 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:01.745 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:21.724 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:41.730 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:01.758 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:21.746 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:41.748 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:01.793 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:21.736 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:41.750 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:01.743 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:21.742 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:41.742 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:01.753 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:21.733 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:41.746 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:01.730 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:21.733 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:41.733 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:01.739 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:21.760 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:41.735 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:01.732 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:21.726 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:41.732 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:01.770 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:21.725 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:41.737 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:01.730 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:21.742 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:41.729 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:01.746 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:21.747 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:41.734 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:01.728 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:21.969 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:41.723 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:01.731 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:21.740 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:41.735 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:01.755 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:21.748 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:41.754 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:01.736 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:21.739 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:41.762 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:01.739 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:21.729 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:41.745 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:01.752 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:21.766 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:41.754 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:01.772 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:21.760 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:41.852 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:01.775 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:21.756 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:41.767 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:01.792 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:21.769 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:41.801 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:01.747 [boundedElastic-85] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:21.801 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:41.766 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:01.811 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:21.778 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:41.766 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:01.744 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:21.827 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:41.774 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:01.790 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:21.778 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:41.773 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:01.772 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:22.036 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:41.821 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:01.741 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:21.784 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:41.766 [boundedElastic-85] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:01.742 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:21.937 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:41.945 [boundedElastic-85] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:01.817 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:21.780 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:41.842 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:01.848 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:21.769 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:41.732 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:01.798 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:21.803 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:41.738 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:01.789 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:21.770 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:41.746 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:01.896 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:21.764 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:41.751 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:01.800 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:21.750 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:41.796 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:01.739 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:21.901 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:41.753 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:01.766 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:21.803 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:41.838 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:01.756 [boundedElastic-94] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:21.788 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:41.868 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:01.835 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:21.791 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:41.804 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:01.744 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:21.805 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:41.789 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:01.777 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:21.850 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:41.820 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:01.800 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:21.817 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:41.798 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:01.815 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:21.759 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:41.775 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:01.773 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:21.747 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:41.787 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:01.765 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:21.759 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:41.864 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:01.773 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:21.785 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:41.776 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:01.767 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:21.797 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:41.804 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:01.827 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:21.769 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:41.866 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:01.867 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:21.788 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:41.814 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:01.842 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:21.765 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:41.876 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:01.777 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:21.761 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:41.875 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:01.795 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:21.819 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:41.820 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:01.798 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:21.768 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:41.756 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:01.791 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:21.781 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:41.761 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:01.792 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:21.862 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:41.809 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:01.831 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:21.802 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:41.857 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:01.785 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:21.825 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:41.797 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:01.783 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:21.778 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:41.889 [boundedElastic-117] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:01.846 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:21.810 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:41.759 [boundedElastic-120] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:01.807 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:21.767 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:41.815 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:01.782 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:21.788 [boundedElastic-117] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:41.798 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:01.752 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:21.769 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:41.757 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:01.801 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:21.761 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:41.770 [boundedElastic-120] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:01.762 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:21.755 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:41.780 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:01.749 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:21.762 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:41.742 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:01.767 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:21.799 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:41.990 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:01.762 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:21.779 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:41.782 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:01.757 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:21.774 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:41.774 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:01.772 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:21.763 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:41.753 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:01.760 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:21.776 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:41.750 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:01.790 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:21.762 [boundedElastic-120] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:41.773 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:01.759 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:21.748 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:41.776 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:01.749 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:21.943 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:41.798 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:01.810 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:21.754 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:42.026 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:01.810 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:21.781 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:41.789 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:02.060 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:21.772 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:41.797 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:01.910 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:21.822 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:41.785 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:01.750 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:21.779 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:41.763 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:01.768 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:21.787 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:41.780 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:01.784 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:21.759 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:42.061 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:24:01.782 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:24:21.771 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:24:41.762 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:25:02.044 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:25:21.758 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:25:41.767 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:26:01.812 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:26:21.794 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:26:41.772 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:27:01.771 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:27:21.823 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:27:41.802 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:28:01.787 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:28:21.769 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:28:41.790 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:29:01.761 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:29:22.033 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:29:41.787 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:01.786 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:21.792 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:41.755 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:53.545 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:30:53.580 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gateway/info.2024-03-23.log b/logs/muyu-gateway/info.2024-03-23.log new file mode 100644 index 0000000..9e55047 --- /dev/null +++ b/logs/muyu-gateway/info.2024-03-23.log @@ -0,0 +1,21 @@ +08:25:23.190 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:25:23.246 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:25:23.625 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:23.626 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:25.559 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:25:28.374 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +08:25:28.783 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +08:25:29.128 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:29.129 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:29.302 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +08:25:29.899 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:29.899 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:30.338 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +08:25:30.524 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +08:25:30.575 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 7.931 seconds (JVM running for 8.795) +08:25:30.581 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +08:25:30.582 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +08:25:30.585 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +08:25:30.912 [RMI TCP Connection(9)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +13:58:55.053 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +13:58:55.066 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gateway/info.2024-03-24.log b/logs/muyu-gateway/info.2024-03-24.log new file mode 100644 index 0000000..da241be --- /dev/null +++ b/logs/muyu-gateway/info.2024-03-24.log @@ -0,0 +1,1635 @@ +09:06:16.307 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:06:16.474 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:06:17.161 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:17.164 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:18.926 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:06:22.396 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +09:06:23.246 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +09:06:24.103 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:24.103 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:24.299 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:06:25.316 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:25.316 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:25.497 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +09:06:25.712 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +09:06:25.747 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 10.315 seconds (JVM running for 11.235) +09:06:25.766 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +09:06:25.769 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +09:06:25.775 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +09:06:25.958 [RMI TCP Connection(9)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:16:59.605 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:17:16.722 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:17:36.723 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:17:56.719 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:18:16.736 [boundedElastic-6] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:18:36.707 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:18:56.718 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:19:16.702 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:19:36.725 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:19:56.720 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:20:16.711 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:20:36.755 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:20:56.702 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:21:16.719 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:21:36.729 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:21:56.744 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:22:16.722 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:22:36.703 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:22:56.722 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:23:16.723 [boundedElastic-14] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:23:36.709 [boundedElastic-14] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:23:56.702 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:24:16.727 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:24:36.833 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:24:56.703 [boundedElastic-17] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:25:16.709 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:25:36.713 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:25:56.713 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:26:16.731 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:26:36.716 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:26:56.710 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:27:16.708 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:27:36.716 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:27:56.724 [boundedElastic-17] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:34.675 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:53.040 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:13.029 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:33.013 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:53.026 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:13.012 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:33.033 [boundedElastic-14] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:53.017 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:13.012 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:33.014 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:53.016 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:13.016 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:33.019 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:53.016 [boundedElastic-36] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:13.011 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:33.039 [boundedElastic-36] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:53.021 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:13.022 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:33.020 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:53.046 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:13.052 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:33.041 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:53.027 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:13.027 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:33.031 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:53.016 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:13.013 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:33.005 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:53.010 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:13.009 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:33.008 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:53.019 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:13.018 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:33.013 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:53.017 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:13.018 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:33.018 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:53.017 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:13.010 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:33.016 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:53.012 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:13.017 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:33.033 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:53.033 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:13.015 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:33.015 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:53.030 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:13.011 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:33.007 [boundedElastic-35] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:53.023 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:13.018 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:33.016 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:53.011 [boundedElastic-43] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:13.013 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:33.011 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:53.024 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:13.037 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:33.022 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:53.015 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:13.036 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:33.019 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:53.016 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:13.030 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:33.010 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:53.013 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:13.015 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:33.013 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:53.024 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:13.027 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:33.023 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:53.025 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:13.071 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:33.019 [boundedElastic-50] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:53.020 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:13.025 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:33.053 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:53.024 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:13.016 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:33.030 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:53.021 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:13.013 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:33.029 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:53.027 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:13.040 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:33.014 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:53.070 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:13.029 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:33.054 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:53.022 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:13.019 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:33.020 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:53.026 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:13.021 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:33.024 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:53.024 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:13.021 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:33.045 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:53.036 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:13.022 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:33.020 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:53.143 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:13.017 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:33.018 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:53.067 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:13.026 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:33.022 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:53.023 [boundedElastic-50] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:13.021 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:33.018 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:53.030 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:13.054 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:33.029 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:53.027 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:13.023 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:33.266 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:53.029 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:13.037 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:33.020 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:53.038 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:13.025 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:33.050 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:53.021 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:13.036 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:33.020 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:53.030 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:13.029 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:33.027 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:53.062 [boundedElastic-59] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:13.035 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:33.034 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:53.262 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:13.030 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:33.024 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:53.022 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:13.020 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:33.024 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:53.045 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:13.032 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:33.037 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:53.041 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:13.027 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:33.057 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:53.046 [boundedElastic-59] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:13.036 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:33.029 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:53.034 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:13.049 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:33.020 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:53.035 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:13.061 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:33.026 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:53.026 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:13.051 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:33.031 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:53.034 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:13.035 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:33.050 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:53.046 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:13.025 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:33.032 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:53.043 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:13.034 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:33.023 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:53.050 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:13.038 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:33.078 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:53.037 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:13.044 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:33.102 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:53.064 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:13.047 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:33.042 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:53.055 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:13.034 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:33.040 [boundedElastic-74] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:53.042 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:13.044 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:33.037 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:53.037 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:13.034 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:33.029 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:53.054 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:13.052 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:33.029 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:53.045 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:13.029 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:33.060 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:53.062 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:13.036 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:33.064 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:53.027 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:13.047 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:33.048 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:53.030 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:13.043 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:33.036 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:53.035 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:13.041 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:33.038 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:53.048 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:13.033 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:33.091 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:53.065 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:13.055 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:33.036 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:53.053 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:13.042 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:33.042 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:53.125 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:13.055 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:33.059 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:53.040 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:13.042 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:33.044 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:53.039 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:13.050 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:33.057 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:53.065 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:13.048 [boundedElastic-94] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:33.029 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:53.065 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:13.047 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:33.040 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:53.030 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:03.073 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:23.076 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:43.108 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:03.118 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:23.137 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:43.174 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:03.176 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:23.212 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:43.244 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:03.258 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:23.278 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:43.034 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:03.043 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:23.035 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:43.031 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:03.040 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:23.052 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:43.041 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:03.035 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:23.041 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:43.063 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:03.049 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:23.046 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:43.047 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:03.062 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:23.052 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:43.083 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:03.107 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:23.045 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:43.035 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:13.083 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:33.104 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:53.124 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:13.155 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:33.191 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:53.214 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:03.393 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:23.053 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:43.060 [boundedElastic-108] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:03.035 [boundedElastic-108] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:23.079 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:43.052 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:03.048 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:23.049 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:43.045 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:03.054 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:23.047 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:43.046 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:03.055 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:23.037 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:43.058 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:03.083 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:23.040 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:43.055 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:03.082 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:23.055 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:43.067 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:03.061 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:23.042 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:43.053 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:03.066 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:23.040 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:43.035 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:03.038 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:23.050 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:43.332 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:03.074 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:23.079 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:43.046 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:03.093 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:23.099 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:43.056 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:03.040 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:23.097 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:43.059 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:03.045 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:23.044 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:43.049 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:03.077 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:23.056 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:43.061 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:03.061 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:23.075 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:43.048 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:03.051 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:23.045 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:43.048 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:03.060 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:23.051 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:43.054 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:03.072 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:23.051 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:43.051 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:03.049 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:23.046 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:43.062 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:24:03.056 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:24:23.040 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:24:43.064 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:25:03.053 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:25:23.043 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:25:43.068 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:26:03.083 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:26:23.086 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:26:43.047 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:27:03.057 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:27:23.051 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:27:43.095 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:28:03.089 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:28:23.046 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:28:43.039 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:29:03.255 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:29:23.081 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:29:43.044 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:03.071 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:23.053 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:30:43.050 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:31:03.063 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:31:23.046 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:31:43.046 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:32:03.069 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:32:23.079 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:32:43.056 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:33:03.046 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:33:23.154 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:33:43.102 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:34:03.060 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:34:23.055 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:34:43.069 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:35:03.075 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:35:23.069 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:35:43.065 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:36:03.054 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:36:23.071 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:36:43.094 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:37:03.056 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:37:23.076 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:37:43.059 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:38:03.061 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:38:23.070 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:38:43.057 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:39:03.045 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:39:23.056 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:39:43.054 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:40:03.062 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:40:23.056 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:40:43.055 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:41:03.075 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:41:23.047 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:41:43.074 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:42:03.075 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:42:23.138 [boundedElastic-131] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:42:43.065 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:43:03.079 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:43:23.060 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:43:43.055 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:44:03.050 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:44:23.055 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:44:43.080 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:45:03.063 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:45:23.065 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:45:43.085 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:46:03.052 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:46:23.062 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:46:43.057 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:47:03.053 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:47:23.074 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:47:43.072 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:48:03.069 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:48:23.059 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:48:43.077 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:49:03.069 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:49:23.088 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:49:43.057 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:50:03.050 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:50:23.067 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:50:43.065 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:51:03.122 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:51:23.082 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:51:43.057 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:52:03.058 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:52:23.064 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:52:43.068 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:53:03.075 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:53:23.065 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:53:43.055 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:54:03.061 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:54:23.049 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:54:43.071 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:55:03.085 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:55:23.087 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:55:43.059 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:56:03.084 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:56:23.078 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:56:43.064 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:57:03.053 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:57:23.068 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:57:43.056 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:58:03.085 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:58:23.067 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:58:43.071 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:59:03.084 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:59:23.056 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:59:43.133 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:00:03.063 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:00:23.068 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:00:43.062 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:01:03.057 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:01:23.061 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:01:43.057 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:02:03.302 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:02:23.058 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:02:43.059 [boundedElastic-148] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:03:03.052 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:03:23.062 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:03:43.059 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:04:03.058 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:04:23.080 [boundedElastic-148] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:04:43.071 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:05:03.061 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:05:23.061 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:05:43.059 [boundedElastic-148] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:06:03.055 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:06:23.056 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:06:43.068 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:07:03.054 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:07:23.083 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:07:43.146 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:08:03.089 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:08:23.061 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:08:43.063 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:09:03.065 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:09:23.064 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:09:43.064 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:10:03.058 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:10:23.062 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:10:43.067 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:11:03.067 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:11:23.080 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:11:43.065 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:12:03.075 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:12:23.070 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:12:43.055 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:13:03.069 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:13:23.061 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:13:43.070 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:14:03.279 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:14:23.069 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:14:43.058 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:15:03.058 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:15:23.092 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:15:43.061 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:16:03.094 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:16:23.064 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:16:43.078 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:17:03.062 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:17:23.071 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:17:43.073 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:18:03.088 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:18:23.063 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:18:43.084 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:19:03.070 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:19:23.089 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:19:43.062 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:20:03.074 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:20:23.062 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:20:43.057 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:21:03.201 [boundedElastic-164] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:21:23.061 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:21:43.073 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:22:03.071 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:22:23.072 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:22:43.069 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:23:03.058 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:23:23.084 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:23:43.082 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:24:03.074 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:24:23.062 [boundedElastic-167] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:24:43.136 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:25:03.062 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:25:23.062 [boundedElastic-166] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:25:43.075 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:26:03.073 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:26:23.069 [boundedElastic-167] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:26:43.074 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:27:03.067 [boundedElastic-164] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:27:23.070 [boundedElastic-167] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:27:43.074 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:28:03.068 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:28:23.071 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:28:43.070 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:29:03.067 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:29:23.088 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:29:43.075 [boundedElastic-167] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:30:03.086 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:30:23.086 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:30:43.067 [boundedElastic-166] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:31:03.070 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:31:23.067 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:31:43.084 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:32:03.071 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:32:23.079 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:32:43.082 [boundedElastic-170] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:33:03.079 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +12:33:13.306 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:33:13.321 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:04:47.791 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:04:47.842 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:04:48.146 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:48.147 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:49.719 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:04:52.746 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +14:04:53.192 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +14:04:53.552 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:53.552 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:53.714 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:04:54.323 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:54.324 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:54.521 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +14:04:54.695 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +14:04:54.720 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 7.428 seconds (JVM running for 8.35) +14:04:54.725 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +14:04:54.725 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +14:04:54.727 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +14:04:55.044 [RMI TCP Connection(8)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:04:58.886 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:05:16.183 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:05:33.125 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:05:37.443 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:05:53.131 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:05:56.426 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:06:13.102 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:06:16.416 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:06:33.149 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:06:36.400 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:06:53.111 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:06:56.412 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:13.109 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:16.402 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:33.098 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:36.401 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:53.111 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:56.422 [boundedElastic-2] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:08:13.148 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:08:16.410 [boundedElastic-17] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:08:33.102 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:08:36.418 [boundedElastic-17] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:08:53.129 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:08:56.425 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:09:13.122 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:09:16.413 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:09:33.131 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:09:36.401 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:09:53.124 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:09:56.421 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:10:13.118 [boundedElastic-14] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:10:16.418 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:10:33.107 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:10:36.403 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:10:53.131 [boundedElastic-2] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:10:56.443 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:11:13.119 [boundedElastic-19] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:11:16.443 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:11:33.128 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:11:36.397 [boundedElastic-16] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:11:53.114 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:11:56.408 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:12:13.133 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:12:16.413 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:12:33.129 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:12:36.397 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:12:53.103 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:12:56.409 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:13:13.128 [boundedElastic-20] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:13:16.413 [boundedElastic-19] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:13:33.114 [boundedElastic-14] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:13:36.400 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:13:53.142 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:13:56.430 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:14:13.123 [boundedElastic-19] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:14:16.404 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:14:33.116 [boundedElastic-16] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:14:36.407 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:14:53.104 [boundedElastic-16] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:14:56.399 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:15:13.143 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:15:16.411 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:15:33.108 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:15:36.407 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:15:53.111 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:15:56.391 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:16:13.117 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:16:16.410 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:16:33.110 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:16:36.410 [boundedElastic-19] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:16:53.115 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:16:56.429 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:13.132 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:16.427 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:33.130 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:36.426 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:53.111 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:56.425 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:18:13.109 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:18:16.415 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:18:33.130 [boundedElastic-3] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:18:36.404 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:18:53.111 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:18:56.408 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:19:13.105 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:19:16.399 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:19:33.134 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:19:36.413 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:19:53.105 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:19:56.425 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:20:13.106 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:20:16.408 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:20:33.165 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:20:36.405 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:20:53.116 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:20:56.403 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:13.128 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:16.400 [boundedElastic-24] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:33.134 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:36.443 [boundedElastic-29] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:53.114 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:56.409 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:22:13.111 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:22:16.428 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:22:33.113 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:22:36.398 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:22:53.104 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:22:56.394 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:23:13.109 [boundedElastic-9] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:23:16.409 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:23:33.141 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:23:36.409 [boundedElastic-28] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:23:53.147 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:23:56.420 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:24:13.109 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:24:16.408 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:24:33.128 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:24:36.396 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:24:53.125 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:24:56.421 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:25:13.135 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:25:16.417 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:25:33.237 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:25:36.653 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:25:53.111 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:25:56.400 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:26:13.115 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:26:16.408 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:26:33.109 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:26:36.401 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:26:53.143 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:26:56.398 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:27:13.113 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:27:16.399 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:27:33.121 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:27:36.403 [boundedElastic-36] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:27:53.138 [boundedElastic-37] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:27:56.407 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:28:13.120 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:28:16.406 [boundedElastic-33] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:28:33.118 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:28:36.434 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:28:53.122 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:28:56.398 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:13.131 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:16.439 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:33.109 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:36.414 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:53.149 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:56.414 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:30:13.110 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:30:16.430 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:30:33.124 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:30:36.404 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:30:53.127 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:30:56.404 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:31:13.146 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:31:16.409 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:31:33.132 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:31:36.408 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:31:53.125 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:31:56.419 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:13.128 [boundedElastic-36] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:16.418 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:33.119 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:36.414 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:53.133 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:56.400 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:33:13.114 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:33:16.411 [boundedElastic-36] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:33:33.126 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:33:36.427 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:33:53.135 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:33:56.418 [boundedElastic-38] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:34:13.125 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:34:16.426 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:34:33.117 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:34:36.400 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:34:53.128 [boundedElastic-39] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:34:56.400 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:35:13.110 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:35:16.413 [boundedElastic-31] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:35:33.112 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:35:36.420 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:35:53.119 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:35:56.415 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:13.113 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:16.427 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:33.157 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:36.430 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:53.124 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:56.419 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:37:13.118 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:37:16.393 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:37:33.128 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:37:36.409 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:37:53.131 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:37:56.438 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:38:13.119 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:38:16.431 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:38:33.115 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:38:36.395 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:38:53.117 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:38:56.411 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:39:13.121 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:39:16.423 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:39:33.147 [boundedElastic-32] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:39:36.402 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:39:53.136 [boundedElastic-35] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:39:56.393 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:40:13.132 [boundedElastic-26] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:40:16.431 [boundedElastic-43] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:40:33.131 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:40:36.417 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:40:53.125 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:40:56.420 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:41:13.131 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:41:16.433 [boundedElastic-45] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:41:33.118 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:41:36.403 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:41:53.154 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:41:56.401 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:42:13.135 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:42:16.405 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:42:33.128 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:42:36.410 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:42:53.130 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:42:56.401 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:43:13.139 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:43:16.396 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:43:33.145 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:43:36.397 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:43:53.132 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:43:56.404 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:44:13.116 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:44:16.400 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:44:33.171 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:44:36.404 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:44:53.138 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:44:56.558 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:45:13.138 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:45:16.413 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:45:33.129 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:45:36.395 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:45:53.154 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:45:56.449 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:46:13.143 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:46:16.413 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:46:33.117 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:46:36.394 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:46:53.121 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:46:56.618 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:47:13.137 [boundedElastic-42] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:47:16.398 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:47:33.119 [boundedElastic-50] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:47:36.418 [boundedElastic-44] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:47:53.134 [boundedElastic-25] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:47:56.429 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:48:13.258 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:48:16.437 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:48:34.461 [boundedElastic-48] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:48:36.413 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:48:53.363 [boundedElastic-49] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:48:56.400 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:49:13.585 [boundedElastic-34] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:49:16.439 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:49:33.180 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:49:36.468 [boundedElastic-57] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:49:53.124 [boundedElastic-52] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:49:57.216 [boundedElastic-57] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:50:13.373 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:50:16.475 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:50:33.443 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:50:36.992 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:50:53.521 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:50:56.675 [boundedElastic-56] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:51:13.217 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:51:16.433 [boundedElastic-40] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:51:33.174 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:51:36.549 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:51:53.176 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:51:57.005 [boundedElastic-50] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:52:14.405 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:52:16.581 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:52:33.428 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:52:36.467 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:52:53.381 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:52:56.482 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:53:13.412 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:53:17.048 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:53:24.905 [lettuce-nioEventLoop-5-2] INFO i.l.c.p.CommandHandler - [log,217] - null Unexpected exception during request: java.net.SocketException: Connection reset +java.net.SocketException: Connection reset + at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) + at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) + at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:256) + at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) + at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base/java.lang.Thread.run(Thread.java:833) +14:53:24.954 [lettuce-eventExecutorLoop-3-13] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:53:25.368 [lettuce-nioEventLoop-5-3] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +14:53:33.578 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:53:36.616 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:53:53.180 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:53:56.691 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:54:13.820 [boundedElastic-55] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:54:16.430 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:54:33.264 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:54:36.541 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:54:53.130 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:54:56.724 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:55:13.129 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:55:16.403 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:55:33.155 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:55:36.498 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:55:53.255 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:55:56.566 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:56:13.510 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:56:16.755 [boundedElastic-57] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:56:33.155 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:56:37.058 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:56:53.591 [boundedElastic-50] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:56:56.486 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:57:13.358 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:57:16.871 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:57:33.500 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:57:36.784 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:57:53.269 [boundedElastic-57] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:57:56.432 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:58:13.149 [lettuce-eventExecutorLoop-3-3] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:58:13.201 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:58:13.471 [lettuce-nioEventLoop-5-4] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +14:58:17.412 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:58:33.311 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:58:36.619 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:58:53.213 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:58:56.427 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:59:13.283 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:59:16.489 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:59:33.352 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:59:36.869 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:59:53.463 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:59:56.578 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:00:13.678 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:00:16.619 [boundedElastic-60] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:00:33.196 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:00:36.803 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:00:53.165 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:00:56.515 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:01:13.515 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:01:16.548 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:01:33.315 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:01:36.506 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:01:53.247 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:01:56.907 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:02:13.497 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:02:16.531 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:02:33.239 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:02:36.598 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:02:53.595 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:02:56.450 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:03:13.399 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:03:16.610 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:03:33.646 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:03:36.574 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:03:53.398 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:03:56.538 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:04:13.683 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:04:16.689 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:04:33.242 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:04:36.413 [boundedElastic-71] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:04:53.962 [boundedElastic-41] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:04:56.478 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:05:14.210 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:05:17.085 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:05:33.919 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:05:36.417 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:05:53.650 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:05:56.674 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:06:13.241 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:06:16.660 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:06:33.217 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:06:36.927 [boundedElastic-74] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:06:53.289 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:06:56.436 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:07:13.323 [boundedElastic-47] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:07:16.509 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:07:33.151 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:07:36.797 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:07:53.292 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:07:56.867 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:08:13.687 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:08:16.606 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:08:33.248 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:08:36.577 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:08:53.888 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:08:56.503 [boundedElastic-74] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:09:13.398 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:09:16.729 [boundedElastic-74] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:09:33.210 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:09:36.539 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:09:53.599 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:09:56.504 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:10:13.323 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:10:16.716 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:10:33.331 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:10:36.452 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:10:53.560 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:10:57.523 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:11:13.260 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:11:16.573 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:11:34.040 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:11:36.491 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:11:53.526 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:11:56.705 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:12:13.489 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:12:16.449 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:12:33.519 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:12:36.476 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:12:53.527 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:12:56.572 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:13:13.157 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:13:16.473 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:13:33.270 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:13:36.781 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:13:53.629 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:13:56.526 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:14:13.132 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:14:16.448 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:14:33.510 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:14:36.659 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:14:54.162 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:14:57.147 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:15:13.778 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:15:16.403 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:15:33.438 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:15:36.567 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:15:53.421 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:15:56.679 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:16:13.506 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:16:16.396 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:16:33.536 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:16:36.458 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:16:53.824 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:16:56.476 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:17:13.239 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:17:16.403 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:17:33.345 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:17:37.329 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:17:53.855 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:17:56.408 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:18:13.210 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:18:16.618 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:18:33.161 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:18:37.125 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:18:53.534 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:18:56.410 [boundedElastic-61] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:19:13.290 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:19:16.586 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:19:33.682 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:19:37.297 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:19:53.339 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:19:56.404 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:20:13.552 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:20:16.758 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:20:33.175 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:20:36.741 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:20:54.259 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:20:56.523 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:21:13.407 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:21:17.183 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:21:33.265 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:21:36.544 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:21:53.345 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:21:56.452 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:22:13.317 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:22:16.539 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:22:33.627 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:22:37.601 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:22:53.228 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:22:57.339 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:23:13.252 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:23:17.192 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:23:33.430 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:23:36.644 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:23:53.976 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:23:56.616 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:24:13.508 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:24:16.467 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:24:33.245 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:24:37.568 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:24:53.626 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:24:56.728 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:25:13.481 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:25:17.870 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:25:33.508 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:25:36.436 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:25:53.441 [boundedElastic-94] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:25:56.731 [boundedElastic-94] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:26:13.326 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:26:16.487 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:26:33.461 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:26:36.841 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:26:53.192 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:26:56.960 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:27:13.166 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:27:16.905 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:27:33.488 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:27:37.425 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:27:53.442 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:27:56.450 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:28:13.342 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:28:16.692 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:28:33.155 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:28:36.435 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:28:53.500 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:28:56.881 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:29:13.547 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:29:16.421 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:29:33.742 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:29:37.036 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:29:53.525 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:29:57.546 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:30:13.440 [boundedElastic-109] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:30:16.661 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:30:33.266 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:30:36.486 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:30:53.391 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:30:56.474 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:31:13.397 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:31:16.757 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:31:33.822 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:31:36.594 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:31:53.255 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:31:56.714 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:32:13.310 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:32:16.403 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:32:33.546 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:32:36.477 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:32:53.405 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:32:56.638 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:33:13.340 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:33:16.485 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:33:33.214 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:33:36.435 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:33:53.539 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:33:56.932 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:34:14.056 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:34:16.868 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:34:33.237 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:34:36.401 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:34:53.421 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:34:56.498 [boundedElastic-115] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:35:13.653 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:35:16.609 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:35:34.209 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:35:36.435 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:35:54.640 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:35:57.273 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:36:13.454 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:36:16.943 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:36:33.176 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:36:36.520 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:36:53.286 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:36:57.040 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:37:13.373 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:37:16.400 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:37:33.371 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:37:36.464 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:37:53.463 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:37:57.353 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:38:13.340 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:38:16.445 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:38:33.275 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:38:36.425 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:38:53.265 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:38:56.493 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:39:13.266 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:39:16.733 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:39:33.929 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:39:36.723 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:39:53.675 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:39:56.537 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:40:14.432 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:40:17.267 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:40:33.950 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:40:37.102 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:40:53.219 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:40:56.503 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:41:13.479 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:41:17.319 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:41:33.542 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:41:36.603 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:41:53.249 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:41:56.508 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:42:13.183 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:42:16.725 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:42:33.556 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:42:36.819 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:42:53.259 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:42:56.536 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:43:14.221 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:43:16.564 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:43:33.149 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:43:36.524 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:43:54.143 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:43:56.816 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:44:13.171 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:44:16.762 [boundedElastic-117] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:44:33.347 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:44:37.138 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:44:53.617 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:44:57.416 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:45:13.233 [boundedElastic-120] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:45:17.215 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:45:33.166 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:45:36.956 [boundedElastic-120] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:45:53.821 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:45:56.675 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:46:13.221 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:46:16.527 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:46:33.137 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:46:36.408 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:46:53.145 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:46:56.423 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:47:13.147 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:47:16.404 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:47:33.148 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:47:36.406 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:47:53.141 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:47:56.420 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:48:13.153 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:48:16.410 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:48:33.158 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:48:36.396 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:48:53.149 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:48:56.406 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:49:13.146 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:49:16.398 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:49:33.138 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:49:36.404 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:49:53.172 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:49:56.393 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:50:13.159 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:50:16.399 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:50:33.154 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:50:36.404 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:50:53.145 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:50:56.403 [boundedElastic-129] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:51:13.142 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:51:16.400 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:51:33.176 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:51:36.421 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:51:53.153 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:51:56.401 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:52:13.149 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:52:16.413 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:52:33.156 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:52:36.408 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:52:53.154 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:52:56.403 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:13.170 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:16.419 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:33.153 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:36.417 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:53.146 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:56.407 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:13.139 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:16.429 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:33.150 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:36.418 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:53.145 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:56.395 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:13.142 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:16.426 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:33.173 [boundedElastic-131] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:36.405 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:53.172 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:56.395 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:13.166 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:16.396 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:33.142 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:36.428 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:53.149 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:56.410 [boundedElastic-131] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:13.156 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:16.407 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:33.170 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:36.415 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:53.157 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:56.397 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:13.141 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:16.423 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:33.147 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:36.873 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:53.145 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:56.404 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:13.160 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:16.421 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:33.156 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:36.402 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:53.145 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:56.413 [boundedElastic-130] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:13.173 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:16.420 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:33.164 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:36.422 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:53.158 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:56.395 [boundedElastic-139] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:01:13.172 [boundedElastic-142] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:01:16.397 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:01:33.148 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:01:36.403 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:01:53.159 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:01:56.413 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:02:13.150 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:02:16.393 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:02:33.145 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:02:36.395 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:02:53.390 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:02:56.423 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:03:13.159 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:03:16.397 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:03:33.175 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:03:36.405 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:03:53.146 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:03:56.397 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:04:13.176 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:04:16.400 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:04:33.144 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:04:36.405 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:04:53.179 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:04:56.407 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:13.159 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:16.415 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:33.172 [boundedElastic-142] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:36.434 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:53.161 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:56.412 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:13.163 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:16.401 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:33.157 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:36.398 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:53.158 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:56.415 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:13.158 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:16.403 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:33.386 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:36.401 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:53.177 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:56.400 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:13.154 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:16.425 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:33.163 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:36.399 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:53.160 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:56.392 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:13.170 [boundedElastic-148] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:16.656 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:33.174 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:36.418 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:53.163 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:56.400 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:13.159 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:16.407 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:33.157 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:36.425 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:53.161 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:56.415 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:13.166 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:16.398 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:33.158 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:36.410 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:53.184 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:56.405 [boundedElastic-148] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:13.169 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:16.415 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:33.161 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:36.428 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:53.171 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:56.406 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:13.175 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:16.431 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:33.165 [boundedElastic-155] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:36.423 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:53.179 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:56.423 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:13.162 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:16.403 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:33.155 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:36.432 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:53.158 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:56.427 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:13.177 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:16.397 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:33.158 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:36.425 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:53.158 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:56.418 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:13.164 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:16.400 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:33.163 [boundedElastic-155] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:36.415 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:53.181 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:56.421 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:13.160 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:16.399 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:33.156 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:36.400 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:53.163 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:56.414 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:13.161 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:16.424 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:33.168 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:36.414 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:53.156 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:56.400 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:13.170 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:16.423 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:33.159 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:36.425 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:53.175 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:56.405 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:13.171 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:16.407 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:33.162 [boundedElastic-159] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:36.403 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:53.166 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:56.415 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:13.155 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:16.417 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:33.159 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:36.410 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:53.158 [boundedElastic-164] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:56.406 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:13.159 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:16.397 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:33.154 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:36.403 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:53.184 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:56.401 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:13.153 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:16.411 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:33.202 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:36.400 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:53.154 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:56.428 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:13.164 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:16.424 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:33.190 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:36.406 [boundedElastic-161] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:53.179 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:56.401 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:25:13.161 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:25:16.407 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:25:33.167 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:25:36.419 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:25:53.181 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:25:56.394 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:26:13.171 [boundedElastic-168] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:26:16.402 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:26:33.191 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:26:36.408 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:26:53.162 [boundedElastic-168] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:26:56.427 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:27:13.158 [boundedElastic-166] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:27:16.412 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:27:33.160 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:27:36.399 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:27:53.170 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:27:56.401 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:28:13.168 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:28:16.429 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:28:33.188 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:28:36.405 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:28:53.178 [boundedElastic-165] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:28:56.403 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:29:13.162 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:29:16.434 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:29:33.179 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:29:36.428 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:29:53.175 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:29:56.429 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:30:13.189 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:30:16.434 [boundedElastic-170] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:30:33.185 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:30:36.418 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:30:53.166 [boundedElastic-170] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:30:56.403 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:31:13.169 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:31:16.409 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:31:33.170 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:31:36.406 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:31:53.184 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:31:56.406 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:32:13.191 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:32:16.418 [boundedElastic-176] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:32:33.159 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:32:36.410 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:32:53.165 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:32:56.393 [boundedElastic-170] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:33:13.164 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:33:16.406 [boundedElastic-172] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:33:33.171 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:33:36.402 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:33:53.177 [boundedElastic-170] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:33:56.401 [boundedElastic-178] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:34:13.189 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:34:16.392 [boundedElastic-177] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:34:33.167 [boundedElastic-166] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:34:36.423 [boundedElastic-161] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:34:53.195 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:34:56.414 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:35:13.188 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:35:16.392 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:35:33.177 [boundedElastic-172] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:35:36.419 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:35:53.185 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:35:56.407 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:36:13.167 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:36:16.414 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:36:33.181 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:36:36.406 [boundedElastic-176] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:36:53.191 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:36:56.436 [boundedElastic-172] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:37:13.164 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:37:16.418 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:37:33.190 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:37:36.411 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:37:53.170 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:37:56.404 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:38:13.185 [boundedElastic-161] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:38:16.428 [boundedElastic-179] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:38:33.178 [boundedElastic-177] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:38:36.638 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:38:53.167 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:38:56.403 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:39:13.182 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:39:16.397 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:39:33.168 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:39:36.405 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:39:53.192 [boundedElastic-161] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:39:56.410 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:40:13.188 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:40:16.405 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:40:33.170 [boundedElastic-147] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:40:36.400 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:40:53.199 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:40:56.432 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:41:13.172 [boundedElastic-181] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:41:16.401 [boundedElastic-182] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:41:33.184 [boundedElastic-177] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:41:36.425 [boundedElastic-184] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:41:53.183 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:41:56.410 [boundedElastic-184] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:42:13.167 [boundedElastic-182] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:42:16.406 [boundedElastic-183] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:42:33.188 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:42:36.402 [boundedElastic-171] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:42:53.180 [boundedElastic-184] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:42:56.435 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:43:13.166 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:43:16.401 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:43:33.191 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:43:36.397 [boundedElastic-184] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:43:53.174 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:43:56.420 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:44:13.167 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:44:16.425 [boundedElastic-185] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:44:33.183 [boundedElastic-184] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:44:36.402 [boundedElastic-177] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:44:53.193 [boundedElastic-180] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:44:56.403 [boundedElastic-174] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:45:13.213 [boundedElastic-184] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:45:16.408 [boundedElastic-185] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:45:33.190 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:45:36.399 [boundedElastic-190] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:45:53.204 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:45:56.418 [boundedElastic-190] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:46:13.183 [boundedElastic-189] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:46:16.405 [boundedElastic-173] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:46:33.184 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:46:36.398 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:46:53.164 [boundedElastic-169] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:46:56.407 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:47:13.172 [boundedElastic-175] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:47:16.411 [boundedElastic-188] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:47:16.493 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.507 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +18:22:18.961 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:22:19.025 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:22:19.426 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:19.427 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:21.910 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:22:27.164 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +18:22:27.866 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +18:22:28.533 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:28.534 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:28.946 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +18:22:30.367 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:30.368 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:27:58.143 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:27:58.203 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:27:58.842 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:27:58.843 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:01.004 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:28:04.609 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +18:28:05.212 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +18:28:05.621 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:28:05.621 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:06.084 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +18:28:06.917 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:28:06.917 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:07.332 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 192.168.43.159:8080 register finished +18:28:07.683 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +18:28:07.712 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 10.097 seconds (JVM running for 11.291) +18:28:07.717 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +18:28:07.719 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +18:28:07.722 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +18:28:07.928 [RMI TCP Connection(12)-192.168.43.159] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +19:08:04.466 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +19:08:04.668 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +19:08:43.683 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +19:08:43.737 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +19:08:44.138 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +19:08:44.140 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. diff --git a/logs/muyu-gateway/info.2024-03-25.log b/logs/muyu-gateway/info.2024-03-25.log new file mode 100644 index 0000000..61cca20 --- /dev/null +++ b/logs/muyu-gateway/info.2024-03-25.log @@ -0,0 +1,77 @@ +09:41:38.989 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:41:39.048 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:41:39.489 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:39.490 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:41.717 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:41:45.094 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +09:41:45.516 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +09:41:45.845 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:45.845 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:46.057 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:46.643 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:46.644 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:46.874 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +09:41:47.015 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +09:41:47.041 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 8.566 seconds (JVM running for 9.539) +09:41:47.045 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +09:41:47.046 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +09:41:47.048 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +09:41:47.493 [RMI TCP Connection(7)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:48:40.172 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:48:40.192 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:07:26.399 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:07:26.446 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:07:26.752 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:26.752 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:28.631 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:07:32.575 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +14:07:33.078 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +14:07:33.494 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:33.495 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:33.856 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:07:34.562 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:34.562 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:34.849 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +14:07:35.039 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +14:07:35.067 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 9.186 seconds (JVM running for 10.01) +14:07:35.072 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +14:07:35.072 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +14:07:35.075 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +14:07:35.340 [RMI TCP Connection(9)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:05.790 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:23.322 [boundedElastic-96] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:43.316 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:03.335 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:23.323 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:43.321 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:03.321 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:23.559 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:43.327 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:03.320 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:23.334 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:43.348 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:03.320 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:23.338 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:43.368 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:03.331 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:23.331 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:43.312 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:03.332 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:23.325 [boundedElastic-95] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:43.591 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:03.310 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:23.329 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:43.378 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:03.336 [boundedElastic-104] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:23.319 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:43.334 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:03.339 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:23.322 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:22:43.381 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:03.616 [boundedElastic-102] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:23.319 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:23:43.349 [boundedElastic-108] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:03.342 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:23.340 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:24:39.164 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:24:39.182 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gateway/info.2024-03-26.log b/logs/muyu-gateway/info.2024-03-26.log new file mode 100644 index 0000000..041ef2b --- /dev/null +++ b/logs/muyu-gateway/info.2024-03-26.log @@ -0,0 +1,592 @@ +08:43:04.281 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:43:04.377 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:43:04.868 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:04.869 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:07.966 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:43:12.065 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +08:43:12.660 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +08:43:13.206 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:13.206 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:13.435 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +08:43:14.673 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:14.674 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:14.955 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +08:43:15.272 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +08:43:15.316 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 11.527 seconds (JVM running for 12.327) +08:43:15.323 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +08:43:15.324 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +08:43:15.328 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +08:43:15.488 [RMI TCP Connection(11)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:31:45.937 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:32:03.828 [boundedElastic-54] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:32:23.877 [boundedElastic-58] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:32:43.832 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:33:03.841 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:33:23.865 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:33:43.843 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:34:03.875 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:34:23.850 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:34:43.857 [boundedElastic-63] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:35:03.848 [boundedElastic-53] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:35:23.856 [boundedElastic-27] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:35:43.959 [boundedElastic-51] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:36:03.855 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:36:23.876 [boundedElastic-67] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:36:43.855 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:03.914 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:23.899 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:37:43.881 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:03.833 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:23.819 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:38:43.862 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:03.858 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:23.862 [boundedElastic-62] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:39:43.834 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:03.845 [boundedElastic-66] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:23.839 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:40:43.840 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:03.858 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:23.848 [boundedElastic-72] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:41:43.849 [boundedElastic-74] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:03.833 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:23.868 [boundedElastic-46] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:42:43.833 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:03.851 [boundedElastic-74] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:23.837 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:43:43.817 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:03.859 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:23.844 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:44:43.826 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:03.849 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:23.892 [boundedElastic-70] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:45:43.862 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:03.853 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:23.844 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:46:43.820 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:03.882 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:23.831 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:47:43.856 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:03.859 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:23.840 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:48:43.851 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:03.866 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:23.888 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:49:43.855 [boundedElastic-75] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:03.839 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:24.015 [boundedElastic-64] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:50:43.832 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:03.822 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:23.846 [boundedElastic-73] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:51:43.856 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:03.852 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:23.825 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:52:43.915 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:03.853 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:23.829 [boundedElastic-80] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:53:43.833 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:03.856 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:23.862 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:54:43.840 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:03.903 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:23.865 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:55:43.853 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:03.835 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:24.071 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:56:43.859 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:03.843 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:23.879 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:57:43.845 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:03.901 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:23.880 [boundedElastic-88] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:58:43.844 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:03.868 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:23.844 [boundedElastic-91] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +09:59:43.848 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:03.839 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:23.833 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:00:43.859 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:03.832 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:23.853 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:01:43.824 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:03.837 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:23.830 [boundedElastic-68] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:02:43.832 [boundedElastic-94] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:03.864 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:23.826 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:03:43.914 [boundedElastic-90] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:03.856 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:23.850 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:04:43.861 [boundedElastic-89] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:03.846 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:23.848 [boundedElastic-92] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:05:43.830 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:03.847 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:23.828 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:06:43.839 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:03.831 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:23.847 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:07:43.847 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:03.851 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:23.859 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:08:43.872 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:03.831 [boundedElastic-100] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:23.855 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:09:43.841 [boundedElastic-101] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:03.823 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:23.841 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:10:43.830 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:03.841 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:23.854 [boundedElastic-83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:11:43.822 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:04.060 [boundedElastic-97] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:23.824 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:12:43.824 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:03.843 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:23.840 [boundedElastic-98] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:13:43.840 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:03.844 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:23.825 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:14:43.822 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:03.841 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:23.828 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:15:43.822 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:03.832 [boundedElastic-93] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:23.823 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:16:43.852 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:03.823 [boundedElastic-108] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:23.824 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:17:43.832 [boundedElastic-106] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:03.841 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:23.825 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:18:43.823 [boundedElastic-110] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:03.841 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:23.842 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:19:43.818 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:03.845 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:23.864 [boundedElastic-114] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:20:43.860 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:03.836 [boundedElastic-107] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:23.821 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:21:43.826 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:03.849 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:23.970 [boundedElastic-108] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:22:43.935 [boundedElastic-117] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:03.879 [boundedElastic-116] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:23.881 [boundedElastic-117] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:23:43.905 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:03.862 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:23.868 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:24:43.882 [boundedElastic-117] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:03.913 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:23.938 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:25:43.856 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:03.902 [boundedElastic-121] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:23.888 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:26:43.877 [boundedElastic-108] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:03.924 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:23.917 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:27:43.861 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:03.936 [boundedElastic-122] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:23.913 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:28:43.931 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:03.901 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:23.893 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:29:43.900 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:03.897 [boundedElastic-105] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:23.908 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:30:43.847 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:03.909 [boundedElastic-124] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:23.888 [boundedElastic-113] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:31:43.865 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:03.954 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:23.890 [boundedElastic-120] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:32:44.000 [boundedElastic-112] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:03.891 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:23.881 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:33:43.905 [boundedElastic-103] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:03.876 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:23.943 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:34:43.880 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:03.860 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:23.901 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:35:43.870 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:04.129 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:23.918 [boundedElastic-118] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:36:43.869 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:03.839 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:23.883 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:37:43.888 [boundedElastic-119] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:03.862 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:23.847 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:38:43.869 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:03.883 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:24.080 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:39:43.886 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:03.919 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:23.928 [boundedElastic-125] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:40:43.927 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:03.902 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:23.857 [boundedElastic-132] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:41:43.866 [boundedElastic-128] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:03.959 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:23.899 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:42:43.861 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:03.840 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:23.897 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:43:43.845 [boundedElastic-136] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:03.897 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:23.923 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:44:43.881 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:03.941 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:23.934 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:45:43.860 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:03.902 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:23.892 [boundedElastic-134] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:46:43.934 [boundedElastic-127] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:03.896 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:23.918 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:47:43.946 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:03.981 [boundedElastic-111] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:23.949 [boundedElastic-137] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:48:43.935 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:03.879 [boundedElastic-135] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:23.868 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:49:43.828 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:03.960 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:23.853 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:50:44.018 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:03.872 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:23.901 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:51:44.158 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:04.185 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:23.933 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:52:43.874 [boundedElastic-133] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:03.886 [boundedElastic-140] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:23.890 [boundedElastic-143] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:53:43.920 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:03.876 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:23.878 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:54:47.322 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:03.911 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:23.921 [boundedElastic-145] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:55:43.875 [boundedElastic-142] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:03.915 [boundedElastic-141] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:23.942 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:56:43.922 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:03.888 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:23.873 [boundedElastic-148] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:57:43.935 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:03.891 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:23.887 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:58:43.831 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:03.878 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:23.859 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +10:59:43.869 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:04.220 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:23.906 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:00:43.906 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:03.877 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:23.935 [boundedElastic-152] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:01:43.981 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:03.938 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:23.871 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:02:43.880 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:03.872 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:23.886 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:03:43.966 [boundedElastic-146] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:03.873 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:23.933 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:04:43.871 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:03.851 [boundedElastic-154] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:23.820 [boundedElastic-151] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:05:43.815 [boundedElastic-99] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:03.821 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:23.842 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:06:43.840 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:03.831 [boundedElastic-150] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:23.833 [boundedElastic-144] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:07:43.839 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:03.849 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:23.835 [boundedElastic-155] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:08:43.868 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:03.833 [boundedElastic-155] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:23.831 [boundedElastic-155] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:09:43.832 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:03.846 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:23.846 [boundedElastic-123] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:10:43.831 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:03.822 [boundedElastic-157] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:23.850 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:11:43.840 [boundedElastic-126] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:03.819 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:23.817 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:12:43.834 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:03.843 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:23.826 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:13:43.848 [boundedElastic-155] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:03.853 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:23.852 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:14:43.823 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:03.820 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:23.827 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:15:43.833 [boundedElastic-161] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:03.828 [boundedElastic-149] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:23.882 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:16:43.883 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:03.876 [boundedElastic-160] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:23.887 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:17:43.989 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:03.862 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:24.159 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:18:43.923 [boundedElastic-166] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:03.863 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:23.865 [boundedElastic-158] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:19:43.906 [boundedElastic-168] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:03.880 [boundedElastic-168] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:23.885 [boundedElastic-153] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:20:43.853 [boundedElastic-167] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:03.872 [boundedElastic-138] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:23.881 [boundedElastic-164] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:21:43.896 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:03.866 [boundedElastic-163] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:23.906 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:22:43.895 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:03.881 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:23.881 [boundedElastic-156] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:23:43.886 [boundedElastic-162] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +11:59:28.242 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:59:28.256 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:17:06.349 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:17:06.398 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:17:06.776 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:06.777 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:08.484 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:17:12.032 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +14:17:12.593 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +14:17:12.991 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:12.992 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:13.246 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:17:14.236 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:14.236 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:14.475 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +14:17:14.667 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +14:17:14.694 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 8.937 seconds (JVM running for 10.163) +14:17:14.701 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +14:17:14.702 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +14:17:14.704 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +14:17:15.007 [RMI TCP Connection(7)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:04.245 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:21:04.256 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:21:31.580 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:21:31.629 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:21:31.982 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:31.982 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:33.913 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:21:37.746 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +14:21:38.331 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +14:21:38.758 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:38.759 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:38.922 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:21:39.928 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:39.928 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:40.148 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +14:21:40.324 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +14:21:40.347 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 9.406 seconds (JVM running for 10.478) +14:21:40.352 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +14:21:40.353 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +14:21:40.355 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +14:21:40.745 [RMI TCP Connection(13)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:29:50.908 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:29:50.980 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:31:52.523 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:31:52.573 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:31:52.923 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:52.924 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:54.641 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:31:57.898 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +14:31:58.395 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +14:31:58.908 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:58.909 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:59.206 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:32:00.307 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:32:00.308 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:32:00.713 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +14:32:00.920 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +14:32:00.955 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 8.995 seconds (JVM running for 10.489) +14:32:00.960 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +14:32:00.961 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +14:32:00.964 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +14:32:01.532 [RMI TCP Connection(9)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:29.897 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:36:29.988 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:36:47.607 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:36:47.658 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:36:47.998 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:47.998 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:49.873 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:36:53.067 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +14:36:53.723 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +14:36:54.198 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:54.200 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:54.552 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +14:36:55.400 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:55.400 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:55.717 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +14:36:55.917 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +14:36:55.946 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 8.941 seconds (JVM running for 10.094) +14:36:55.952 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +14:36:55.953 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +14:36:55.955 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +14:36:56.368 [RMI TCP Connection(5)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:27.074 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:53:45.074 [boundedElastic-85] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:05.077 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:25.052 [boundedElastic-77] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:54:45.086 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:05.071 [boundedElastic-76] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:25.085 [boundedElastic-69] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:55:45.053 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:05.064 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:25.057 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:56:45.090 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:05.281 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:25.069 [boundedElastic-86] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:57:45.101 [boundedElastic-81] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:05.073 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:25.097 [boundedElastic-78] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:58:45.085 [boundedElastic-79] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:05.066 [boundedElastic-84] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:25.084 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +15:59:45.051 [boundedElastic-65] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:05.115 [boundedElastic-82] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:25.089 [boundedElastic-87] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:00:36.867 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:00:36.878 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:05:24.146 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +16:05:24.199 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +16:05:24.586 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:24.586 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:26.243 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +16:05:29.291 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +16:05:29.722 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +16:05:30.107 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:30.107 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:30.335 [main] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:31.303 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:31.304 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:31.550 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +16:05:31.753 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +16:05:31.787 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 8.144 seconds (JVM running for 9.361) +16:05:31.792 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +16:05:31.793 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +16:05:31.795 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +16:05:31.913 [RMI TCP Connection(9)-10.1.123.83] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:32.363 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:05:45.183 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:04.734 [boundedElastic-5] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:24.706 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:06:44.716 [boundedElastic-6] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:04.719 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:24.717 [boundedElastic-10] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:07:44.723 [boundedElastic-6] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:04.706 [boundedElastic-1] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:24.722 [boundedElastic-12] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:08:44.757 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:04.723 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:24.717 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:09:44.716 [boundedElastic-6] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:04.713 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:24.718 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:10:44.730 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:04.716 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:24.709 [boundedElastic-16] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:11:44.709 [boundedElastic-13] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:04.712 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:24.725 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:12:44.738 [boundedElastic-14] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:04.721 [boundedElastic-16] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:24.730 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:13:44.721 [boundedElastic-8] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:04.738 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:24.943 [boundedElastic-18] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:14:44.723 [boundedElastic-18] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:04.748 [boundedElastic-15] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:24.739 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:15:44.759 [boundedElastic-19] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:04.746 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:24.736 [boundedElastic-17] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:16:44.732 [boundedElastic-16] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:04.714 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:24.719 [boundedElastic-19] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:17:44.768 [boundedElastic-17] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:04.719 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:24.733 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:18:44.722 [boundedElastic-4] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:04.729 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:24.709 [boundedElastic-7] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:19:44.713 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:04.725 [boundedElastic-22] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:24.714 [boundedElastic-18] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:20:44.730 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:04.764 [boundedElastic-11] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:24.719 [boundedElastic-21] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +16:21:44.718 [boundedElastic-23] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:09:00.490 [boundedElastic-194] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:09:18.223 [boundedElastic-215] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:09:38.223 [boundedElastic-209] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:09:58.237 [boundedElastic-194] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:10:18.220 [boundedElastic-210] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:10:38.243 [boundedElastic-196] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:10:58.231 [boundedElastic-220] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:11:18.217 [boundedElastic-211] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:11:38.221 [boundedElastic-210] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:11:58.236 [boundedElastic-221] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:12:18.233 [boundedElastic-210] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:12:38.212 [boundedElastic-221] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:12:58.242 [boundedElastic-210] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:13:18.205 [boundedElastic-217] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:13:38.229 [boundedElastic-217] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:13:58.247 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:14:18.211 [boundedElastic-223] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:14:38.217 [boundedElastic-210] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:14:58.218 [boundedElastic-224] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:15:18.231 [boundedElastic-225] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:15:38.223 [boundedElastic-223] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:15:58.217 [boundedElastic-222] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:16:18.233 [boundedElastic-222] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:16:38.225 [boundedElastic-222] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:16:58.206 [boundedElastic-228] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:17:18.216 [boundedElastic-224] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:17:38.218 [boundedElastic-223] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:17:58.230 [boundedElastic-220] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:18:18.220 [boundedElastic-226] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:18:38.211 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:18:58.232 [boundedElastic-229] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:19:18.262 [boundedElastic-230] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:19:38.222 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:19:58.226 [boundedElastic-226] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:20:18.235 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:20:38.223 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:20:58.252 [boundedElastic-229] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:21:18.223 [boundedElastic-228] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:21:38.246 [boundedElastic-228] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:21:58.212 [boundedElastic-232] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:22:18.882 [boundedElastic-232] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:22:38.220 [boundedElastic-230] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:22:58.221 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:23:18.220 [boundedElastic-224] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:23:38.224 [boundedElastic-219] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:23:58.214 [boundedElastic-235] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:24:18.264 [boundedElastic-232] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:24:38.229 [boundedElastic-214] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:24:58.214 [boundedElastic-235] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:25:18.226 [boundedElastic-230] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:25:38.226 [boundedElastic-230] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:25:58.205 [boundedElastic-228] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:26:18.205 [boundedElastic-214] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:26:38.219 [boundedElastic-226] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:26:58.232 [boundedElastic-230] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:27:18.221 [boundedElastic-231] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:27:38.224 [boundedElastic-234] INFO c.a.c.s.d.c.SentinelConverter - [convert,79] - converter can not convert rules because source is empty +20:27:46.115 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +20:27:46.127 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gateway/info.log b/logs/muyu-gateway/info.log new file mode 100644 index 0000000..28af42e --- /dev/null +++ b/logs/muyu-gateway/info.log @@ -0,0 +1,19 @@ +10:05:10.170 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:05:10.230 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:05:10.928 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:10.928 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:13.983 [main] INFO c.r.g.MuYuGatewayApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:05:17.482 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayFilter,144] - [Sentinel SpringCloudGateway] register SentinelGatewayFilter with order: -2147483648 +10:05:18.267 [main] INFO c.a.c.s.g.s.SentinelSCGAutoConfiguration - [sentinelGatewayBlockExceptionHandler,134] - [Sentinel SpringCloudGateway] register SentinelGatewayBlockExceptionHandler +10:05:18.926 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:18.926 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:20.252 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:20.252 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:20.477 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gateway 10.1.123.83:8080 register finished +10:05:20.691 [main] INFO c.a.c.n.d.GatewayLocatorHeartBeatPublisher - [start,64] - Start nacos gateway locator heartBeat task scheduler. +10:05:20.722 [main] INFO c.r.g.MuYuGatewayApplication - [logStarted,61] - Started MuYuGatewayApplication in 11.129 seconds (JVM running for 12.163) +10:05:20.727 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway, group=DEFAULT_GROUP +10:05:20.728 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway.yml, group=DEFAULT_GROUP +10:05:20.731 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gateway-dev.yml, group=DEFAULT_GROUP +17:29:55.349 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +17:29:55.366 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/logs/muyu-gen/error.log b/logs/muyu-gen/error.log new file mode 100644 index 0000000..e69de29 diff --git a/logs/muyu-gen/info.log b/logs/muyu-gen/info.log new file mode 100644 index 0000000..01dff7c --- /dev/null +++ b/logs/muyu-gen/info.log @@ -0,0 +1,27 @@ +14:05:10.212 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:05:10.289 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:05:10.627 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:10.627 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:12.097 [main] INFO c.r.g.MuYuGenApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:05:14.359 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9202"] +14:05:14.362 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:05:14.363 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:05:14.495 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:05:15.848 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:05:18.096 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9202"] +14:05:18.125 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:18.125 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:18.309 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-gen 10.1.123.83:9202 register finished +14:05:18.801 [main] INFO c.r.g.MuYuGenApplication - [logStarted,61] - Started MuYuGenApplication in 9.172 seconds (JVM running for 10.46) +14:05:18.818 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gen, group=DEFAULT_GROUP +14:05:18.819 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gen-dev.yml, group=DEFAULT_GROUP +14:05:18.819 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-gen.yml, group=DEFAULT_GROUP +14:05:18.991 [RMI TCP Connection(8)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:05:19.025 [RMI TCP Connection(9)-10.1.123.83] INFO c.z.h.HikariDataSource - [getConnection,110] - HikariPool-1 - Starting... +14:05:19.860 [RMI TCP Connection(9)-10.1.123.83] INFO c.z.h.HikariDataSource - [getConnection,123] - HikariPool-1 - Start completed. +14:58:22.188 [lettuce-eventExecutorLoop-1-1] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:58:22.423 [lettuce-nioEventLoop-4-2] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +16:47:16.671 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.688 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:47:16.836 [SpringApplicationShutdownHook] INFO c.z.h.HikariDataSource - [close,350] - HikariPool-1 - Shutdown initiated... +16:47:16.840 [SpringApplicationShutdownHook] INFO c.z.h.HikariDataSource - [close,352] - HikariPool-1 - Shutdown completed. diff --git a/logs/muyu-job/error.log b/logs/muyu-job/error.log new file mode 100644 index 0000000..e69de29 diff --git a/logs/muyu-job/info.log b/logs/muyu-job/info.log new file mode 100644 index 0000000..8c33e5e --- /dev/null +++ b/logs/muyu-job/info.log @@ -0,0 +1,45 @@ +14:05:22.596 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:05:22.659 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:05:22.990 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:22.991 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:24.915 [main] INFO c.r.j.MuYuJobApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:05:27.469 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9203"] +14:05:27.471 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:05:27.472 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:05:27.630 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:05:27.952 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1220] - Using default implementation for ThreadExecutor +14:05:27.961 [main] INFO o.q.c.SchedulerSignalerImpl - [,61] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl +14:05:27.962 [main] INFO o.q.c.QuartzScheduler - [,229] - Quartz Scheduler v.2.3.2 created. +14:05:27.962 [main] INFO o.q.s.RAMJobStore - [initialize,155] - RAMJobStore initialized. +14:05:27.963 [main] INFO o.q.c.QuartzScheduler - [initialize,294] - Scheduler meta-data: Quartz Scheduler (v2.3.2) 'quartzScheduler' with instanceId 'NON_CLUSTERED' + Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. + NOT STARTED. + Currently in standby mode. + Number of jobs executed: 0 + Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. + Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. + +14:05:27.963 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1374] - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance. +14:05:27.964 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1378] - Quartz scheduler version: 2.3.2 +14:05:27.964 [main] INFO o.q.c.QuartzScheduler - [setJobFactory,2293] - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@662d3e85 +14:05:28.369 [main] INFO c.z.h.HikariDataSource - [getConnection,110] - HikariPool-1 - Starting... +14:05:28.748 [main] INFO c.z.h.HikariDataSource - [getConnection,123] - HikariPool-1 - Start completed. +14:05:29.243 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:05:31.745 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9203"] +14:05:31.769 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:31.770 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:31.987 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-job 10.1.123.83:9203 register finished +14:05:32.916 [main] INFO o.q.c.QuartzScheduler - [start,547] - Scheduler quartzScheduler_$_NON_CLUSTERED started. +14:05:32.940 [main] INFO c.r.j.MuYuJobApplication - [logStarted,61] - Started MuYuJobApplication in 10.882 seconds (JVM running for 12.016) +14:05:32.969 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-job, group=DEFAULT_GROUP +14:05:32.971 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-job-dev.yml, group=DEFAULT_GROUP +14:05:32.972 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-job.yml, group=DEFAULT_GROUP +14:05:33.113 [RMI TCP Connection(17)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:47:16.694 [SpringApplicationShutdownHook] INFO o.q.c.QuartzScheduler - [standby,585] - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +16:47:16.744 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.759 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:47:16.808 [SpringApplicationShutdownHook] INFO o.q.c.QuartzScheduler - [shutdown,666] - Scheduler quartzScheduler_$_NON_CLUSTERED shutting down. +16:47:16.808 [SpringApplicationShutdownHook] INFO o.q.c.QuartzScheduler - [standby,585] - Scheduler quartzScheduler_$_NON_CLUSTERED paused. +16:47:16.808 [SpringApplicationShutdownHook] INFO o.q.c.QuartzScheduler - [shutdown,740] - Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete. +16:47:16.809 [SpringApplicationShutdownHook] INFO c.z.h.HikariDataSource - [close,350] - HikariPool-1 - Shutdown initiated... +16:47:16.813 [SpringApplicationShutdownHook] INFO c.z.h.HikariDataSource - [close,352] - HikariPool-1 - Shutdown completed. diff --git a/logs/muyu-product/error.2024-03-21.log b/logs/muyu-product/error.2024-03-21.log new file mode 100644 index 0000000..4b8419a --- /dev/null +++ b/logs/muyu-product/error.2024-03-21.log @@ -0,0 +1,8 @@ +21:13:58.273 [http-nio-9302-exec-1] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:58.306 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/productSku/list',权限码校验失败'product:productSku:list' +21:13:59.564 [http-nio-9302-exec-4] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:59.569 [http-nio-9302-exec-5] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:59.572 [http-nio-9302-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/brand/list',权限码校验失败'product:info:list' +21:13:59.573 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/productInfo/list',权限码校验失败'product:productInfo:list' +21:13:59.573 [http-nio-9302-exec-7] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:59.576 [http-nio-9302-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/category/list',权限码校验失败'product:category:list' diff --git a/logs/muyu-product/error.2024-03-23.log b/logs/muyu-product/error.2024-03-23.log new file mode 100644 index 0000000..960278d --- /dev/null +++ b/logs/muyu-product/error.2024-03-23.log @@ -0,0 +1,927 @@ +08:41:46.691 [http-nio-9302-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10003, pstmt-20120} execute error. INSERT INTO product_attribute_info ( product_id, + +attribute_id ) VALUES ( ?, + +? ) +java.sql.SQLException: Field 'value' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) + at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) + at jdk.proxy3/jdk.proxy3.$Proxy264.execute(Unknown Source) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy262.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy166.insert(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:63) + at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductAttributeInfoServiceImpl$$EnhancerBySpringCGLIB$$b39a1ab6.save() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$updateProductInfoById$10(ProductInfoServiceImpl.java:290) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.updateProductInfoById(ProductInfoServiceImpl.java:290) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.updateProductInfoById() + at com.ruoyi.product.controller.ProductInfoController.edit(ProductInfoController.java:99) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) + at com.ruoyi.common.security.aspect.PreAuthorizeAspect.around(PreAuthorizeAspect.java:60) + at jdk.internal.reflect.GeneratedMethodAccessor156.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) + at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$c3650758.edit() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +08:41:46.790 [http-nio-9302-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/21',发生未知异常. +org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: java.sql.SQLException: Field 'value' doesn't have a default value +### The error may exist in com/ruoyi/product/mapper/ProductAttributeInfoMapper.java (best guess) +### The error may involve com.ruoyi.product.mapper.ProductAttributeInfoMapper.insert-Inline +### The error occurred while setting parameters +### SQL: INSERT INTO product_attribute_info ( product_id, attribute_id ) VALUES ( ?, ? ) +### Cause: java.sql.SQLException: Field 'value' doesn't have a default value +; Field 'value' doesn't have a default value; nested exception is java.sql.SQLException: Field 'value' doesn't have a default value + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) + at jdk.proxy2/jdk.proxy2.$Proxy138.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy166.insert(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:63) + at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductAttributeInfoServiceImpl$$EnhancerBySpringCGLIB$$b39a1ab6.save() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$updateProductInfoById$10(ProductInfoServiceImpl.java:290) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.updateProductInfoById(ProductInfoServiceImpl.java:290) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.updateProductInfoById() + at com.ruoyi.product.controller.ProductInfoController.edit(ProductInfoController.java:99) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) + at com.ruoyi.common.security.aspect.PreAuthorizeAspect.around(PreAuthorizeAspect.java:60) + at jdk.internal.reflect.GeneratedMethodAccessor156.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) + at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$c3650758.edit() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.sql.SQLException: Field 'value' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) + at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) + at jdk.proxy3/jdk.proxy3.$Proxy264.execute(Unknown Source) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy262.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + ... 112 common frames omitted +08:42:33.085 [http-nio-9302-exec-4] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10004, pstmt-20123} execute error. INSERT INTO product_attribute_info ( product_id, + +attribute_id ) VALUES ( ?, + +? ) +java.sql.SQLException: Field 'value' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) + at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) + at jdk.proxy3/jdk.proxy3.$Proxy264.execute(Unknown Source) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy262.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy166.insert(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:63) + at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductAttributeInfoServiceImpl$$EnhancerBySpringCGLIB$$b39a1ab6.save() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$updateProductInfoById$10(ProductInfoServiceImpl.java:290) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.updateProductInfoById(ProductInfoServiceImpl.java:290) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.updateProductInfoById() + at com.ruoyi.product.controller.ProductInfoController.edit(ProductInfoController.java:99) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) + at com.ruoyi.common.security.aspect.PreAuthorizeAspect.around(PreAuthorizeAspect.java:60) + at jdk.internal.reflect.GeneratedMethodAccessor156.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) + at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$c3650758.edit() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +08:42:33.123 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/21',发生未知异常. +org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: java.sql.SQLException: Field 'value' doesn't have a default value +### The error may exist in com/ruoyi/product/mapper/ProductAttributeInfoMapper.java (best guess) +### The error may involve com.ruoyi.product.mapper.ProductAttributeInfoMapper.insert-Inline +### The error occurred while setting parameters +### SQL: INSERT INTO product_attribute_info ( product_id, attribute_id ) VALUES ( ?, ? ) +### Cause: java.sql.SQLException: Field 'value' doesn't have a default value +; Field 'value' doesn't have a default value; nested exception is java.sql.SQLException: Field 'value' doesn't have a default value + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) + at jdk.proxy2/jdk.proxy2.$Proxy138.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy166.insert(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:63) + at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductAttributeInfoServiceImpl$$EnhancerBySpringCGLIB$$b39a1ab6.save() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$updateProductInfoById$10(ProductInfoServiceImpl.java:290) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.updateProductInfoById(ProductInfoServiceImpl.java:290) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.updateProductInfoById() + at com.ruoyi.product.controller.ProductInfoController.edit(ProductInfoController.java:99) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) + at com.ruoyi.common.security.aspect.PreAuthorizeAspect.around(PreAuthorizeAspect.java:60) + at jdk.internal.reflect.GeneratedMethodAccessor156.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) + at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$c3650758.edit() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.sql.SQLException: Field 'value' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) + at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) + at jdk.proxy3/jdk.proxy3.$Proxy264.execute(Unknown Source) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy262.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + ... 112 common frames omitted +08:45:03.123 [http-nio-9302-exec-4] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10005, pstmt-20126} execute error. INSERT INTO product_attribute_info ( product_id, + +attribute_id ) VALUES ( ?, + +? ) +java.sql.SQLException: Field 'value' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) + at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) + at jdk.proxy3/jdk.proxy3.$Proxy264.execute(Unknown Source) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy262.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy166.insert(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:63) + at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductAttributeInfoServiceImpl$$EnhancerBySpringCGLIB$$b39a1ab6.save() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$updateProductInfoById$10(ProductInfoServiceImpl.java:290) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.updateProductInfoById(ProductInfoServiceImpl.java:290) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.updateProductInfoById() + at com.ruoyi.product.controller.ProductInfoController.edit(ProductInfoController.java:99) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) + at com.ruoyi.common.security.aspect.PreAuthorizeAspect.around(PreAuthorizeAspect.java:60) + at jdk.internal.reflect.GeneratedMethodAccessor156.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) + at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$c3650758.edit() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +08:45:03.148 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/21',发生未知异常. +org.springframework.dao.DataIntegrityViolationException: +### Error updating database. Cause: java.sql.SQLException: Field 'value' doesn't have a default value +### The error may exist in com/ruoyi/product/mapper/ProductAttributeInfoMapper.java (best guess) +### The error may involve com.ruoyi.product.mapper.ProductAttributeInfoMapper.insert-Inline +### The error occurred while setting parameters +### SQL: INSERT INTO product_attribute_info ( product_id, attribute_id ) VALUES ( ?, ? ) +### Cause: java.sql.SQLException: Field 'value' doesn't have a default value +; Field 'value' doesn't have a default value; nested exception is java.sql.SQLException: Field 'value' doesn't have a default value + at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251) + at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) + at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) + at jdk.proxy2/jdk.proxy2.$Proxy138.insert(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy166.insert(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:63) + at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductAttributeInfoServiceImpl$$EnhancerBySpringCGLIB$$b39a1ab6.save() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$updateProductInfoById$10(ProductInfoServiceImpl.java:290) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.updateProductInfoById(ProductInfoServiceImpl.java:290) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.updateProductInfoById() + at com.ruoyi.product.controller.ProductInfoController.edit(ProductInfoController.java:99) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) + at com.ruoyi.common.security.aspect.PreAuthorizeAspect.around(PreAuthorizeAspect.java:60) + at jdk.internal.reflect.GeneratedMethodAccessor156.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) + at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) + at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:64) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:57) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$c3650758.edit() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.sql.SQLException: Field 'value' doesn't have a default value + at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) + at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) + at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) + at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) + at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) + at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) + at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) + at jdk.proxy3/jdk.proxy3.$Proxy264.execute(Unknown Source) + at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) + at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) + at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) + at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) + at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) + at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) + at jdk.proxy2/jdk.proxy2.$Proxy262.update(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) + at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) + at jdk.internal.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + ... 112 common frames omitted diff --git a/logs/muyu-product/error.2024-03-24.log b/logs/muyu-product/error.2024-03-24.log new file mode 100644 index 0000000..97e53c9 --- /dev/null +++ b/logs/muyu-product/error.2024-03-24.log @@ -0,0 +1,2738 @@ +10:53:28.132 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +The dependencies of some of the beans in the application context form a cycle: + + productInfoController (field private com.ruoyi.product.service.ProductInfoService com.ruoyi.product.controller.ProductInfoController.productInfoService) +┌─────┐ +| productInfoServiceImpl (field private com.ruoyi.product.service.ProductInfoService com.ruoyi.product.service.impl.ProductInfoServiceImpl.productInfoService) +└─────┘ + + +Action: + +Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. + +10:54:55.287 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +The dependencies of some of the beans in the application context form a cycle: + + productInfoController (field private com.ruoyi.product.service.ProductInfoService com.ruoyi.product.controller.ProductInfoController.productInfoService) +┌─────┐ +| productInfoServiceImpl (field private com.ruoyi.product.service.ProductInfoService com.ruoyi.product.service.impl.ProductInfoServiceImpl.productInfoService) +└─────┘ + + +Action: + +Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. + +10:55:50.893 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/productInfo/GetProductDetail/21',权限码校验失败'product:productInfo:query' +10:58:15.858 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/productInfo/GetProductDetail/21',权限码校验失败'product:productInfo:query' +10:59:17.202 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +java.lang.UnsupportedOperationException: null + at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) + at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:345) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:01:42.588 [http-nio-9302-exec-3] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +java.lang.UnsupportedOperationException: null + at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) + at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:345) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:01:42.588 [http-nio-9302-exec-6] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 70522 milliseconds, 649700 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@208ed87c[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@48a8eac7, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@54b98128, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@4297484b}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 70522 milliseconds, 649700 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@208ed87c[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@48a8eac7, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@54b98128, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@4297484b}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 87 common frames omitted +11:04:26.289 [http-nio-9302-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +java.lang.UnsupportedOperationException: null + at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) + at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:345) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:05:39.264 [http-nio-9302-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +java.lang.UnsupportedOperationException: null + at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) + at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:346) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:07:19.364 [http-nio-9302-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.product.domain.ProductSku.getPrice()" because "byId" is null + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$16(ProductInfoServiceImpl.java:370) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:373) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$6b01d71c.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:09:00.056 [http-nio-9302-exec-4] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 1767 milliseconds, 969100 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@633bbd7c[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@f5f33f1, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@74cdbb52, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@3cf0491}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 1767 milliseconds, 969100 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@633bbd7c[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@f5f33f1, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@74cdbb52, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@3cf0491}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 87 common frames omitted +11:09:04.552 [http-nio-9302-exec-6] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:UNHEALTHY + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:09:04.552 [http-nio-9302-exec-8] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:UNHEALTHY + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:09:04.552 [http-nio-9302-exec-5] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:UNHEALTHY + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:09:21.126 [http-nio-9302-exec-9] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:UNHEALTHY + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:09:21.126 [http-nio-9302-exec-3] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:UNHEALTHY + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +11:10:08.246 [http-nio-9302-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.product.domain.ProductSku.getPrice()" because "byId" is null + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$16(ProductInfoServiceImpl.java:370) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:373) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$6b01d71c.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +12:30:46.260 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 + at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559) + at java.base/java.util.LinkedList.get(LinkedList.java:480) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:386) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$6b01d71c.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +12:30:56.360 [http-nio-9302-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 + at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559) + at java.base/java.util.LinkedList.get(LinkedList.java:480) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:386) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$6b01d71c.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +14:06:47.110 [http-nio-9302-exec-2] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleMethodArgumentTypeMismatchException,88] - 请求参数类型不匹配'/productInfo/GetProductDetail/:id',发生系统异常. +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: ":id" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.lang.NumberFormatException: For input string: ":id" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:214) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:729) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:125) + ... 51 common frames omitted +14:07:12.409 [http-nio-9302-exec-10] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleMethodArgumentTypeMismatchException,88] - 请求参数类型不匹配'/productInfo/GetProductDetail/:id',发生系统异常. +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: ":id" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.lang.NumberFormatException: For input string: ":id" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:214) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:729) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:125) + ... 51 common frames omitted +14:58:23.239 [http-nio-9302-exec-1] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10002, stmt-20034} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,105,618 milliseconds ago. The last packet sent successfully to the server was 3,105,640 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) + at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor202.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor186.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,105,618 milliseconds ago. The last packet sent successfully to the server was 3,105,640 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 101 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) + at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) + at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) + at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) + at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) + at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) + at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455) + at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 107 common frames omitted +14:58:23.452 [http-nio-9302-exec-1] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10001, stmt-20035} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,106,013 milliseconds ago. The last packet sent successfully to the server was 3,106,022 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) + at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor202.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor186.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,106,013 milliseconds ago. The last packet sent successfully to the server was 3,106,022 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 101 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) + at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) + at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) + at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) + at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) + at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) + at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455) + at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 107 common frames omitted +15:50:12.002 [http-nio-9302-exec-3] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/21',发生未知异常. +org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: java.net.SocketException: Connection reset + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:277) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1085) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$4(LettuceConnection.java:938) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceKeyCommands.exists(LettuceKeyCommands.java:79) + at org.springframework.data.redis.connection.DefaultedRedisConnection.exists(DefaultedRedisConnection.java:81) + at org.springframework.data.redis.connection.DefaultStringRedisConnection.exists(DefaultStringRedisConnection.java:357) + at org.springframework.data.redis.core.RedisTemplate.lambda$hasKey$7(RedisTemplate.java:782) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191) + at org.springframework.data.redis.core.RedisTemplate.hasKey(RedisTemplate.java:782) + at com.ruoyi.product.service.impl.CategoryServiceImpl.getCategoryInfoById(CategoryServiceImpl.java:248) + at com.ruoyi.product.service.impl.CategoryServiceImpl$$FastClassBySpringCGLIB$$c7eb9700.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.CategoryServiceImpl$$EnhancerBySpringCGLIB$$81c34cb4.getCategoryInfoById() + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$14(ProductInfoServiceImpl.java:345) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:346) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9bbaede1.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$1bdaf3af.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: io.lettuce.core.RedisException: java.net.SocketException: Connection reset + at io.lettuce.core.internal.Exceptions.bubble(Exceptions.java:83) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:250) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1083) + ... 99 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) + at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) + at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:256) + at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) + at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + ... 1 common frames omitted +16:33:20.018 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/productInfo/1',权限码校验失败'product:productInfo:query' +16:33:25.860 [http-nio-9302-exec-10] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/1',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.product.domain.ProductInfo.getMasterType()" because "infoById" is null + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:341) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9bbaede1.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$1bdaf3af.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +16:34:07.744 [http-nio-9302-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/2',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.product.domain.ProductInfo.getMasterType()" because "infoById" is null + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:341) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9bbaede1.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$1bdaf3af.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +16:34:47.287 [http-nio-9302-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/3',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.product.domain.ProductInfo.getMasterType()" because "infoById" is null + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:341) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9bbaede1.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$1bdaf3af.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +16:34:55.674 [http-nio-9302-exec-8] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/3',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.product.domain.ProductInfo.getMasterType()" because "infoById" is null + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:341) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9bbaede1.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:91) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$1bdaf3af.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +18:22:45.534 [main] ERROR c.a.d.p.DruidDataSource - [init,929] - init datasource error, url: jdbc:mysql://43.142.44.217:3306/project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925) + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:85) + at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70) + at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48) + at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47) + at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42) + at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:225) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1492) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:204) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:98) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:262) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:236) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4936) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.product.MuYuProductApplication.main(MuYuProductApplication.java:20) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 121 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 124 common frames omitted +18:22:45.540 [main] ERROR c.a.d.p.DruidDataSource - [init,971] - {dataSource-1} init error +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925) + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:85) + at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70) + at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48) + at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47) + at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42) + at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:225) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1492) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:204) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:98) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:262) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:236) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4936) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.product.MuYuProductApplication.main(MuYuProductApplication.java:20) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 121 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 124 common frames omitted +18:22:45.542 [main] ERROR o.s.b.w.e.t.TomcatStarter - [onStartup,61] - Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error +18:22:45.542 [Druid-ConnectionPool-Create-1708315596] ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException, url: jdbc:mysql://43.142.44.217:3306/project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 12 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 15 common frames omitted +18:22:45.544 [Druid-ConnectionPool-Create-1708315596] ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException, url: jdbc:mysql://43.142.44.217:3306/project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 12 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 15 common frames omitted +18:22:45.616 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:165) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.product.MuYuProductApplication.main(MuYuProductApplication.java:20) +Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + ... 8 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:204) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:98) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:262) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:236) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4936) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + ... 13 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + ... 55 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + ... 65 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1492) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + ... 87 common frames omitted +Caused by: com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:87) + at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70) + at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48) + at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47) + at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42) + at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:225) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) + ... 101 common frames omitted +Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925) + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:85) + ... 108 common frames omitted +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 121 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 124 common frames omitted +18:54:45.012 [http-nio-9302-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleNotPermissionException,38] - 请求地址'/productInfo/17',权限码校验失败'product:productInfo:query' diff --git a/logs/muyu-product/error.2024-03-25.log b/logs/muyu-product/error.2024-03-25.log new file mode 100644 index 0000000..05670e5 --- /dev/null +++ b/logs/muyu-product/error.2024-03-25.log @@ -0,0 +1,660 @@ +09:43:01.709 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleMethodArgumentTypeMismatchException,88] - 请求参数类型不匹配'/productInfo/GetProductDetail/:id',发生系统异常. +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: ":id" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.lang.NumberFormatException: For input string: ":id" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:214) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:729) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:125) + ... 51 common frames omitted +09:43:11.746 [http-nio-9302-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.UnsupportedOperationException: null + at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) + at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:436) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$f867fe1a.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:93) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$f91f0c79.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +09:44:37.258 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.StringIndexOutOfBoundsException: begin 1, end 0, length 0 + at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4601) + at java.base/java.lang.String.substring(String.java:2704) + at java.base/java.lang.String.substring(String.java:2677) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$20(ProductInfoServiceImpl.java:479) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:483) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:93) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +09:46:27.489 [http-nio-9302-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.StringIndexOutOfBoundsException: begin 1, end 0, length 0 + at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4601) + at java.base/java.lang.String.substring(String.java:2704) + at java.base/java.lang.String.substring(String.java:2677) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$20(ProductInfoServiceImpl.java:479) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:483) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:93) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +09:49:30.953 [http-nio-9302-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.StringIndexOutOfBoundsException: begin 1, end 0, length 0 + at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4601) + at java.base/java.lang.String.substring(String.java:2704) + at java.base/java.lang.String.substring(String.java:2677) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$20(ProductInfoServiceImpl.java:479) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:483) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:93) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +09:49:30.958 [http-nio-9302-exec-6] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.StringIndexOutOfBoundsException: begin 1, end 0, length 0] with root cause +java.lang.StringIndexOutOfBoundsException: begin 1, end 0, length 0 + at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4601) + at java.base/java.lang.String.substring(String.java:2704) + at java.base/java.lang.String.substring(String.java:2677) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$20(ProductInfoServiceImpl.java:479) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:483) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:93) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +09:50:56.114 [http-nio-9302-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductDetail/23',发生未知异常. +java.lang.StringIndexOutOfBoundsException: begin 1, end 0, length 0 + at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4601) + at java.base/java.lang.String.substring(String.java:2704) + at java.base/java.lang.String.substring(String.java:2677) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductDetail$20(ProductInfoServiceImpl.java:479) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:483) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:93) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +10:03:22.567 [http-nio-9302-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleException,108] - 请求地址'/productInfo/GetProductDetail/23',发生系统异常. +org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。 + at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309) + at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:271) + at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:120) + at java.base/java.io.FilterOutputStream.flush(FilterOutputStream.java:153) + at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1187) + at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1009) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:456) + at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:183) + at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。 + at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) + at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) + at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:132) + at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:97) + at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:53) + at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:136) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1431) + at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:775) + at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:739) + at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:723) + at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:566) + at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:157) + at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:220) + at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1246) + at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:398) + at org.apache.coyote.Response.action(Response.java:207) + at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305) + ... 58 common frames omitted diff --git a/logs/muyu-product/error.2024-03-26.log b/logs/muyu-product/error.2024-03-26.log new file mode 100644 index 0000000..9cf7ccd --- /dev/null +++ b/logs/muyu-product/error.2024-03-26.log @@ -0,0 +1,1290 @@ +10:00:38.529 [http-nio-9302-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleMethodArgumentTypeMismatchException,88] - 请求参数类型不匹配'/productInfo/GetProductList',发生系统异常. +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "GetProductList" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.lang.NumberFormatException: For input string: "GetProductList" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:214) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:729) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:125) + ... 51 common frames omitted +10:02:16.618 [http-nio-9302-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductList',发生未知异常. +java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 + at java.base/java.util.ImmutableCollections$ListN.get(ImmutableCollections.java:680) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductList$26(ProductInfoServiceImpl.java:477) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductList(ProductInfoServiceImpl.java:479) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductList() + at com.ruoyi.product.controller.ProductInfoController.getProductList(ProductInfoController.java:106) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductList() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +10:03:17.240 [http-nio-9302-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductList',发生未知异常. +java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 + at java.base/java.util.ImmutableCollections$ListN.get(ImmutableCollections.java:680) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductList$26(ProductInfoServiceImpl.java:477) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductList(ProductInfoServiceImpl.java:479) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductList() + at com.ruoyi.product.controller.ProductInfoController.getProductList(ProductInfoController.java:106) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductList() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +10:04:10.569 [http-nio-9302-exec-9] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 28678 milliseconds, 776000 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@fbaf107[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2048232a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@45d59ddf, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@240c2e0d}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 28678 milliseconds, 776000 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@fbaf107[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@2048232a, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@45d59ddf, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@240c2e0d}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 87 common frames omitted +10:04:10.572 [http-nio-9302-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProductList',发生未知异常. +java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 + at java.base/java.util.ImmutableCollections$ListN.get(ImmutableCollections.java:680) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.lambda$getProductList$26(ProductInfoServiceImpl.java:477) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductList(ProductInfoServiceImpl.java:479) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductList() + at com.ruoyi.product.controller.ProductInfoController.getProductList(ProductInfoController.java:106) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductList() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +14:33:31.747 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleMethodArgumentTypeMismatchException,88] - 请求参数类型不匹配'/productInfo/GetProductDetail/:id',发生系统异常. +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: ":id" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.lang.NumberFormatException: For input string: ":id" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:214) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:729) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:125) + ... 51 common frames omitted +14:36:10.219 [http-nio-9302-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10005, stmt-20016} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 142,517 milliseconds ago. The last packet sent successfully to the server was 143,098 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy262.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy168.selectById(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.getById(IService.java:292) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:414) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:94) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 142,517 milliseconds ago. The last packet sent successfully to the server was 143,098 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 123 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 129 common frames omitted +14:36:10.226 [http-nio-9302-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10004, stmt-20017} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 227,538 milliseconds ago. The last packet sent successfully to the server was 227,673 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy262.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy168.selectById(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.getById(IService.java:292) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:414) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:94) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 227,538 milliseconds ago. The last packet sent successfully to the server was 227,673 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 123 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 129 common frames omitted +14:36:10.230 [http-nio-9302-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10003, stmt-20018} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 229,847 milliseconds ago. The last packet sent successfully to the server was 230,000 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy262.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy168.selectById(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.getById(IService.java:292) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:414) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:94) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 229,847 milliseconds ago. The last packet sent successfully to the server was 230,000 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 123 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 129 common frames omitted +14:36:10.234 [http-nio-9302-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10002, stmt-20019} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 232,620 milliseconds ago. The last packet sent successfully to the server was 233,478 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy262.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy168.selectById(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.getById(IService.java:292) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:414) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:94) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 232,620 milliseconds ago. The last packet sent successfully to the server was 233,478 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 123 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 129 common frames omitted +14:36:10.240 [http-nio-9302-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10001, stmt-20020} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 235,435 milliseconds ago. The last packet sent successfully to the server was 235,568 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy262.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy138.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy168.selectById(Unknown Source) + at com.baomidou.mybatisplus.extension.service.IService.getById(IService.java:292) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl.getProductDetail(ProductInfoServiceImpl.java:414) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$FastClassBySpringCGLIB$$c86852ef.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) + at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704) + at com.ruoyi.product.service.impl.ProductInfoServiceImpl$$EnhancerBySpringCGLIB$$9b3fd215.getProductDetail() + at com.ruoyi.product.controller.ProductInfoController.getProductDetail(ProductInfoController.java:94) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$95ccbbbe.getProductDetail() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 235,435 milliseconds ago. The last packet sent successfully to the server was 235,568 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 123 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 129 common frames omitted diff --git a/logs/muyu-product/error.log b/logs/muyu-product/error.log new file mode 100644 index 0000000..47f9a1c --- /dev/null +++ b/logs/muyu-product/error.log @@ -0,0 +1,276 @@ +10:05:33.919 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field projectInfoCache in com.ruoyi.product.controller.ProductInfoController required a bean of type 'com.muyu.product.cache.ProjectInfoCache' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'com.muyu.product.cache.ProjectInfoCache' in your configuration. + +10:11:25.914 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field projectInfoCache in com.ruoyi.product.controller.ProductInfoController required a bean of type 'com.muyu.product.cache.ProjectInfoCache' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'com.muyu.product.cache.ProjectInfoCache' in your configuration. + +13:47:36.289 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field projectInfoCache in com.ruoyi.product.controller.ProductInfoController required a bean of type 'com.muyu.product.cache.ProjectInfoCache' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'com.muyu.product.cache.ProjectInfoCache' in your configuration. + +14:27:38.960 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - [report,40] - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field projectInfoCache in com.ruoyi.product.controller.ProductInfoController required a bean of type 'com.muyu.product.cache.ProjectInfoCache' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'com.muyu.product.cache.ProjectInfoCache' in your configuration. + +15:30:33.050 [http-nio-9302-exec-2] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProjectInfo/17',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.common.redis.service.RedisService.getCacheObject(String)" because "this.redisService" is null + at com.muyu.common.cache.abs.CacheAbs.get(CacheAbs.java:36) + at com.ruoyi.product.controller.ProductInfoController.getProjectInfo(ProductInfoController.java:60) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$8eb9bae6.getProjectInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +15:31:14.479 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProjectInfo/17',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.common.redis.service.RedisService.getCacheObject(String)" because "this.redisService" is null + at com.muyu.common.cache.abs.CacheAbs.get(CacheAbs.java:36) + at com.ruoyi.product.controller.ProductInfoController.getProjectInfo(ProductInfoController.java:60) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$8eb9bae6.getProjectInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +15:36:45.896 [http-nio-9302-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/productInfo/GetProjectInfo/17',发生未知异常. +java.lang.NullPointerException: Cannot invoke "com.ruoyi.common.redis.service.RedisService.getCacheObject(String)" because "this.redisService" is null + at com.muyu.common.cache.abs.CacheAbs.get(CacheAbs.java:36) + at com.ruoyi.product.controller.ProductInfoController.getProjectInfo(ProductInfoController.java:60) + at com.ruoyi.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$20383505.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$3aca08.getProjectInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) diff --git a/logs/muyu-product/info.2024-03-21.log b/logs/muyu-product/info.2024-03-21.log new file mode 100644 index 0000000..b49743d --- /dev/null +++ b/logs/muyu-product/info.2024-03-21.log @@ -0,0 +1,56 @@ +20:51:05.632 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:51:05.689 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:51:05.970 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:51:05.970 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:51:07.401 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:51:09.441 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +20:51:09.443 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:51:09.443 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:51:09.563 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:51:11.311 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +20:51:11.312 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +20:51:11.312 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +20:51:12.926 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +20:51:14.558 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +20:51:14.582 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:51:14.582 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:51:14.782 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +20:51:15.396 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.363 seconds (JVM running for 11.386) +20:51:15.414 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +20:51:15.414 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +20:51:15.416 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +20:51:15.921 [RMI TCP Connection(6)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:03:58.929 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:03:58.943 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:03:59.083 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +21:03:59.086 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +21:03:59.091 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +21:03:59.091 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +21:11:10.824 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +21:11:10.900 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +21:11:11.288 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:11:11.289 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:11:12.797 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +21:11:15.475 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +21:11:15.477 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +21:11:15.477 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +21:11:15.629 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +21:11:17.000 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +21:11:17.001 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +21:11:17.001 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +21:11:18.611 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +21:11:20.220 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +21:11:20.246 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:11:20.247 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:11:20.423 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +21:11:21.119 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.954 seconds (JVM running for 12.25) +21:11:21.135 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +21:11:21.136 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +21:11:21.138 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +21:11:21.599 [RMI TCP Connection(7)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:23:37.246 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:23:37.272 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:23:37.410 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +21:23:37.412 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +21:23:37.416 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +21:23:37.416 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-product/info.2024-03-22.log b/logs/muyu-product/info.2024-03-22.log new file mode 100644 index 0000000..10dfdf9 --- /dev/null +++ b/logs/muyu-product/info.2024-03-22.log @@ -0,0 +1,28 @@ +08:54:03.725 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:54:03.786 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:54:04.219 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:54:04.220 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:54:06.300 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:54:08.461 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +08:54:08.463 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:54:08.463 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:54:08.598 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:54:10.625 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +08:54:10.626 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +08:54:10.627 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +08:54:12.130 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:54:13.771 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +08:54:13.795 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:54:13.795 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:54:13.980 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +08:54:14.637 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 11.612 seconds (JVM running for 12.589) +08:54:14.657 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +08:54:14.657 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +08:54:14.661 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +08:54:15.030 [RMI TCP Connection(8)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:30:53.606 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:30:53.624 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:30:53.785 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:30:53.789 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:30:53.802 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:30:53.802 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-product/info.2024-03-23.log b/logs/muyu-product/info.2024-03-23.log new file mode 100644 index 0000000..543fa5c --- /dev/null +++ b/logs/muyu-product/info.2024-03-23.log @@ -0,0 +1,28 @@ +08:25:37.559 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:25:37.638 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:25:38.155 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:38.156 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:40.014 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:25:41.930 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +08:25:41.932 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:25:41.932 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:25:42.043 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:25:43.473 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +08:25:43.474 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +08:25:43.474 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +08:25:45.043 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:25:46.592 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +08:25:46.615 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:46.615 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:46.822 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +08:25:47.485 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.476 seconds (JVM running for 11.352) +08:25:47.500 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +08:25:47.500 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +08:25:47.502 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +08:25:47.541 [RMI TCP Connection(6)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +13:58:55.494 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +13:58:55.513 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +13:58:55.692 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +13:58:55.699 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +13:58:55.715 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +13:58:55.715 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-product/info.2024-03-24.log b/logs/muyu-product/info.2024-03-24.log new file mode 100644 index 0000000..33b447a --- /dev/null +++ b/logs/muyu-product/info.2024-03-24.log @@ -0,0 +1,658 @@ +09:06:31.455 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:06:31.533 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:06:31.912 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:31.912 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:33.567 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:06:36.647 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +09:06:36.649 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:06:36.650 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:06:36.776 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:06:38.029 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +09:06:38.030 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +09:06:38.030 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +09:06:40.184 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:06:42.165 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +09:06:42.197 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:42.197 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:42.367 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +09:06:43.204 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 12.65 seconds (JVM running for 13.528) +09:06:43.223 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +09:06:43.223 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +09:06:43.225 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +09:06:43.436 [RMI TCP Connection(10)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:51:36.373 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:51:36.402 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:51:36.604 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:51:36.611 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:51:36.621 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:51:36.621 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:53:21.148 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:53:21.210 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:53:21.528 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:53:21.528 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:53:23.034 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:53:25.291 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:53:25.293 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:53:25.293 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:53:25.415 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:53:26.673 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:53:26.674 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:53:26.675 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:53:28.073 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:53:28.076 [main] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:53:28.083 [main] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:53:28.083 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:53:28.084 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +10:54:47.774 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:54:47.876 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:54:48.355 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:54:48.356 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:54:50.213 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:54:52.570 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:54:52.572 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:54:52.573 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:54:52.720 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:54:53.907 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:54:53.908 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:54:53.908 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:54:55.230 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:54:55.232 [main] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:54:55.238 [main] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:54:55.238 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:54:55.239 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +10:55:12.411 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:55:12.462 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:55:12.761 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:55:12.762 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:55:14.831 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:55:17.451 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:55:17.452 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:55:17.452 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:55:17.565 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:55:18.721 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:55:18.721 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:55:18.722 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:55:20.398 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:55:22.116 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:55:22.155 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:55:22.156 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:55:22.332 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:55:23.024 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 11.167 seconds (JVM running for 11.967) +10:55:23.040 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:55:23.040 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:55:23.042 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +10:55:23.330 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:57:51.581 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:57:51.596 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:57:51.722 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:57:51.724 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:57:51.727 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:57:51.728 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:58:03.379 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:58:03.445 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:58:03.921 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:58:03.922 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:58:05.599 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:58:07.768 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:58:07.769 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:58:07.770 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:58:07.878 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:58:09.051 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:58:09.051 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:58:09.052 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:58:10.712 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:58:12.333 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:58:12.359 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:58:12.359 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:58:12.526 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:58:13.092 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:58:13.198 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.452 seconds (JVM running for 11.348) +10:58:13.215 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:58:13.216 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:58:13.217 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +10:58:52.592 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:58:52.607 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:58:52.736 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:58:52.739 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:58:52.744 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:58:52.744 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:59:04.926 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:59:05.034 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:59:05.485 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:59:05.486 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:59:07.019 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:59:09.156 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:59:09.158 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:59:09.158 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:59:09.265 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:59:10.431 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:59:10.432 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:59:10.432 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:59:12.120 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:59:13.886 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:59:13.909 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:59:13.909 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:59:14.080 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:59:14.117 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:59:14.789 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.741 seconds (JVM running for 11.611) +10:59:14.805 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:59:14.806 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:59:14.807 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:01:42.900 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:01:42.928 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:01:43.049 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:01:43.052 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:01:43.055 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:01:43.056 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:03:52.151 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:03:52.233 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:03:52.577 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:03:52.578 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:03:54.418 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:03:56.771 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:03:56.772 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:03:56.773 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:03:56.890 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:03:58.007 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:03:58.008 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:03:58.009 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:03:59.706 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:04:01.321 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:04:01.345 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:04:01.345 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:04:01.529 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:04:02.219 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.624 seconds (JVM running for 11.644) +11:04:02.236 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:04:02.236 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:04:02.237 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:04:02.658 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:04:58.815 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:04:58.829 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:04:58.958 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:04:58.961 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:04:58.964 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:04:58.964 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:05:12.073 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:05:12.249 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:05:12.718 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:05:12.719 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:05:14.134 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:05:16.374 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:05:16.376 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:05:16.376 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:05:16.504 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:05:17.718 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:05:17.720 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:05:17.720 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:05:19.477 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:05:21.124 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:05:21.148 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:05:21.148 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:05:21.323 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:05:22.029 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.924 seconds (JVM running for 11.951) +11:05:22.046 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:05:22.046 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:05:22.048 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:05:22.425 [RMI TCP Connection(8)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:06:52.857 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:06:52.868 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:06:52.993 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:06:52.996 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:06:52.999 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:06:53.000 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:07:05.403 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:07:05.600 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:07:06.048 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:07:06.049 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:07:07.542 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:07:09.620 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:07:09.622 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:07:09.622 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:07:09.757 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:07:10.938 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:07:10.940 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:07:10.940 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:07:12.648 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:07:14.381 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:07:14.411 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:07:14.411 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:07:14.600 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:07:15.327 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.836 seconds (JVM running for 11.879) +11:07:15.343 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:07:15.343 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:07:15.345 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:07:15.890 [RMI TCP Connection(8)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:10:40.457 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:10:40.472 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:10:40.607 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:10:40.610 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:10:40.614 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:10:40.614 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:10:53.071 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:10:53.129 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:10:53.445 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:10:53.445 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:10:55.615 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:10:58.076 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:10:58.080 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:10:58.080 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:10:58.273 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:10:59.462 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:10:59.463 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:10:59.463 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:11:01.232 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:11:03.117 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:11:03.143 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:11:03.143 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:11:03.318 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:11:04.014 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 11.483 seconds (JVM running for 12.597) +11:11:04.032 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:11:04.033 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:11:04.034 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:11:04.104 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:18:18.486 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:18:18.499 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:18:18.628 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:18:18.630 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:18:18.633 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:18:18.633 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:18:31.382 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:18:31.469 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:18:31.935 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:18:31.936 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:18:33.509 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:18:35.653 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:18:35.655 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:18:35.655 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:18:35.773 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:18:36.930 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:18:36.931 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:18:36.932 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:18:38.592 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:18:40.231 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:18:40.268 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:18:40.268 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:18:40.455 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:18:41.130 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.798 seconds (JVM running for 11.882) +11:18:41.148 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:18:41.149 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:18:41.151 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:18:41.220 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:19:37.274 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:19:37.398 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:19:37.532 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:19:37.535 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:19:37.539 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:19:37.539 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:19:45.338 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:19:45.390 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:19:45.671 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:19:45.672 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:19:46.916 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:19:49.073 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:19:49.074 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:19:49.075 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:19:49.184 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:19:50.306 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:19:50.308 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:19:50.308 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:19:51.960 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:19:53.571 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:19:53.595 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:19:53.595 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:19:53.758 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:19:54.110 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:19:54.531 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 9.732 seconds (JVM running for 10.817) +11:19:54.550 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:19:54.551 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:19:54.553 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:33:20.753 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:33:20.788 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:33:20.920 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:33:20.923 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:33:20.926 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:33:20.926 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:33:34.182 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:33:34.245 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:33:34.626 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:33:34.627 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:33:35.926 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:33:38.123 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:33:38.124 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:33:38.124 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:33:38.229 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:33:39.472 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:33:39.473 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:33:39.473 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:33:41.175 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:33:42.806 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:33:42.830 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:33:42.830 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:33:43.008 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:33:43.120 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:33:43.750 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.808 seconds (JVM running for 11.964) +11:33:43.768 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:33:43.769 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:33:43.771 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +12:08:01.414 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:08:01.426 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +12:08:01.550 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +12:08:01.552 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +12:08:01.557 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +12:08:01.557 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +12:08:09.147 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +12:08:09.294 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +12:08:09.679 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:08:09.679 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:08:10.978 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +12:08:13.111 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +12:08:13.112 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +12:08:13.112 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +12:08:13.221 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +12:08:14.441 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +12:08:14.442 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +12:08:14.442 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +12:08:16.073 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +12:08:17.685 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +12:08:17.714 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:08:17.715 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:08:17.885 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +12:08:18.589 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.011 seconds (JVM running for 10.975) +12:08:18.606 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +12:08:18.606 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +12:08:18.608 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +12:08:18.749 [RMI TCP Connection(1)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:12:16.291 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:12:16.326 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +12:12:16.459 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +12:12:16.461 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +12:12:16.466 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +12:12:16.466 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +12:12:28.627 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +12:12:28.689 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +12:12:28.982 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:12:28.983 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:12:30.271 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +12:12:32.372 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +12:12:32.373 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +12:12:32.373 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +12:12:32.489 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +12:12:33.642 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +12:12:33.643 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +12:12:33.643 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +12:12:35.314 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +12:12:36.901 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +12:12:36.924 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:12:36.924 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:12:37.095 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +12:12:37.783 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 9.651 seconds (JVM running for 10.544) +12:12:37.800 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +12:12:37.800 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +12:12:37.802 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +12:12:38.156 [RMI TCP Connection(4)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:30:06.370 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:30:06.381 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +12:30:06.509 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +12:30:06.513 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +12:30:06.522 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +12:30:06.522 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +12:30:22.689 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +12:30:22.771 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +12:30:23.182 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:30:23.183 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:30:25.103 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +12:30:27.716 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +12:30:27.718 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +12:30:27.718 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +12:30:27.845 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +12:30:29.097 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +12:30:29.099 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +12:30:29.099 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +12:30:31.004 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +12:30:32.844 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +12:30:32.871 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:30:32.871 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:30:33.056 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +12:30:33.148 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:30:33.882 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 12.121 seconds (JVM running for 13.26) +12:30:33.902 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +12:30:33.903 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +12:30:33.905 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +12:31:28.925 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:31:28.937 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +12:31:29.063 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +12:31:29.065 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +12:31:29.069 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +12:31:29.069 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +12:31:44.063 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +12:31:44.139 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +12:31:44.495 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:31:44.496 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:31:45.947 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +12:31:48.473 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +12:31:48.475 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +12:31:48.475 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +12:31:48.602 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +12:31:49.711 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +12:31:49.713 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +12:31:49.714 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +12:31:51.560 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +12:31:53.435 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +12:31:53.471 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +12:31:53.471 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +12:31:53.650 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +12:31:54.180 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:31:54.535 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 11.067 seconds (JVM running for 12.306) +12:31:54.557 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +12:31:54.558 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +12:31:54.561 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +12:33:13.372 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:33:13.385 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +12:33:13.521 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +12:33:13.524 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +12:33:13.527 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +12:33:13.527 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:05:02.756 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:05:02.833 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:05:03.232 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:03.233 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:05.061 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:05:07.860 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:05:07.861 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:05:07.861 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:05:08.004 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:05:09.323 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:05:09.325 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:05:09.325 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:05:11.551 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:05:13.875 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:05:13.903 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:13.903 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:14.080 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:05:14.929 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 12.793 seconds (JVM running for 14.058) +14:05:14.955 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:05:14.956 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:05:14.958 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:05:15.300 [RMI TCP Connection(12)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:06:05.261 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:06:05.273 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:06:05.401 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:06:05.403 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:06:05.409 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:06:05.410 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:06:13.744 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:06:13.805 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:06:14.087 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:06:14.088 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:06:15.521 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:06:17.860 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:06:17.862 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:06:17.862 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:06:17.969 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:06:19.153 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:06:19.154 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:06:19.154 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:06:20.893 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:06:22.643 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:06:22.643 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:06:22.902 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:06:23.674 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.459 seconds (JVM running for 11.237) +14:06:23.695 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:06:23.696 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:06:23.697 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:06:23.943 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:06:23.964 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:06:24.418 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:06:24.420 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:06:24.424 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:06:24.425 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:06:32.465 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:06:32.521 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:06:32.870 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:06:32.871 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:06:34.284 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:06:36.662 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:06:36.663 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:06:36.664 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:06:36.787 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:06:37.977 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:06:37.978 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:06:37.979 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:06:39.935 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:06:41.733 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:06:41.759 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:06:41.759 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:06:41.937 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:06:42.859 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.991 seconds (JVM running for 12.04) +14:06:42.881 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:06:42.881 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:06:42.883 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:06:43.088 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:53:24.635 [lettuce-nioEventLoop-4-2] INFO i.l.c.p.CommandHandler - [log,217] - null Unexpected exception during request: java.net.SocketException: Connection reset +java.net.SocketException: Connection reset + at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394) + at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426) + at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:256) + at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) + at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base/java.lang.Thread.run(Thread.java:833) +14:53:24.677 [lettuce-eventExecutorLoop-1-19] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:53:24.726 [lettuce-nioEventLoop-4-3] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +14:58:17.975 [lettuce-eventExecutorLoop-1-10] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:58:19.180 [lettuce-nioEventLoop-4-4] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +15:50:12.076 [lettuce-eventExecutorLoop-1-3] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +15:50:12.101 [lettuce-nioEventLoop-4-5] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +16:47:16.697 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.713 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:47:16.866 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +16:47:16.870 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +16:47:16.873 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +16:47:16.873 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +18:22:39.431 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:22:39.506 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:22:39.814 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:39.814 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:42.557 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:22:44.978 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +18:22:44.981 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:22:44.981 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:22:45.223 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:22:45.540 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +18:22:45.544 [Druid-ConnectionPool-Create-1708315596] INFO c.a.d.p.DruidAbstractDataSource - [setFailContinuous,1877] - {dataSource-1} failContinuous is true +18:22:45.570 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +18:28:20.685 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:28:20.754 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:28:21.233 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:28:21.234 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:23.356 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:28:25.961 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +18:28:25.963 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:28:25.963 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:28:26.197 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:28:32.656 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +18:28:32.658 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +18:28:32.659 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +18:28:34.259 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:28:35.902 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +18:28:35.937 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:28:35.938 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:36.644 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 192.168.43.159:9302 register finished +18:28:37.392 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 17.619 seconds (JVM running for 18.642) +18:28:37.415 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +18:28:37.415 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +18:28:37.417 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +18:28:38.080 [RMI TCP Connection(8)-192.168.43.159] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +18:51:17.943 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +18:51:17.998 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +18:51:18.151 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +18:51:18.154 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +18:51:18.158 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +18:51:18.159 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +18:51:32.187 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:51:32.242 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:51:32.528 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:51:32.529 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:51:34.537 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:51:37.153 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +18:51:37.154 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:51:37.155 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:51:37.256 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:51:43.453 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +18:51:43.456 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +18:51:43.457 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +18:51:45.138 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:51:46.670 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +18:51:46.781 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:51:46.782 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:51:47.127 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 192.168.43.159:9302 register finished +18:51:47.886 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 16.273 seconds (JVM running for 17.293) +18:51:47.900 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +18:51:47.901 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +18:51:47.903 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +18:51:48.178 [RMI TCP Connection(7)-192.168.43.159] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +18:56:23.698 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +18:56:23.758 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +18:56:24.085 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +18:56:24.140 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +18:56:24.145 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +18:56:24.146 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +18:56:37.578 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:56:37.631 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:56:37.913 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:56:37.914 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:56:39.915 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:56:42.262 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +18:56:42.264 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:56:42.264 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:56:42.362 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:56:48.078 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +18:56:48.080 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +18:56:48.081 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +18:56:49.865 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:56:51.431 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +18:56:51.459 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:56:51.459 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:56:51.833 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 192.168.43.159:9302 register finished +18:56:52.640 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 15.66 seconds (JVM running for 16.75) +18:56:52.674 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +18:56:52.675 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +18:56:52.679 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +18:56:52.905 [RMI TCP Connection(5)-192.168.43.159] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +19:08:04.617 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +19:08:04.965 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +19:08:05.134 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +19:08:05.140 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +19:08:05.155 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +19:08:05.156 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +19:08:28.541 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +19:08:28.613 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +19:08:28.997 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +19:08:28.998 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. diff --git a/logs/muyu-product/info.2024-03-25.log b/logs/muyu-product/info.2024-03-25.log new file mode 100644 index 0000000..adb5592 --- /dev/null +++ b/logs/muyu-product/info.2024-03-25.log @@ -0,0 +1,224 @@ +09:42:01.650 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:42:01.755 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:42:02.406 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:42:02.408 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:42:04.602 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:42:06.794 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +09:42:06.795 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:42:06.796 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:42:06.987 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:42:11.460 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +09:42:11.460 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +09:42:11.461 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +09:42:12.896 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:42:14.301 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +09:42:14.322 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:42:14.322 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:42:14.520 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +09:42:15.134 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 14.115 seconds (JVM running for 14.949) +09:42:15.148 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +09:42:15.148 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +09:42:15.150 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +09:42:15.657 [RMI TCP Connection(9)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +09:43:55.679 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +09:43:55.690 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +09:43:55.824 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +09:43:55.827 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +09:43:55.831 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +09:43:55.831 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +09:44:07.472 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:44:07.527 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:44:07.824 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:44:07.825 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:44:09.048 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:44:10.959 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +09:44:10.960 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:44:10.961 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:44:11.063 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:44:22.723 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +09:44:22.724 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +09:44:22.724 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +09:44:24.225 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:44:25.745 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +09:44:25.768 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:44:25.768 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:44:26.008 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +09:44:26.692 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 19.75 seconds (JVM running for 20.641) +09:44:26.707 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +09:44:26.707 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +09:44:26.709 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +09:44:26.801 [RMI TCP Connection(10)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +09:51:57.941 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +09:51:57.962 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +09:51:58.087 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +09:51:58.090 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +09:51:58.095 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +09:51:58.095 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +09:52:10.243 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:52:10.298 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:52:10.567 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:52:10.567 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:52:11.827 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:52:13.756 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +09:52:13.757 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:52:13.757 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:52:13.867 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:52:17.867 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +09:52:17.868 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +09:52:17.868 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +09:52:19.394 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:52:20.838 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +09:52:20.863 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:52:20.864 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:52:21.121 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +09:52:21.754 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 12.055 seconds (JVM running for 13.164) +09:52:21.768 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +09:52:21.768 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +09:52:21.769 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +09:52:22.235 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:03:22.647 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:03:22.881 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:03:23.049 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:03:23.051 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:03:23.054 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:03:23.054 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:03:34.366 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:03:34.416 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:03:34.689 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:03:34.689 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:03:35.925 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:03:37.774 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:03:37.775 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:03:37.775 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:03:37.874 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:03:41.971 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:03:41.972 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:03:41.972 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:03:43.466 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:03:44.897 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:03:44.920 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:03:44.920 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:03:45.159 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:03:45.763 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 11.904 seconds (JVM running for 12.811) +10:03:45.778 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:03:45.778 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:03:45.780 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +10:03:46.037 [RMI TCP Connection(3)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:20:13.134 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:20:13.203 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:20:13.335 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:20:13.338 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:20:13.342 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:20:13.342 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:20:25.281 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:20:25.336 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:20:25.655 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:20:25.655 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:20:27.112 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:20:29.373 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:20:29.374 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:20:29.374 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:20:29.483 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:20:31.576 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:20:31.577 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:20:31.578 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:20:33.112 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:20:34.622 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:20:34.645 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:20:34.645 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:20:34.840 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:20:35.487 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.716 seconds (JVM running for 11.54) +10:20:35.503 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:20:35.504 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:20:35.505 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +10:20:35.854 [RMI TCP Connection(3)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:04:30.379 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:04:30.428 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:04:30.555 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:04:30.558 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:04:30.569 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:04:30.569 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +11:05:27.343 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +11:05:27.394 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +11:05:27.688 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:05:27.689 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:05:29.116 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +11:05:31.442 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +11:05:31.444 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +11:05:31.444 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +11:05:31.578 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +11:05:33.498 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +11:05:33.498 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +11:05:33.498 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +11:05:35.209 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +11:05:36.836 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +11:05:36.860 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +11:05:36.861 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +11:05:37.045 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +11:05:37.729 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.907 seconds (JVM running for 11.859) +11:05:37.744 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +11:05:37.745 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +11:05:37.746 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:05:38.250 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:48:40.325 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:48:40.351 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:48:40.488 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:48:40.491 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:48:40.497 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:48:40.497 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:07:42.671 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:07:42.764 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:07:43.140 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:43.141 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:44.744 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:07:47.013 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:07:47.014 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:07:47.015 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:07:47.128 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:07:55.523 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:07:55.524 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:07:55.525 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:07:57.260 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:07:59.125 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:07:59.155 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:59.155 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:59.385 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:08:00.120 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 18.297 seconds (JVM running for 19.544) +14:08:00.141 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:08:00.142 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:08:00.144 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:08:00.501 [RMI TCP Connection(9)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:31:05.450 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:31:05.481 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:31:05.613 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:31:05.616 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:31:05.620 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:31:05.620 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:31:13.169 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:31:13.225 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:31:13.481 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:13.483 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:15.233 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:31:17.217 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:31:17.218 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:31:17.218 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:31:17.323 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:31:21.755 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:31:21.756 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:31:21.757 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:31:23.720 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:31:26.300 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:31:26.341 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:26.343 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:31:26.589 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:31:27.784 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 15.099 seconds (JVM running for 16.16) +14:31:27.806 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:31:27.807 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:31:27.808 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:31:28.202 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:24:39.499 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:24:39.532 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:24:39.776 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +16:24:39.803 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +16:24:39.844 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +16:24:39.844 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-product/info.2024-03-26.log b/logs/muyu-product/info.2024-03-26.log new file mode 100644 index 0000000..cc1678e --- /dev/null +++ b/logs/muyu-product/info.2024-03-26.log @@ -0,0 +1,224 @@ +08:43:25.145 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:43:25.228 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:43:25.770 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:25.771 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:27.987 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:43:30.624 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +08:43:30.625 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:43:30.626 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:43:30.766 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:43:32.384 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +08:43:32.385 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +08:43:32.385 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +08:43:34.667 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:43:37.181 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +08:43:37.205 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:37.205 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:37.403 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +08:43:38.195 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 14.221 seconds (JVM running for 15.39) +08:43:38.216 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +08:43:38.217 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +08:43:38.218 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +08:43:38.689 [RMI TCP Connection(7)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:01:21.431 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:01:21.448 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:01:21.583 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:01:21.586 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:01:21.591 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:01:21.591 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:01:29.247 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:01:29.312 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:01:29.633 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:01:29.633 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:01:31.048 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:01:33.126 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:01:33.128 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:01:33.128 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:01:33.235 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:01:35.318 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:01:35.318 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:01:35.318 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:01:37.135 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:01:38.839 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:01:38.865 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:01:38.866 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:01:39.039 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:01:39.736 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 11.101 seconds (JVM running for 12.076) +10:01:39.751 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:01:39.755 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:01:39.756 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +10:01:40.105 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:05:35.705 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +10:05:35.722 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +10:05:35.848 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:05:35.850 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:05:35.853 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:05:35.853 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:05:50.181 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:05:50.235 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:05:50.565 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:50.566 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:52.134 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:05:54.266 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:05:54.267 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:05:54.267 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:05:54.387 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:05:56.029 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:05:56.030 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:05:56.030 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:05:58.372 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:06:00.431 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +10:06:00.459 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:06:00.460 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:06:00.643 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +10:06:00.928 [http-nio-9302-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +10:06:01.602 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 12.151 seconds (JVM running for 13.802) +10:06:01.645 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +10:06:01.646 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +10:06:01.649 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +11:59:28.534 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:59:28.548 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:59:28.690 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:59:28.692 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:59:28.697 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:59:28.698 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:17:20.337 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:17:20.392 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:17:20.661 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:20.661 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:22.281 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:17:24.704 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:17:24.705 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:17:24.705 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:17:24.833 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:17:39.508 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:17:39.509 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:17:39.509 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:17:41.179 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:17:42.917 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:17:42.938 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:42.939 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:43.211 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:17:43.906 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 24.086 seconds (JVM running for 25.054) +14:17:43.924 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:17:43.924 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:17:43.926 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:17:44.322 [RMI TCP Connection(17)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:21:04.384 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:21:04.414 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:21:04.553 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:21:04.558 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:21:04.562 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:21:04.563 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:21:18.107 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:21:18.171 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:21:18.521 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:18.522 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:20.701 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:21:23.375 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:21:23.377 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:21:23.377 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:21:23.526 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:21:38.584 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:21:38.584 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:21:38.585 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:21:41.040 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:21:43.132 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:21:43.161 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:43.162 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:43.351 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:21:44.066 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 26.628 seconds (JVM running for 27.567) +14:21:44.082 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:21:44.082 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:21:44.084 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:21:44.617 [RMI TCP Connection(24)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:29:51.005 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:29:51.027 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:29:51.163 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:29:51.165 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:29:51.169 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:29:51.170 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:32:06.668 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:32:06.718 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:32:07.029 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:32:07.029 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:32:08.564 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:32:10.717 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:32:10.718 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:32:10.719 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:32:10.820 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:32:30.743 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:32:30.745 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:32:30.745 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:32:32.314 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:32:34.056 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:32:34.088 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:32:34.088 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:32:34.330 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:32:35.092 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 29.059 seconds (JVM running for 30.26) +14:32:35.108 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:32:35.108 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:32:35.109 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:32:35.384 [RMI TCP Connection(26)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:36:30.030 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:36:30.080 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:36:30.231 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:36:30.238 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:36:30.240 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:36:30.241 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:36:59.730 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:36:59.785 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:37:00.047 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:37:00.047 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:37:02.083 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:37:04.278 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:37:04.279 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:37:04.279 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:37:04.386 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:37:23.437 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:37:23.439 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:37:23.439 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:37:24.910 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:37:26.560 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +14:37:26.583 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:37:26.584 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:37:26.825 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +14:37:27.526 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 28.342 seconds (JVM running for 29.379) +14:37:27.542 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +14:37:27.542 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +14:37:27.543 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +14:37:28.057 [RMI TCP Connection(6)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:00:36.990 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:00:37.049 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:00:37.175 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +16:00:37.176 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +16:00:37.180 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +16:00:37.180 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +16:05:37.051 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +16:05:37.102 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +16:05:37.470 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:37.470 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:39.029 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +16:05:41.027 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +16:05:41.028 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +16:05:41.029 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +16:05:41.140 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +16:05:46.965 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +16:05:46.966 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +16:05:46.967 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +16:05:48.710 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +16:05:50.966 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +16:05:50.995 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:50.996 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:51.169 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +16:05:51.937 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 15.512 seconds (JVM running for 16.704) +16:05:51.952 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +16:05:51.953 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +16:05:51.954 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +16:05:52.197 [RMI TCP Connection(13)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +20:27:46.364 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +20:27:46.403 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +20:27:46.575 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +20:27:46.581 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +20:27:46.593 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +20:27:46.593 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-product/info.log b/logs/muyu-product/info.log new file mode 100644 index 0000000..7893399 --- /dev/null +++ b/logs/muyu-product/info.log @@ -0,0 +1,152 @@ +10:05:25.873 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:05:25.991 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:05:26.625 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:26.626 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:28.768 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:05:31.064 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:05:31.065 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:05:31.067 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:05:31.212 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:05:32.548 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:05:32.550 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:05:32.550 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:05:33.867 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:05:33.870 [main] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:05:33.875 [main] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:05:33.876 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:05:33.877 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +10:11:18.917 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:11:18.969 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:11:19.283 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:11:19.283 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:11:20.637 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:11:22.652 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +10:11:22.654 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:11:22.654 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:11:22.801 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:11:24.306 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:11:24.307 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:11:24.307 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:11:25.853 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +10:11:25.854 [main] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +10:11:25.862 [main] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +10:11:25.862 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +10:11:25.864 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +13:47:29.993 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +13:47:30.087 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +13:47:30.413 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +13:47:30.413 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +13:47:31.693 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +13:47:33.615 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +13:47:33.616 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +13:47:33.617 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +13:47:33.715 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +13:47:35.029 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +13:47:35.030 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +13:47:35.031 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +13:47:36.236 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +13:47:36.238 [main] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +13:47:36.243 [main] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +13:47:36.243 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +13:47:36.244 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +14:27:32.430 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:27:32.484 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:27:32.844 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:27:32.844 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:27:34.254 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:27:36.123 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +14:27:36.125 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:27:36.125 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:27:36.222 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:27:37.736 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:27:37.737 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:27:37.737 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:27:38.908 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:27:38.910 [main] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:27:38.918 [main] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:27:38.918 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:27:38.919 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +15:08:23.810 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +15:08:23.862 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +15:08:24.123 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +15:08:24.123 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +15:08:25.488 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +15:08:27.303 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +15:08:27.304 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +15:08:27.304 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +15:08:27.405 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +15:08:28.591 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +15:08:28.591 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +15:08:28.592 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +15:08:30.045 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +15:08:31.530 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +15:08:31.554 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +15:08:31.554 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +15:08:31.755 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +15:08:32.334 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 9.046 seconds (JVM running for 9.899) +15:08:32.349 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +15:08:32.349 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +15:08:32.351 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +15:08:32.799 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +15:29:25.100 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +15:29:25.116 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +15:29:25.251 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +15:29:25.253 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +15:29:25.258 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +15:29:25.258 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +15:29:36.979 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +15:29:37.037 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +15:29:37.330 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +15:29:37.330 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +15:29:38.713 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +15:29:40.578 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +15:29:40.580 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +15:29:40.580 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +15:29:40.679 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +15:29:41.859 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +15:29:41.861 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +15:29:41.862 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +15:29:43.283 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +15:29:44.727 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +15:29:44.749 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +15:29:44.749 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +15:29:44.933 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +15:29:45.527 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 9.141 seconds (JVM running for 10.2) +15:29:45.542 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +15:29:45.543 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +15:29:45.544 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +15:29:45.687 [RMI TCP Connection(5)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +15:36:11.126 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +15:36:11.141 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +15:36:11.268 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +15:36:11.270 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +15:36:11.276 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +15:36:11.276 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +15:36:18.556 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +15:36:18.625 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +15:36:18.987 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +15:36:18.987 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +15:36:20.406 [main] INFO c.r.p.MuYuProductApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +15:36:22.259 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9302"] +15:36:22.260 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +15:36:22.260 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +15:36:22.367 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +15:36:24.429 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +15:36:24.430 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +15:36:24.431 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +15:36:25.939 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +15:36:27.508 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9302"] +15:36:27.531 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +15:36:27.531 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +15:36:27.745 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-product 10.1.123.83:9302 register finished +15:36:28.342 [main] INFO c.r.p.MuYuProductApplication - [logStarted,61] - Started MuYuProductApplication in 10.377 seconds (JVM running for 11.482) +15:36:28.357 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product.yml, group=DEFAULT_GROUP +15:36:28.357 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product, group=DEFAULT_GROUP +15:36:28.358 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-product-dev.yml, group=DEFAULT_GROUP +15:36:28.810 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +17:29:56.004 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +17:29:56.030 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +17:29:56.237 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +17:29:56.255 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +17:29:56.309 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +17:29:56.309 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-system/error.2024-03-21.log b/logs/muyu-system/error.2024-03-21.log new file mode 100644 index 0000000..a2e92eb --- /dev/null +++ b/logs/muyu-system/error.2024-03-21.log @@ -0,0 +1,39 @@ +20:37:16.829 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.ruoyi.system.MuYuSystemApplication]; nested exception is java.io.FileNotFoundException: class path resource [com/ruoyi/common/core/web/controller/BaseController.class] cannot be opened because it does not exist + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:748) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.system.MuYuSystemApplication.main(MuYuSystemApplication.java:20) +Caused by: java.io.FileNotFoundException: class path resource [com/ruoyi/common/core/web/controller/BaseController.class] cannot be opened because it does not exist + at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:199) + at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:55) + at org.springframework.core.type.classreading.SimpleMetadataReader.(SimpleMetadataReader.java:48) + at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) + at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:86) + at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:73) + at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81) + at org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:696) + at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getSuperClass(ConfigurationClassParser.java:1010) + at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:340) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198) + at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:303) + at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:206) + at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:174) + ... 13 common frames omitted +21:12:01.729 [http-nio-9201-exec-1] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:12:01.893 [http-nio-9201-exec-2] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:51.615 [http-nio-9201-exec-8] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:54.877 [http-nio-9201-exec-10] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' +21:13:59.570 [http-nio-9201-exec-6] ERROR c.r.c.s.s.TokenService - [getLoginUser,109] - 获取用户信息异常'class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.common.system.domain.LoginUser (com.alibaba.fastjson2.JSONObject and com.ruoyi.common.system.domain.LoginUser are in unnamed module of loader 'app')' diff --git a/logs/muyu-system/error.2024-03-22.log b/logs/muyu-system/error.2024-03-22.log new file mode 100644 index 0000000..217d49b --- /dev/null +++ b/logs/muyu-system/error.2024-03-22.log @@ -0,0 +1,71 @@ +08:56:26.899 [http-nio-9201-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted diff --git a/logs/muyu-system/error.2024-03-23.log b/logs/muyu-system/error.2024-03-23.log new file mode 100644 index 0000000..d21a7de --- /dev/null +++ b/logs/muyu-system/error.2024-03-23.log @@ -0,0 +1,781 @@ +08:28:37.103 [http-nio-9201-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:29:19.184 [http-nio-9201-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:33:48.783 [http-nio-9201-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:34:15.560 [http-nio-9201-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:38:32.677 [http-nio-9201-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:41:46.788 [http-nio-9201-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:42:33.123 [http-nio-9201-exec-6] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:45:03.147 [http-nio-9201-exec-4] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:46:11.642 [http-nio-9201-exec-10] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:48:17.566 [http-nio-9201-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +08:50:47.870 [http-nio-9201-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted diff --git a/logs/muyu-system/error.2024-03-24.log b/logs/muyu-system/error.2024-03-24.log new file mode 100644 index 0000000..dd5306d --- /dev/null +++ b/logs/muyu-system/error.2024-03-24.log @@ -0,0 +1,1388 @@ +12:19:13.330 [http-nio-9201-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +12:27:10.067 [http-nio-9201-exec-9] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +12:29:57.063 [http-nio-9201-exec-1] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,98] - 请求地址'/operlog',发生未知异常. +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens + at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2391) + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:735) + at com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:713) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._skipWSOrEnd(UTF8StreamJsonParser.java:3057) + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:756) + at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4761) + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4667) + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) + ... 55 common frames omitted +14:58:23.449 [http-nio-9201-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10005, stmt-20009} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,100,336 milliseconds ago. The last packet sent successfully to the server was 3,100,358 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) + at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor141.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor125.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,100,336 milliseconds ago. The last packet sent successfully to the server was 3,100,358 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 101 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) + at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) + at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) + at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) + at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) + at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) + at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455) + at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 107 common frames omitted +14:58:23.517 [http-nio-9201-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10003, stmt-20010} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,202,309 milliseconds ago. The last packet sent successfully to the server was 3,202,317 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) + at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor141.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor125.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,202,309 milliseconds ago. The last packet sent successfully to the server was 3,202,317 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 101 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) + at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) + at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) + at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) + at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) + at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) + at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455) + at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 107 common frames omitted +14:58:23.533 [http-nio-9201-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10002, stmt-20011} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,202,458 milliseconds ago. The last packet sent successfully to the server was 3,202,467 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) + at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor141.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor125.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,202,458 milliseconds ago. The last packet sent successfully to the server was 3,202,467 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 101 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) + at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) + at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) + at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) + at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) + at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) + at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455) + at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 107 common frames omitted +14:58:23.825 [http-nio-9201-exec-5] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10001, stmt-20012} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,202,928 milliseconds ago. The last packet sent successfully to the server was 3,202,941 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) + at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) + at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor141.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor125.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 3,202,928 milliseconds ago. The last packet sent successfully to the server was 3,202,941 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 101 common frames omitted +Caused by: java.net.SocketException: Connection reset + at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) + at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) + at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) + at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) + at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) + at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) + at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455) + at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059) + at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 107 common frames omitted +18:22:39.218 [main] ERROR c.a.d.p.DruidDataSource - [init,929] - init datasource error, url: jdbc:mysql://43.142.44.217:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925) + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:85) + at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70) + at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48) + at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47) + at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42) + at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:225) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1492) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:204) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:98) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:262) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:236) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4936) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.system.MuYuSystemApplication.main(MuYuSystemApplication.java:20) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 121 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 124 common frames omitted +18:22:39.222 [main] ERROR c.a.d.p.DruidDataSource - [init,971] - {dataSource-1} init error +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925) + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:85) + at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70) + at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48) + at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47) + at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42) + at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:225) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1492) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:204) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:98) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:262) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:236) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4936) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.system.MuYuSystemApplication.main(MuYuSystemApplication.java:20) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 121 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 124 common frames omitted +18:22:39.224 [main] ERROR o.s.b.w.e.t.TomcatStarter - [onStartup,61] - Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error +18:22:39.225 [Druid-ConnectionPool-Create-838205369] ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException, url: jdbc:mysql://43.142.44.217:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 12 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 15 common frames omitted +18:22:39.229 [Druid-ConnectionPool-Create-838205369] ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException, url: jdbc:mysql://43.142.44.217:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 12 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 15 common frames omitted +18:22:39.314 [main] ERROR o.s.b.SpringApplication - [reportFailure,821] - Application run failed +org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:165) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:577) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at com.ruoyi.system.MuYuSystemApplication.main(MuYuSystemApplication.java:20) +Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:481) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:184) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + ... 8 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webMvcMetricsFilter' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfiguration.class]: Unsatisfied dependency expressed through method 'webMvcMetricsFilter' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:204) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:98) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:262) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:236) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4936) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:923) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + ... 13 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMeterRegistry' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + ... 55 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourcePoolMetadataMeterBinder' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/jdbc/DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourcePoolMetadataMeterBinder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1616) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1417) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.resolveStream(DefaultListableBeanFactory.java:2119) + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.orderedStream(DefaultListableBeanFactory.java:2113) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.addBinders(MeterRegistryConfigurer.java:87) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryConfigurer.configure(MeterRegistryConfigurer.java:68) + at org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryPostProcessor.postProcessAfterInitialization(MeterRegistryPostProcessor.java:64) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:455) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + ... 65 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.class]: Invocation of init method failed; nested exception is com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1573) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1492) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1349) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) + ... 87 common frames omitted +Caused by: com.baomidou.dynamic.datasource.exception.ErrorCreateDataSourceException: druid create error + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:87) + at com.baomidou.dynamic.datasource.creator.AbstractDataSourceCreator.createDataSource(AbstractDataSourceCreator.java:70) + at com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator.createDataSource(DefaultDataSourceCreator.java:48) + at com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider.createDataSourceMap(AbstractDataSourceProvider.java:47) + at com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider.loadDataSources(YmlDynamicDataSourceProvider.java:42) + at com.baomidou.dynamic.datasource.DynamicRoutingDataSource.afterPropertiesSet(DynamicRoutingDataSource.java:225) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) + ... 101 common frames omitted +Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:446) + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:118) + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:764) + at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:33) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:232) + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:112) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1703) + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:925) + at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.doCreateDataSource(DruidDataSourceCreator.java:85) + ... 108 common frames omitted +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) + at com.mysql.cj.NativeSession.connect(NativeSession.java:121) + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945) + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815) + ... 121 common frames omitted +Caused by: java.net.NoRouteToHostException: No route to host: connect + at java.base/sun.nio.ch.Net.connect0(Native Method) + at java.base/sun.nio.ch.Net.connect(Net.java:579) + at java.base/sun.nio.ch.Net.connect(Net.java:568) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:633) + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153) + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) + ... 124 common frames omitted diff --git a/logs/muyu-system/error.log b/logs/muyu-system/error.log new file mode 100644 index 0000000..1f1a6d5 --- /dev/null +++ b/logs/muyu-system/error.log @@ -0,0 +1,912 @@ +10:54:50.070 [http-nio-9201-exec-10] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 754700 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@1eacf03e[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@333fc954, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@60c2fa2c, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@a957afc}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor249.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor233.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 9 milliseconds, 754700 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@1eacf03e[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@333fc954, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@60c2fa2c, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@a957afc}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 85 common frames omitted +14:36:06.336 [http-nio-9201-exec-6] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10005, stmt-20008} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 147,100 milliseconds ago. The last packet sent successfully to the server was 147,882 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy265.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy134.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy187.selectUserById(Unknown Source) + at com.ruoyi.system.service.impl.SysUserServiceImpl.selectUserById(SysUserServiceImpl.java:114) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$FastClassBySpringCGLIB$$b4a378b2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$EnhancerBySpringCGLIB$$e42ece9e.selectUserById() + at com.ruoyi.system.controller.SysUserController.getInfo(SysUserController.java:140) + at com.ruoyi.system.controller.SysUserController$$FastClassBySpringCGLIB$$bd6cb4e2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.controller.SysUserController$$EnhancerBySpringCGLIB$$dbf05ecf.getInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 147,100 milliseconds ago. The last packet sent successfully to the server was 147,882 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 126 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 132 common frames omitted +14:36:06.342 [http-nio-9201-exec-6] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10004, stmt-20009} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 228,429 milliseconds ago. The last packet sent successfully to the server was 228,558 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy265.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy134.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy187.selectUserById(Unknown Source) + at com.ruoyi.system.service.impl.SysUserServiceImpl.selectUserById(SysUserServiceImpl.java:114) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$FastClassBySpringCGLIB$$b4a378b2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$EnhancerBySpringCGLIB$$e42ece9e.selectUserById() + at com.ruoyi.system.controller.SysUserController.getInfo(SysUserController.java:140) + at com.ruoyi.system.controller.SysUserController$$FastClassBySpringCGLIB$$bd6cb4e2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.controller.SysUserController$$EnhancerBySpringCGLIB$$dbf05ecf.getInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 228,429 milliseconds ago. The last packet sent successfully to the server was 228,558 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 126 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 132 common frames omitted +14:36:06.346 [http-nio-9201-exec-6] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10003, stmt-20010} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 230,850 milliseconds ago. The last packet sent successfully to the server was 230,985 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy265.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy134.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy187.selectUserById(Unknown Source) + at com.ruoyi.system.service.impl.SysUserServiceImpl.selectUserById(SysUserServiceImpl.java:114) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$FastClassBySpringCGLIB$$b4a378b2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$EnhancerBySpringCGLIB$$e42ece9e.selectUserById() + at com.ruoyi.system.controller.SysUserController.getInfo(SysUserController.java:140) + at com.ruoyi.system.controller.SysUserController$$FastClassBySpringCGLIB$$bd6cb4e2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.controller.SysUserController$$EnhancerBySpringCGLIB$$dbf05ecf.getInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 230,850 milliseconds ago. The last packet sent successfully to the server was 230,985 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 126 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 132 common frames omitted +14:36:06.350 [http-nio-9201-exec-6] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10002, stmt-20011} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 232,642 milliseconds ago. The last packet sent successfully to the server was 232,790 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy265.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy134.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy187.selectUserById(Unknown Source) + at com.ruoyi.system.service.impl.SysUserServiceImpl.selectUserById(SysUserServiceImpl.java:114) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$FastClassBySpringCGLIB$$b4a378b2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$EnhancerBySpringCGLIB$$e42ece9e.selectUserById() + at com.ruoyi.system.controller.SysUserController.getInfo(SysUserController.java:140) + at com.ruoyi.system.controller.SysUserController$$FastClassBySpringCGLIB$$bd6cb4e2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.controller.SysUserController$$EnhancerBySpringCGLIB$$dbf05ecf.getInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 232,642 milliseconds ago. The last packet sent successfully to the server was 232,790 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 126 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 132 common frames omitted +14:36:06.354 [http-nio-9201-exec-6] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10001, stmt-20012} execute error. SELECT 1 FROM DUAL +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet successfully received from the server was 235,915 milliseconds ago. The last packet sent successfully to the server was 236,068 milliseconds ago. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175) + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1200) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2866) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.filter.FilterAdapter.statement_executeQuery(FilterAdapter.java:2513) + at com.alibaba.druid.filter.FilterEventAdapter.statement_executeQuery(FilterEventAdapter.java:296) + at com.alibaba.druid.filter.FilterChainImpl.statement_executeQuery(FilterChainImpl.java:2863) + at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeQuery(StatementProxyImpl.java:215) + at com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker.isValidConnection(MySqlValidConnectionChecker.java:140) + at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1518) + at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1525) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5058) + at com.alibaba.druid.filter.logging.LogFilter.dataSource_getConnection(LogFilter.java:909) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:704) + at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:5054) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1448) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440) + at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83) + at com.baomidou.dynamic.datasource.ds.ItemDataSource.getConnection(ItemDataSource.java:56) + at com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource.getConnection(AbstractRoutingDataSource.java:55) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) + at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) + at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:345) + at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89) + at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) + at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:333) + at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) + at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) + at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:151) + at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) + at jdk.proxy2/jdk.proxy2.$Proxy265.query(Unknown Source) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) + at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) + at jdk.proxy2/jdk.proxy2.$Proxy134.selectOne(Unknown Source) + at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) + at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) + at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) + at jdk.proxy2/jdk.proxy2.$Proxy187.selectUserById(Unknown Source) + at com.ruoyi.system.service.impl.SysUserServiceImpl.selectUserById(SysUserServiceImpl.java:114) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$FastClassBySpringCGLIB$$b4a378b2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.service.impl.SysUserServiceImpl$$EnhancerBySpringCGLIB$$e42ece9e.selectUserById() + at com.ruoyi.system.controller.SysUserController.getInfo(SysUserController.java:140) + at com.ruoyi.system.controller.SysUserController$$FastClassBySpringCGLIB$$bd6cb4e2.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at com.ruoyi.system.controller.SysUserController$$EnhancerBySpringCGLIB$$dbf05ecf.getInfo() + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet successfully received from the server was 235,915 milliseconds ago. The last packet sent successfully to the server was 236,068 milliseconds ago. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150) + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:582) + at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) + at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1052) + at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:998) + at com.mysql.cj.NativeSession.execSQL(NativeSession.java:655) + at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1168) + ... 126 common frames omitted +Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. + at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:67) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) + at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) + at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) + at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) + at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) + ... 132 common frames omitted diff --git a/logs/muyu-system/info.2024-03-21.log b/logs/muyu-system/info.2024-03-21.log new file mode 100644 index 0000000..d84722e --- /dev/null +++ b/logs/muyu-system/info.2024-03-21.log @@ -0,0 +1,61 @@ +20:37:15.041 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:37:15.095 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:37:15.392 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:37:15.392 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:37:16.661 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:41:50.858 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +20:41:50.927 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +20:41:51.227 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:41:51.227 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:41:52.619 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +20:41:54.600 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +20:41:54.602 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +20:41:54.602 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +20:41:54.713 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +20:41:56.514 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +20:41:56.515 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +20:41:56.515 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +20:41:59.108 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +20:42:00.526 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +20:42:00.554 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +20:42:00.554 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +20:42:00.743 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +20:42:01.479 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 11.192 seconds (JVM running for 12.182) +20:42:01.495 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +20:42:01.496 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +20:42:01.497 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +20:42:01.742 [RMI TCP Connection(2)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:03:58.917 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:03:58.929 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:03:59.071 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +21:03:59.074 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +21:03:59.080 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +21:03:59.081 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +21:11:02.883 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +21:11:02.950 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +21:11:03.241 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:11:03.241 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:11:04.992 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +21:11:07.769 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +21:11:07.771 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +21:11:07.772 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +21:11:07.960 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +21:11:09.533 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +21:11:09.535 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +21:11:09.535 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +21:11:13.173 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +21:11:15.198 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +21:11:15.223 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +21:11:15.223 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +21:11:15.428 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +21:11:16.407 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 14.103 seconds (JVM running for 15.196) +21:11:16.420 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +21:11:16.420 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +21:11:16.422 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +21:11:16.546 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +21:23:37.207 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +21:23:37.224 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +21:23:37.364 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +21:23:37.366 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +21:23:37.373 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +21:23:37.373 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-system/info.2024-03-22.log b/logs/muyu-system/info.2024-03-22.log new file mode 100644 index 0000000..2dbbdc9 --- /dev/null +++ b/logs/muyu-system/info.2024-03-22.log @@ -0,0 +1,28 @@ +08:53:55.095 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:53:55.161 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:53:55.532 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:53:55.533 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:53:57.996 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:54:00.633 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +08:54:00.635 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:54:00.635 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:54:00.779 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:54:02.494 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +08:54:02.495 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +08:54:02.496 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +08:54:06.346 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:54:08.030 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +08:54:08.053 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:54:08.054 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:54:08.250 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +08:54:09.057 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 14.487 seconds (JVM running for 15.407) +08:54:09.072 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +08:54:09.072 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +08:54:09.074 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +08:54:09.300 [RMI TCP Connection(12)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:30:53.577 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:30:53.600 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:30:53.766 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:30:53.769 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:30:53.776 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:30:53.777 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-system/info.2024-03-23.log b/logs/muyu-system/info.2024-03-23.log new file mode 100644 index 0000000..bb0b657 --- /dev/null +++ b/logs/muyu-system/info.2024-03-23.log @@ -0,0 +1,28 @@ +08:25:30.331 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:25:30.391 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:25:30.758 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:30.759 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:33.166 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:25:35.444 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +08:25:35.446 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:25:35.446 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:25:35.581 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:25:44.095 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +08:25:44.096 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +08:25:44.096 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +08:25:46.647 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:25:48.155 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +08:25:48.175 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:25:48.175 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:25:48.353 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +08:25:49.028 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 19.18 seconds (JVM running for 20.085) +08:25:49.041 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +08:25:49.042 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +08:25:49.043 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +08:25:49.537 [RMI TCP Connection(15)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +13:58:55.437 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +13:58:55.460 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +13:58:55.630 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +13:58:55.638 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +13:58:55.650 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +13:58:55.650 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-system/info.2024-03-24.log b/logs/muyu-system/info.2024-03-24.log new file mode 100644 index 0000000..9e0b04b --- /dev/null +++ b/logs/muyu-system/info.2024-03-24.log @@ -0,0 +1,102 @@ +09:06:23.925 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:06:24.059 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:06:24.510 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:24.511 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:26.142 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:06:28.644 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +09:06:28.646 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:06:28.646 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:06:28.796 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:06:30.413 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +09:06:30.414 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +09:06:30.414 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +09:06:35.944 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:06:38.053 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +09:06:38.084 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:06:38.084 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:06:38.248 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +09:06:39.220 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 16.33 seconds (JVM running for 17.23) +09:06:39.241 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +09:06:39.242 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +09:06:39.243 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +09:06:39.633 [RMI TCP Connection(12)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +12:33:13.547 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +12:33:13.563 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +12:33:13.838 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +12:33:13.845 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +12:33:13.859 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +12:33:13.859 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:04:55.398 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:04:55.488 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:04:55.820 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:04:55.821 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:04:57.509 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:05:00.007 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +14:05:00.010 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:05:00.010 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:05:00.136 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:05:01.513 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:05:01.514 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:05:01.515 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:05:05.339 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:05:07.200 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +14:05:07.228 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:07.229 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:07.397 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +14:05:08.273 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 13.389 seconds (JVM running for 14.375) +14:05:08.290 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +14:05:08.291 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +14:05:08.292 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +14:05:08.657 [RMI TCP Connection(14)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:58:17.193 [lettuce-eventExecutorLoop-1-16] INFO i.l.c.p.ConnectionWatchdog - [log,171] - Reconnecting, last destination was /43.142.44.217:6379 +14:58:18.459 [lettuce-nioEventLoop-4-3] INFO i.l.c.p.ReconnectionHandler - [lambda$null$3,174] - Reconnected to 43.142.44.217/:6379 +16:47:16.638 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:16.657 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:47:16.803 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +16:47:16.807 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +16:47:16.812 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +16:47:16.812 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +18:22:31.918 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:22:32.015 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:22:32.500 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:22:32.500 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:22:35.246 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:22:38.389 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +18:22:38.390 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:22:38.391 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:22:38.703 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:22:39.223 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +18:22:39.230 [Druid-ConnectionPool-Create-838205369] INFO c.a.d.p.DruidAbstractDataSource - [setFailContinuous,1877] - {dataSource-1} failContinuous is true +18:22:39.270 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] +18:28:05.885 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +18:28:05.943 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +18:28:06.282 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:28:06.282 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:08.923 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +18:28:11.710 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +18:28:11.712 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +18:28:11.712 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +18:28:11.845 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +18:28:17.972 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +18:28:17.973 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +18:28:17.973 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +18:28:22.605 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +18:28:24.341 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +18:28:24.372 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +18:28:24.372 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +18:28:24.804 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 192.168.43.159:9201 register finished +18:28:25.740 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 20.388 seconds (JVM running for 21.446) +18:28:25.763 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +18:28:25.763 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +18:28:25.765 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +18:28:26.117 [RMI TCP Connection(14)-192.168.43.159] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +19:08:04.614 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +19:08:04.974 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +19:08:05.135 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +19:08:05.141 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +19:08:05.153 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +19:08:05.154 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +19:08:19.763 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +19:08:19.828 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +19:08:20.293 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +19:08:20.294 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. diff --git a/logs/muyu-system/info.2024-03-25.log b/logs/muyu-system/info.2024-03-25.log new file mode 100644 index 0000000..0e1ef02 --- /dev/null +++ b/logs/muyu-system/info.2024-03-25.log @@ -0,0 +1,56 @@ +09:41:47.436 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +09:41:47.516 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +09:41:47.830 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:41:47.831 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:41:49.795 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +09:41:52.562 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +09:41:52.564 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +09:41:52.564 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +09:41:52.694 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +09:41:58.536 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +09:41:58.537 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +09:41:58.537 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +09:42:03.172 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +09:42:05.217 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +09:42:05.239 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +09:42:05.240 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +09:42:05.443 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +09:42:06.188 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 19.243 seconds (JVM running for 20.36) +09:42:06.202 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +09:42:06.203 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +09:42:06.204 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +09:42:06.498 [RMI TCP Connection(16)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:48:40.272 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:48:40.294 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:48:40.444 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:48:40.447 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:48:40.452 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:48:40.453 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:07:35.063 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:07:35.133 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:07:35.485 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:35.486 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:37.684 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:07:40.245 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +14:07:40.247 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:07:40.247 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:07:40.374 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:07:49.696 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:07:49.697 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:07:49.697 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:07:54.098 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:07:55.789 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +14:07:55.814 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:07:55.814 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:07:56.150 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +14:07:56.967 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 22.455 seconds (JVM running for 23.848) +14:07:56.982 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +14:07:56.983 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +14:07:56.984 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +14:07:57.142 [RMI TCP Connection(12)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:24:39.540 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:24:39.570 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:24:39.880 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +16:24:39.891 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +16:24:39.915 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +16:24:39.915 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-system/info.2024-03-26.log b/logs/muyu-system/info.2024-03-26.log new file mode 100644 index 0000000..9cdfddf --- /dev/null +++ b/logs/muyu-system/info.2024-03-26.log @@ -0,0 +1,168 @@ +08:43:14.634 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +08:43:14.722 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +08:43:15.317 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:15.322 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:19.081 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +08:43:22.811 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +08:43:22.813 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +08:43:22.814 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +08:43:23.046 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +08:43:24.815 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +08:43:24.816 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +08:43:24.817 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +08:43:30.310 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +08:43:33.063 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +08:43:33.093 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +08:43:33.093 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +08:43:33.305 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +08:43:34.297 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 20.659 seconds (JVM running for 21.588) +08:43:34.317 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +08:43:34.318 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +08:43:34.320 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +08:43:34.562 [RMI TCP Connection(10)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +11:59:28.418 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +11:59:28.438 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +11:59:28.612 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +11:59:28.617 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +11:59:28.625 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +11:59:28.625 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:17:13.030 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:17:13.108 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:17:13.505 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:13.505 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:15.459 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:17:18.106 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +14:17:18.108 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:17:18.108 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:17:18.247 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:17:29.559 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:17:29.560 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:17:29.560 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:17:35.252 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:17:36.882 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +14:17:36.904 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:17:36.904 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:17:37.188 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +14:17:38.009 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 25.592 seconds (JVM running for 26.777) +14:17:38.032 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +14:17:38.032 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +14:17:38.034 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +14:17:38.292 [RMI TCP Connection(20)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:21:04.353 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:21:04.634 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:21:04.786 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:21:04.791 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:21:04.797 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:21:04.797 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:21:38.106 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:21:38.175 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:21:38.502 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:21:38.503 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:21:40.687 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:21:42.878 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +14:21:42.880 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:21:42.880 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:21:42.994 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:21:55.790 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:21:55.791 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:21:55.791 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:22:01.229 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:22:02.642 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +14:22:02.662 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:22:02.662 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:22:02.943 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +14:22:03.650 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 26.172 seconds (JVM running for 27.305) +14:22:03.664 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +14:22:03.664 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +14:22:03.665 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +14:22:03.752 [RMI TCP Connection(17)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:29:50.976 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:29:51.027 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:29:51.163 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:29:51.165 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:29:51.169 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:29:51.170 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:31:58.694 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:31:58.759 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:31:59.070 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:31:59.071 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:32:00.981 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:32:03.803 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +14:32:03.806 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:32:03.806 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:32:03.989 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:32:20.107 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:32:20.108 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:32:20.108 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:32:25.322 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:32:27.078 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +14:32:27.103 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:32:27.104 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:32:27.441 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +14:32:28.202 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 30.071 seconds (JVM running for 30.928) +14:32:28.216 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +14:32:28.217 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +14:32:28.218 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +14:32:28.484 [RMI TCP Connection(3)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:36:29.995 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +14:36:30.299 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +14:36:30.434 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +14:36:30.436 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +14:36:30.438 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +14:36:30.438 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +14:36:53.175 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:36:53.241 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +14:36:53.600 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:36:53.600 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:36:55.701 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:36:58.341 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +14:36:58.343 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:36:58.343 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:36:58.461 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:37:21.914 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +14:37:21.915 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +14:37:21.916 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +14:37:28.373 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:37:29.814 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +14:37:29.836 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:37:29.836 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:37:30.053 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +14:37:30.760 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 38.227 seconds (JVM running for 39.065) +14:37:30.773 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +14:37:30.774 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +14:37:30.775 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +14:37:31.182 [RMI TCP Connection(6)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +16:00:36.962 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:00:36.991 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +16:00:37.126 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +16:00:37.129 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +16:00:37.135 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +16:00:37.135 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye +16:05:30.504 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +16:05:30.564 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +16:05:30.861 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:30.862 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:32.558 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +16:05:34.705 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +16:05:34.707 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +16:05:34.707 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +16:05:34.819 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +16:05:37.285 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +16:05:37.286 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +16:05:37.287 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +16:05:41.875 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +16:05:43.512 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +16:05:43.534 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +16:05:43.534 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +16:05:43.757 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +16:05:44.807 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 14.803 seconds (JVM running for 15.982) +16:05:44.825 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +16:05:44.826 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +16:05:44.826 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +16:05:45.225 [http-nio-9201-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +20:27:46.352 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +20:27:46.367 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +20:27:46.544 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +20:27:46.558 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +20:27:46.571 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +20:27:46.572 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-system/info.log b/logs/muyu-system/info.log new file mode 100644 index 0000000..f25d6c5 --- /dev/null +++ b/logs/muyu-system/info.log @@ -0,0 +1,28 @@ +10:05:17.462 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +10:05:17.534 [background-preinit] INFO o.h.v.i.util.Version - [,21] - HV000001: Hibernate Validator 6.2.5.Final +10:05:17.996 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:17.997 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:20.562 [main] INFO c.r.s.MuYuSystemApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +10:05:23.194 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] +10:05:23.197 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +10:05:23.197 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +10:05:23.376 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +10:05:24.800 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1,master} inited +10:05:24.801 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,154] - dynamic-datasource - add a datasource named [master] success +10:05:24.802 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,234] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] +10:05:28.970 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +10:05:30.624 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9201"] +10:05:30.647 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +10:05:30.647 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +10:05:30.864 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-system 10.1.123.83:9201 register finished +10:05:31.748 [main] INFO c.r.s.MuYuSystemApplication - [logStarted,61] - Started MuYuSystemApplication in 14.986 seconds (JVM running for 15.949) +10:05:31.768 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system, group=DEFAULT_GROUP +10:05:31.768 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system.yml, group=DEFAULT_GROUP +10:05:31.770 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-system-dev.yml, group=DEFAULT_GROUP +10:05:32.224 [RMI TCP Connection(11)-10.1.123.83] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +17:29:55.982 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +17:29:56.009 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. +17:29:56.271 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,211] - dynamic-datasource start closing .... +17:29:56.293 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2138] - {dataSource-1} closing ... +17:29:56.310 [SpringApplicationShutdownHook] INFO c.a.d.p.DruidDataSource - [close,2211] - {dataSource-1} closed +17:29:56.311 [SpringApplicationShutdownHook] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource all closed success,bye diff --git a/logs/muyu-visual-monitor/error.log b/logs/muyu-visual-monitor/error.log new file mode 100644 index 0000000..0729cea --- /dev/null +++ b/logs/muyu-visual-monitor/error.log @@ -0,0 +1,278 @@ +15:07:39.413 [http-nio-9100-exec-10] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 6 milliseconds, 693600 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@66a89744[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@1172993c, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@7e403d73, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@5c03a18e}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor119.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor112.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:164) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 6 milliseconds, 693600 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@66a89744[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@1172993c, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@7e403d73, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@5c03a18e}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 132 common frames omitted +15:19:39.388 [http-nio-9100-exec-10] ERROR c.a.c.n.d.NacosDiscoveryClient - [getServices,86] - get service name from nacos server failed. +com.alibaba.nacos.api.exception.NacosException: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 milliseconds, 973300 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@2db24ede[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@1172993c, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@7e403d73, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@5c03a18e}}}]] + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:78) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:641) + at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:619) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:356) + at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.getServiceList(NamingGrpcClientProxy.java:282) + at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.getServiceList(NamingClientProxyDelegate.java:162) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:461) + at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:449) + at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:70) + at com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.getServices(NacosDiscoveryClient.java:80) + at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getServices(CompositeDiscoveryClient.java:68) + at org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator.health(DiscoveryClientHealthIndicator.java:73) + at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:104) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.getHealth(HealthEndpointWebExtension.java:46) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) + at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:90) + at org.springframework.boot.actuate.health.HealthEndpointWebExtension.health(HealthEndpointWebExtension.java:79) + at jdk.internal.reflect.GeneratedMethodAccessor119.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) + at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) + at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:357) + at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:464) + at jdk.internal.reflect.GeneratedMethodAccessor112.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:164) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: java.util.concurrent.TimeoutException: Waited 3000 milliseconds (plus 5 milliseconds, 973300 nanoseconds delay) for com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls$GrpcFuture@2db24ede[status=PENDING, info=[GrpcFuture{clientCall=ClientCallImpl{method=MethodDescriptor{fullMethodName=Request/request, type=UNARY, idempotent=false, safe=false, sampledToLocalTracing=true, requestMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@1172993c, responseMarshaller=com.alibaba.nacos.shaded.io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller@7e403d73, schemaDescriptor=com.alibaba.nacos.api.grpc.auto.RequestGrpc$RequestMethodDescriptorSupplier@5c03a18e}}}]] + at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:508) + at com.alibaba.nacos.common.remote.client.grpc.GrpcConnection.request(GrpcConnection.java:76) + ... 132 common frames omitted diff --git a/logs/muyu-visual-monitor/info.log b/logs/muyu-visual-monitor/info.log new file mode 100644 index 0000000..430c564 --- /dev/null +++ b/logs/muyu-visual-monitor/info.log @@ -0,0 +1,99 @@ +14:05:31.127 [main] INFO c.a.n.c.e.SearchableProperties - [sortPropertySourceDefaultOrder,197] - properties search order:PROPERTIES->JVM->ENV->DEFAULT_SETTING +14:05:31.510 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:31.511 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:33.635 [main] INFO c.r.m.m.MuYuMonitorApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "dev" +14:05:34.819 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9100"] +14:05:34.821 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] +14:05:34.822 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.76] +14:05:34.906 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext +14:05:35.440 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. +14:05:36.763 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-9100"] +14:05:36.922 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. +14:05:36.922 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. +14:05:37.091 [main] INFO c.a.c.n.r.NacosServiceRegistry - [register,76] - nacos registry, DEFAULT_GROUP ruoyi-monitor 10.1.123.83:9100 register finished +14:05:37.522 [http-nio-9100-exec-1] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet' +14:05:37.671 [main] INFO c.r.m.m.MuYuMonitorApplication - [logStarted,61] - Started MuYuMonitorApplication in 7.075 seconds (JVM running for 8.088) +14:05:37.681 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-monitor, group=DEFAULT_GROUP +14:05:37.682 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-monitor-dev.yml, group=DEFAULT_GROUP +14:05:37.682 [main] INFO c.a.c.n.r.NacosContextRefresher - [registerNacosListener,129] - [Nacos Config] Listening config: dataId=ruoyi-monitor.yml, group=DEFAULT_GROUP +14:06:18.426 [reactor-http-nio-11] INFO d.c.b.a.s.s.StatusUpdater - [logError,130] - Couldn't retrieve status for Instance(id=cebd5e28d4d5, version=2, registration=Registration(name=ruoyi-product, managementUrl=http://10.1.123.83:9302/actuator, healthUrl=http://10.1.123.83:9302/actuator/health, serviceUrl=http://10.1.123.83:9302, source=discovery), registered=true, statusInfo=StatusInfo(status=UP, details={}), statusTimestamp=2024-03-24T06:05:37.524131600Z, info=Info(values={}), endpoints=Endpoints(endpoints={sentinel=Endpoint(id=sentinel, url=http://10.1.123.83:9302/actuator/sentinel), caches=Endpoint(id=caches, url=http://10.1.123.83:9302/actuator/caches), loggers=Endpoint(id=loggers, url=http://10.1.123.83:9302/actuator/loggers), nacosconfig=Endpoint(id=nacosconfig, url=http://10.1.123.83:9302/actuator/nacosconfig), health=Endpoint(id=health, url=http://10.1.123.83:9302/actuator/health), refresh=Endpoint(id=refresh, url=http://10.1.123.83:9302/actuator/refresh), env=Endpoint(id=env, url=http://10.1.123.83:9302/actuator/env), nacosdiscovery=Endpoint(id=nacosdiscovery, url=http://10.1.123.83:9302/actuator/nacosdiscovery), serviceregistry=Endpoint(id=serviceregistry, url=http://10.1.123.83:9302/actuator/serviceregistry), heapdump=Endpoint(id=heapdump, url=http://10.1.123.83:9302/actuator/heapdump), features=Endpoint(id=features, url=http://10.1.123.83:9302/actuator/features), scheduledtasks=Endpoint(id=scheduledtasks, url=http://10.1.123.83:9302/actuator/scheduledtasks), mappings=Endpoint(id=mappings, url=http://10.1.123.83:9302/actuator/mappings), beans=Endpoint(id=beans, url=http://10.1.123.83:9302/actuator/beans), configprops=Endpoint(id=configprops, url=http://10.1.123.83:9302/actuator/configprops), threaddump=Endpoint(id=threaddump, url=http://10.1.123.83:9302/actuator/threaddump), metrics=Endpoint(id=metrics, url=http://10.1.123.83:9302/actuator/metrics), conditions=Endpoint(id=conditions, url=http://10.1.123.83:9302/actuator/conditions), info=Endpoint(id=info, url=http://10.1.123.83:9302/actuator/info)}), buildVersion=null, tags=Tags(values={})) +org.springframework.web.reactive.function.client.WebClientRequestException: Connection refused: no further information: /10.1.123.83:9302; nested exception is io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /10.1.123.83:9302 + at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141) + Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: +Error has been observed at the following site(s): + *__checkpoint ⇢ Request to GET health [DefaultWebClient] +Original Stack Trace: + at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141) + at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55) + at reactor.core.publisher.Mono.subscribe(Mono.java:4490) + at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) + at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) + at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) + at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222) + at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93) + at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204) + at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) + at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225) + at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274) + at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) + at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:415) + at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:251) + at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) + at reactor.core.publisher.EmitterProcessor.drain(EmitterProcessor.java:537) + at reactor.core.publisher.EmitterProcessor.tryEmitNext(EmitterProcessor.java:343) + at reactor.core.publisher.SinkManySerialized.tryEmitNext(SinkManySerialized.java:100) + at reactor.core.publisher.InternalManySink.emitNext(InternalManySink.java:27) + at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:190) + at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201) + at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect$ClientTransportSubscriber.onError(HttpClientConnect.java:311) + at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201) + at reactor.netty.resources.DefaultPooledConnectionProvider$DisposableAcquire.onError(DefaultPooledConnectionProvider.java:160) + at reactor.netty.internal.shaded.reactor.pool.AbstractPool$Borrower.fail(AbstractPool.java:475) + at reactor.netty.internal.shaded.reactor.pool.SimpleDequePool.lambda$drainLoop$9(SimpleDequePool.java:431) + at reactor.core.publisher.FluxDoOnEach$DoOnEachSubscriber.onError(FluxDoOnEach.java:186) + at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201) + at reactor.netty.resources.DefaultPooledConnectionProvider$PooledConnectionAllocator$PooledConnectionInitializer.onError(DefaultPooledConnectionProvider.java:558) + at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:192) + at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:259) + at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) + at reactor.core.publisher.Operators.error(Operators.java:198) + at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) + at reactor.core.publisher.Mono.subscribe(Mono.java:4490) + at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) + at reactor.netty.transport.TransportConnector$MonoChannelPromise.tryFailure(TransportConnector.java:580) + at reactor.netty.transport.TransportConnector$MonoChannelPromise.setFailure(TransportConnector.java:534) + at reactor.netty.transport.TransportConnector.lambda$doConnect$7(TransportConnector.java:265) + at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) + at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583) + at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559) + at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) + at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) + at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629) + at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:321) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:337) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base/java.lang.Thread.run(Thread.java:833) +Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /10.1.123.83:9302 +Caused by: java.net.ConnectException: Connection refused: no further information + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) + at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:946) + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base/java.lang.Thread.run(Thread.java:833) +16:47:18.810 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,95] - De-registering from Nacos Server now... +16:47:18.841 [SpringApplicationShutdownHook] INFO c.a.c.n.r.NacosServiceRegistry - [deregister,115] - De-registration finished. diff --git a/muyu-common-cache.iml b/muyu-common-cache.iml new file mode 100644 index 0000000..ca9ddde --- /dev/null +++ b/muyu-common-cache.iml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/muyu-ruoyi-server/.gitignore b/muyu-ruoyi-server/.gitignore new file mode 100644 index 0000000..09bdfea --- /dev/null +++ b/muyu-ruoyi-server/.gitignore @@ -0,0 +1,46 @@ +###################################################################### +# Build Tools + +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### JRebel ### +rebel.xml +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.xml.versionsBackup +*.swp + +!*/build/*.java +!*/build/*.html +!*/build/*.xml \ No newline at end of file diff --git a/muyu-ruoyi-server/LICENSE b/muyu-ruoyi-server/LICENSE new file mode 100644 index 0000000..bd95df1 --- /dev/null +++ b/muyu-ruoyi-server/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 若依 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/muyu-ruoyi-server/README.md b/muyu-ruoyi-server/README.md new file mode 100644 index 0000000..b266756 --- /dev/null +++ b/muyu-ruoyi-server/README.md @@ -0,0 +1,26 @@ +## 系统模块 + +~~~ +com.ruoyi +├── muyu-ui // 前端框架 [80] +├── muyu-gateway // 网关模块 [8080] +├── muyu-auth // 认证中心 [9200] +├── muyu-common // 通用模块 +│ └── muyu-common-core // 核心模块 +│ └── muyu-common-datascope // 权限范围 +│ └── muyu-common-datasource // 多数据源 +│ └── muyu-common-log // 日志记录 +│ └── muyu-common-redis // 缓存服务 +│ └── muyu-common-seata // 分布式事务 +│ └── muyu-common-security // 安全模块 +│ └── muyu-common-swagger // 系统接口 +│ └── muyu-common-system // 系统基础 +├── muyu-modules // 业务模块 +│ └── muyu-system // 系统模块 [9201] +│ └── muyu-gen // 代码生成 [9202] +│ └── muyu-job // 定时任务 [9203] +│ └── muyu-file // 文件服务 [9300] +├── muyu-visual // 图形化管理模块 +│ └── muyu-visual-monitor // 监控中心 [9100] +├──pom.xml // 公共依赖 +~~~ diff --git a/muyu-ruoyi-server/bin/clean.bat b/muyu-ruoyi-server/bin/clean.bat new file mode 100644 index 0000000..24c0974 --- /dev/null +++ b/muyu-ruoyi-server/bin/clean.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] target· +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean + +pause \ No newline at end of file diff --git a/muyu-ruoyi-server/bin/package.bat b/muyu-ruoyi-server/bin/package.bat new file mode 100644 index 0000000..c693ec0 --- /dev/null +++ b/muyu-ruoyi-server/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅwar/jarļ +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean package -Dmaven.test.skip=true + +pause \ No newline at end of file diff --git a/muyu-ruoyi-server/bin/run-auth.bat b/muyu-ruoyi-server/bin/run-auth.bat new file mode 100644 index 0000000..b1920f4 --- /dev/null +++ b/muyu-ruoyi-server/bin/run-auth.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Auth���̡� +echo. + +cd %~dp0 +cd ../muyu-auth/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-auth.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/bin/run-gateway.bat b/muyu-ruoyi-server/bin/run-gateway.bat new file mode 100644 index 0000000..ed93b8e --- /dev/null +++ b/muyu-ruoyi-server/bin/run-gateway.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Gateway���̡� +echo. + +cd %~dp0 +cd ../muyu-gateway/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-gateway.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/bin/run-modules-file.bat b/muyu-ruoyi-server/bin/run-modules-file.bat new file mode 100644 index 0000000..4e97ab9 --- /dev/null +++ b/muyu-ruoyi-server/bin/run-modules-file.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Modules-File���̡� +echo. + +cd %~dp0 +cd ../muyu-modules/muyu-file/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-file.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/bin/run-modules-gen.bat b/muyu-ruoyi-server/bin/run-modules-gen.bat new file mode 100644 index 0000000..be9d9c6 --- /dev/null +++ b/muyu-ruoyi-server/bin/run-modules-gen.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Modules-Gen���̡� +echo. + +cd %~dp0 +cd ../muyu-modules/muyu-gen/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-gen.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/bin/run-modules-job.bat b/muyu-ruoyi-server/bin/run-modules-job.bat new file mode 100644 index 0000000..a6ce652 --- /dev/null +++ b/muyu-ruoyi-server/bin/run-modules-job.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Modules-Job���̡� +echo. + +cd %~dp0 +cd ../muyu-modules/muyu-job/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-job.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/bin/run-modules-system.bat b/muyu-ruoyi-server/bin/run-modules-system.bat new file mode 100644 index 0000000..fc727b2 --- /dev/null +++ b/muyu-ruoyi-server/bin/run-modules-system.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Modules-System���̡� +echo. + +cd %~dp0 +cd ../muyu-modules/muyu-system/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-modules-system.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/bin/run-monitor.bat b/muyu-ruoyi-server/bin/run-monitor.bat new file mode 100644 index 0000000..8a8bc01 --- /dev/null +++ b/muyu-ruoyi-server/bin/run-monitor.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Monitor���̡� +echo. + +cd %~dp0 +cd ../muyu-visual/muyu-monitor/target + +set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar muyu-visual-monitor.jar + +cd bin +pause diff --git a/muyu-ruoyi-server/docker/copy.sh b/muyu-ruoyi-server/docker/copy.sh new file mode 100644 index 0000000..0496600 --- /dev/null +++ b/muyu-ruoyi-server/docker/copy.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# 复制项目的文件到对应docker路径,便于一键生成镜像。 +usage() { + echo "Usage: sh copy.sh" + exit 1 +} + + +# copy sql +echo "begin copy sql " +cp ../sql/ry_20230706.sql ./mysql/db +cp ../sql/ry_config_20220929.sql ./mysql/db + +# copy html +echo "begin copy html " +cp -r ../muyu-ui/dist/** ./nginx/html/dist + + +# copy jar +echo "begin copy muyu-gateway " +cp ../muyu-gateway/target/muyu-gateway.jar ./muyu/gateway/jar + +echo "begin copy muyu-auth " +cp ../muyu-auth/target/muyu-auth.jar ./muyu/auth/jar + +echo "begin copy muyu-visual " +cp ../muyu-visual/muyu-monitor/target/muyu-visual-monitor.jar ./muyu/visual/monitor/jar + +echo "begin copy muyu-modules-system " +cp ../muyu-modules/muyu-system/target/muyu-modules-system.jar ./muyu/modules/system/jar + +echo "begin copy muyu-modules-file " +cp ../muyu-modules/muyu-file/target/muyu-modules-file.jar ./muyu/modules/file/jar + +echo "begin copy muyu-modules-job " +cp ../muyu-modules/muyu-job/target/muyu-modules-job.jar ./muyu/modules/job/jar + +echo "begin copy muyu-modules-gen " +cp ../muyu-modules/muyu-gen/target/muyu-modules-gen.jar ./muyu/modules/gen/jar + diff --git a/muyu-ruoyi-server/docker/deploy.sh b/muyu-ruoyi-server/docker/deploy.sh new file mode 100644 index 0000000..b980f64 --- /dev/null +++ b/muyu-ruoyi-server/docker/deploy.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +# 使用说明,用来提示输入参数 +usage() { + echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]" + exit 1 +} + +# 开启所需端口 +port(){ + firewall-cmd --add-port=80/tcp --permanent + firewall-cmd --add-port=8080/tcp --permanent + firewall-cmd --add-port=8848/tcp --permanent + firewall-cmd --add-port=9848/tcp --permanent + firewall-cmd --add-port=9849/tcp --permanent + firewall-cmd --add-port=6379/tcp --permanent + firewall-cmd --add-port=3306/tcp --permanent + firewall-cmd --add-port=9100/tcp --permanent + firewall-cmd --add-port=9200/tcp --permanent + firewall-cmd --add-port=9201/tcp --permanent + firewall-cmd --add-port=9202/tcp --permanent + firewall-cmd --add-port=9203/tcp --permanent + firewall-cmd --add-port=9300/tcp --permanent + service firewalld restart +} + +# 启动基础环境(必须) +base(){ + docker-compose up -d muyu-mysql muyu-redis muyu-nacos +} + +# 启动程序模块(必须) +modules(){ + docker-compose up -d muyu-nginx muyu-gateway muyu-auth muyu-modules-system +} + +# 关闭所有环境/模块 +stop(){ + docker-compose stop +} + +# 删除所有环境/模块 +rm(){ + docker-compose rm +} + +# 根据输入参数,选择执行对应方法,不输入则执行使用说明 +case "$1" in +"port") + port +;; +"base") + base +;; +"modules") + modules +;; +"stop") + stop +;; +"rm") + rm +;; +*) + usage +;; +esac diff --git a/muyu-ruoyi-server/docker/docker-compose.yml b/muyu-ruoyi-server/docker/docker-compose.yml new file mode 100644 index 0000000..4dc1d87 --- /dev/null +++ b/muyu-ruoyi-server/docker/docker-compose.yml @@ -0,0 +1,140 @@ +version : '3.8' +services: + muyu-nacos: + container_name: muyu-nacos + image: nacos/nacos-server + build: + context: ./nacos + environment: + - MODE=standalone + volumes: + - ./nacos/logs/:/home/nacos/logs + - ./nacos/conf/application.properties:/home/nacos/conf/application.properties + ports: + - "8848:8848" + - "9848:9848" + - "9849:9849" + depends_on: + - muyu-mysql + muyu-mysql: + container_name: muyu-mysql + image: mysql:5.7 + build: + context: ./mysql + ports: + - "3306:3306" + volumes: + - ./mysql/conf:/etc/mysql/conf.d + - ./mysql/logs:/logs + - ./mysql/data:/var/lib/mysql + command: [ + 'mysqld', + '--innodb-buffer-pool-size=80M', + '--character-set-server=utf8mb4', + '--collation-server=utf8mb4_unicode_ci', + '--default-time-zone=+8:00', + '--lower-case-table-names=1' + ] + environment: + MYSQL_DATABASE: 'ry-cloud' + MYSQL_ROOT_PASSWORD: gtl@123 + muyu-redis: + container_name: muyu-redis + image: redis + build: + context: ./redis + ports: + - "6379:6379" + volumes: + - ./redis/conf/redis.conf:/home/muyu/redis/redis.conf + - ./redis/data:/data + command: redis-server /home/muyu/redis/redis.conf + muyu-nginx: + container_name: muyu-nginx + image: nginx + build: + context: ./nginx + ports: + - "80:80" + volumes: + - ./nginx/html/dist:/home/muyu/projects/muyu-ui + - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf + - ./nginx/logs:/var/log/nginx + - ./nginx/conf.d:/etc/nginx/conf.d + depends_on: + - muyu-gateway + links: + - muyu-gateway + muyu-gateway: + container_name: muyu-gateway + build: + context: ./muyu/gateway + dockerfile: dockerfile + ports: + - "8080:8080" + depends_on: + - muyu-redis + links: + - muyu-redis + muyu-auth: + container_name: muyu-auth + build: + context: ./muyu/auth + dockerfile: dockerfile + ports: + - "9200:9200" + depends_on: + - muyu-redis + links: + - muyu-redis + muyu-modules-system: + container_name: muyu-modules-system + build: + context: ./muyu/modules/system + dockerfile: dockerfile + ports: + - "9201:9201" + depends_on: + - muyu-redis + - muyu-mysql + links: + - muyu-redis + - muyu-mysql + muyu-modules-gen: + container_name: muyu-modules-gen + build: + context: ./muyu/modules/gen + dockerfile: dockerfile + ports: + - "9202:9202" + depends_on: + - muyu-mysql + links: + - muyu-mysql + muyu-modules-job: + container_name: muyu-modules-job + build: + context: ./muyu/modules/job + dockerfile: dockerfile + ports: + - "9203:9203" + depends_on: + - muyu-mysql + links: + - muyu-mysql + muyu-modules-file: + container_name: muyu-modules-file + build: + context: ./muyu/modules/file + dockerfile: dockerfile + ports: + - "9300:9300" + volumes: + - ./muyu/uploadPath:/home/muyu/uploadPath + muyu-visual-monitor: + container_name: muyu-visual-monitor + build: + context: ./muyu/visual/monitor + dockerfile: dockerfile + ports: + - "9100:9100" diff --git a/muyu-ruoyi-server/docker/muyu/auth/dockerfile b/muyu-ruoyi-server/docker/muyu/auth/dockerfile new file mode 100644 index 0000000..2ad5344 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/auth/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-auth.jar /home/muyu/muyu-auth.jar +# 启动认证服务 +ENTRYPOINT ["java","-jar","muyu-auth.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/auth/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/auth/jar/readme.txt new file mode 100644 index 0000000..c35ba27 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/auth/jar/readme.txt @@ -0,0 +1 @@ +֤ĴõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/muyu/gateway/dockerfile b/muyu-ruoyi-server/docker/muyu/gateway/dockerfile new file mode 100644 index 0000000..31d1287 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/gateway/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-gateway.jar /home/muyu/muyu-gateway.jar +# 启动网关服务 +ENTRYPOINT ["java","-jar","muyu-gateway.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/gateway/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/gateway/jar/readme.txt new file mode 100644 index 0000000..5dfbec7 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/gateway/jar/readme.txt @@ -0,0 +1 @@ +ģõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/muyu/modules/file/dockerfile b/muyu-ruoyi-server/docker/muyu/modules/file/dockerfile new file mode 100644 index 0000000..195fd9c --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/file/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-modules-file.jar /home/muyu/muyu-modules-file.jar +# 启动文件服务 +ENTRYPOINT ["java","-jar","muyu-modules-file.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/modules/file/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/modules/file/jar/readme.txt new file mode 100644 index 0000000..bf2b2a7 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/file/jar/readme.txt @@ -0,0 +1 @@ +ļõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/muyu/modules/gen/dockerfile b/muyu-ruoyi-server/docker/muyu/modules/gen/dockerfile new file mode 100644 index 0000000..832c9b7 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/gen/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-modules-gen.jar /home/muyu/muyu-modules-gen.jar +# 启动代码生成服务 +ENTRYPOINT ["java","-jar","muyu-modules-gen.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/modules/gen/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/modules/gen/jar/readme.txt new file mode 100644 index 0000000..2f25c0a --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/gen/jar/readme.txt @@ -0,0 +1 @@ +ŴɴõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/muyu/modules/job/dockerfile b/muyu-ruoyi-server/docker/muyu/modules/job/dockerfile new file mode 100644 index 0000000..128b96e --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/job/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-modules-job.jar /home/muyu/muyu-modules-job.jar +# 启动定时任务服务 +ENTRYPOINT ["java","-jar","muyu-modules-job.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/modules/job/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/modules/job/jar/readme.txt new file mode 100644 index 0000000..58aea0b --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/job/jar/readme.txt @@ -0,0 +1 @@ +ŶʱõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/muyu/modules/system/dockerfile b/muyu-ruoyi-server/docker/muyu/modules/system/dockerfile new file mode 100644 index 0000000..79a68de --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/system/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-modules-system.jar /home/muyu/muyu-modules-system.jar +# 启动系统服务 +ENTRYPOINT ["java","-jar","muyu-modules-system.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/modules/system/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/modules/system/jar/readme.txt new file mode 100644 index 0000000..cfc2a92 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/modules/system/jar/readme.txt @@ -0,0 +1 @@ +ϵͳģõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/muyu/visual/monitor/dockerfile b/muyu-ruoyi-server/docker/muyu/visual/monitor/dockerfile new file mode 100644 index 0000000..5a48299 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/visual/monitor/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM openjdk:8-jre +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu +# 创建目录 +RUN mkdir -p /home/muyu +# 指定路径 +WORKDIR /home/muyu +# 复制jar文件到路径 +COPY ./jar/muyu-visual-monitor.jar /home/muyu/muyu-visual-monitor.jar +# 启动系统服务 +ENTRYPOINT ["java","-jar","muyu-visual-monitor.jar"] diff --git a/muyu-ruoyi-server/docker/muyu/visual/monitor/jar/readme.txt b/muyu-ruoyi-server/docker/muyu/visual/monitor/jar/readme.txt new file mode 100644 index 0000000..62b2841 --- /dev/null +++ b/muyu-ruoyi-server/docker/muyu/visual/monitor/jar/readme.txt @@ -0,0 +1 @@ +żĴõjarļdockerӦá \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/mysql/db/readme.txt b/muyu-ruoyi-server/docker/mysql/db/readme.txt new file mode 100644 index 0000000..0b22f3f --- /dev/null +++ b/muyu-ruoyi-server/docker/mysql/db/readme.txt @@ -0,0 +1 @@ +sqlĿ¼µнűdockerԶִС \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/mysql/dockerfile b/muyu-ruoyi-server/docker/mysql/dockerfile new file mode 100644 index 0000000..19bb23f --- /dev/null +++ b/muyu-ruoyi-server/docker/mysql/dockerfile @@ -0,0 +1,7 @@ +# 基础镜像 +FROM mysql:5.7 +# author +MAINTAINER muyu + +# 执行sql脚本 +ADD ./db/*.sql /docker-entrypoint-initdb.d/ diff --git a/muyu-ruoyi-server/docker/nacos/conf/application.properties b/muyu-ruoyi-server/docker/nacos/conf/application.properties new file mode 100644 index 0000000..95e5ed9 --- /dev/null +++ b/muyu-ruoyi-server/docker/nacos/conf/application.properties @@ -0,0 +1,32 @@ +spring.datasource.platform=mysql +db.num=1 +db.url.0=jdbc:mysql://muyu-mysql:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC +db.user=root +db.password=gtl@123 + +nacos.naming.empty-service.auto-clean=true +nacos.naming.empty-service.clean.initial-delay-ms=50000 +nacos.naming.empty-service.clean.period-time-ms=30000 + +management.endpoints.web.exposure.include=* + +management.metrics.export.elastic.enabled=false +management.metrics.export.influx.enabled=false + +server.tomcat.accesslog.enabled=true +server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i + +server.tomcat.basedir=/home/muyu/nacos/tomcat/logs + +nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** + +nacos.core.auth.system.type=nacos +nacos.core.auth.enabled=false +nacos.core.auth.default.token.expire.seconds=18000 +nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 +nacos.core.auth.caching.enabled=true +nacos.core.auth.enable.userAgentAuthWhite=false +nacos.core.auth.server.identity.key=serverIdentity +nacos.core.auth.server.identity.value=security + +nacos.istio.mcp.server.enabled=false diff --git a/muyu-ruoyi-server/docker/nacos/dockerfile b/muyu-ruoyi-server/docker/nacos/dockerfile new file mode 100644 index 0000000..6942d96 --- /dev/null +++ b/muyu-ruoyi-server/docker/nacos/dockerfile @@ -0,0 +1,7 @@ +# 基础镜像 +FROM nacos/nacos-server +# author +MAINTAINER muyu + +# 复制conf文件到路径 +COPY ./conf/application.properties /home/nacos/conf/application.properties diff --git a/muyu-ruoyi-server/docker/nginx/conf/nginx.conf b/muyu-ruoyi-server/docker/nginx/conf/nginx.conf new file mode 100644 index 0000000..64f13eb --- /dev/null +++ b/muyu-ruoyi-server/docker/nginx/conf/nginx.conf @@ -0,0 +1,41 @@ +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; + + location / { + root /home/muyu/projects/muyu-ui; + try_files $uri $uri/ /index.html; + index index.html index.htm; + } + + location /prod-api/{ + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://muyu-gateway:8080/; + } + + # 避免actuator暴露 + if ($request_uri ~ "/actuator") { + return 403; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } +} diff --git a/muyu-ruoyi-server/docker/nginx/dockerfile b/muyu-ruoyi-server/docker/nginx/dockerfile new file mode 100644 index 0000000..c3d3fb2 --- /dev/null +++ b/muyu-ruoyi-server/docker/nginx/dockerfile @@ -0,0 +1,15 @@ +# 基础镜像 +FROM nginx +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu/projects/muyu-ui +# 创建目录 +RUN mkdir -p /home/muyu/projects/muyu-ui +# 指定路径 +WORKDIR /home/muyu/projects/muyu-ui +# 复制conf文件到路径 +COPY ./conf/nginx.conf /etc/nginx/nginx.conf +# 复制html文件到路径 +COPY ./html/dist /home/muyu/projects/muyu-ui diff --git a/muyu-ruoyi-server/docker/redis/conf/redis.conf b/muyu-ruoyi-server/docker/redis/conf/redis.conf new file mode 100644 index 0000000..d762d65 --- /dev/null +++ b/muyu-ruoyi-server/docker/redis/conf/redis.conf @@ -0,0 +1 @@ +# requirepass 123456 \ No newline at end of file diff --git a/muyu-ruoyi-server/docker/redis/dockerfile b/muyu-ruoyi-server/docker/redis/dockerfile new file mode 100644 index 0000000..2dc9477 --- /dev/null +++ b/muyu-ruoyi-server/docker/redis/dockerfile @@ -0,0 +1,13 @@ +# 基础镜像 +FROM redis +# author +MAINTAINER muyu + +# 挂载目录 +VOLUME /home/muyu/redis +# 创建目录 +RUN mkdir -p /home/muyu/redis +# 指定路径 +WORKDIR /home/muyu/redis +# 复制conf文件到路径 +COPY ./conf/redis.conf /home/muyu/redis/redis.conf diff --git a/muyu-ruoyi-server/pom.xml b/muyu-ruoyi-server/pom.xml new file mode 100644 index 0000000..d2a12ca --- /dev/null +++ b/muyu-ruoyi-server/pom.xml @@ -0,0 +1,323 @@ + + + 4.0.0 + + com.muyu + muyu + 3.6.3 + + muyu + + 微服务系统 + + + 3.6.3 + UTF-8 + UTF-8 + 17 + 2.7.13 + 2021.0.8 + 2021.0.5.0 + 2.7.10 + 3.0.0 + 1.6.2 + 1.27.2 + 2.3.3 + 1.4.7 + 1.2.16 + 3.5.2 + 2.13.0 + 2.3 + 2.0.41 + 0.9.1 + 8.2.2 + 4.1.2 + 2.14.3 + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + com.github.tobato + fastdfs-client + ${tobato.version} + + + + + io.swagger + swagger-models + ${swagger.core.version} + + + io.swagger + swagger-annotations + ${swagger.core.version} + + + + + pro.fessional + kaptcha + ${kaptcha.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + commons-io + commons-io + ${commons.io.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jjwt.version} + + + + + com.alibaba + transmittable-thread-local + ${transmittable-thread-local.version} + + + + + com.muyu + muyu-common-core + ${muyu.version} + + + + + com.muyu + muyu-common-cache + ${muyu.version} + + + + + com.muyu + muyu-common-swagger + ${muyu.version} + + + + + com.muyu + muyu-common-security + ${muyu.version} + + + + + com.muyu + muyu-common-datascope + ${muyu.version} + + + + + com.muyu + muyu-common-datasource + ${muyu.version} + + + + + com.muyu + muyu-common-seata + ${muyu.version} + + + + + com.muyu + muyu-common-log + ${muyu.version} + + + + + com.muyu + muyu-common-redis + ${muyu.version} + + + + + com.muyu + muyu-common-system + ${muyu.version} + + + + + com.muyu + ruoyi-product-cache + 3.6.3 + + + + + + + ruoyi-auth + ruoyi-gateway + ruoyi-visual + ruoyi-modules + ruoyi-common + + pom + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + repackage + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + true + + + + compile + + jar + + + + + + + + + + + releases + releases + http://nexus.muyu.com:8081/repository/maven-releases/ + + + + + + public + aliyun nexus + http://nexus.muyu.com:8081/repository/maven-public/ + + true + + + + + + + public + aliyun nexus + http://nexus.muyu.com:8081/repository/maven-public/ + + true + + + false + + + + + diff --git a/muyu-ruoyi-server/ruoyi-auth/pom.xml b/muyu-ruoyi-server/ruoyi-auth/pom.xml new file mode 100644 index 0000000..abe6fd3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/pom.xml @@ -0,0 +1,82 @@ + + + com.muyu + muyu + 3.6.3 + + 4.0.0 + + ruoyi-auth + + + muyu-auth认证授权中心 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.muyu + muyu-common-security + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/MuYuAuthApplication.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/MuYuAuthApplication.java new file mode 100644 index 0000000..83eb3d3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/MuYuAuthApplication.java @@ -0,0 +1,19 @@ +package com.ruoyi.auth; + +import com.ruoyi.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 认证授权中心 + * + * @author muyu + */ +@EnableMyFeignClients +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class MuYuAuthApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuAuthApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java new file mode 100644 index 0000000..5eb5eb9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -0,0 +1,72 @@ +package com.ruoyi.auth.controller; + +import com.ruoyi.auth.form.LoginBody; +import com.ruoyi.auth.form.RegisterBody; +import com.ruoyi.auth.service.SysLoginService; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.auth.AuthUtil; +import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +/** + * token 控制 + * + * @author muyu + */ +@RestController +public class TokenController { + @Autowired + private TokenService tokenService; + + @Autowired + private SysLoginService sysLoginService; + + @PostMapping("login") + public Result login (@RequestBody LoginBody form) { + // 用户登录 + LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); + // 获取登录token + return Result.success(tokenService.createToken(userInfo)); + } + + @DeleteMapping("logout") + public Result logout (HttpServletRequest request) { + String token = SecurityUtils.getToken(request); + if (StringUtils.isNotEmpty(token)) { + String username = JwtUtils.getUserName(token); + // 删除用户缓存记录 + AuthUtil.logoutByToken(token); + // 记录用户退出日志 + sysLoginService.logout(username); + } + return Result.success(); + } + + @PostMapping("refresh") + public Result refresh (HttpServletRequest request) { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser)) { + // 刷新令牌有效期 + tokenService.refreshToken(loginUser); + return Result.success(); + } + return Result.success(); + } + + @PostMapping("register") + public Result register (@RequestBody RegisterBody registerBody) { + // 用户注册 + sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); + return Result.success(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java new file mode 100644 index 0000000..307b599 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java @@ -0,0 +1,34 @@ +package com.ruoyi.auth.form; + +/** + * 用户登录对象 + * + * @author muyu + */ +public class LoginBody { + /** + * 用户名 + */ + private String username; + + /** + * 用户密码 + */ + private String password; + + public String getUsername () { + return username; + } + + public void setUsername (String username) { + this.username = username; + } + + public String getPassword () { + return password; + } + + public void setPassword (String password) { + this.password = password; + } +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java new file mode 100644 index 0000000..3f19cab --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java @@ -0,0 +1,10 @@ +package com.ruoyi.auth.form; + +/** + * 用户注册对象 + * + * @author muyu + */ +public class RegisterBody extends LoginBody { + +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java new file mode 100644 index 0000000..879232a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -0,0 +1,127 @@ +package com.ruoyi.auth.service; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.enums.UserStatus; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.remote.RemoteUserService; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.common.system.domain.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 登录校验方法 + * + * @author muyu + */ +@Component +public class SysLoginService { + @Autowired + private RemoteUserService remoteUserService; + + @Autowired + private SysPasswordService passwordService; + + @Autowired + private SysRecordLogService recordLogService; + + @Autowired + private RedisService redisService; + + /** + * 登录 + */ + public LoginUser login (String username, String password) { + // 用户名或密码为空 错误 + if (StringUtils.isAnyBlank(username, password)) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写"); + throw new ServiceException("用户/密码必须填写"); + } + // 密码如果不在指定范围内 错误 + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围"); + throw new ServiceException("用户密码不在指定范围"); + } + // 用户名不在指定范围内 错误 + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围"); + throw new ServiceException("用户名不在指定范围"); + } + // IP黑名单校验 + String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + // 查询用户信息 + Result userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); + + if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); + throw new ServiceException("登录用户:" + username + " 不存在"); + } + + if (Result.FAIL == userResult.getCode()) { + throw new ServiceException(userResult.getMsg()); + } + + LoginUser userInfo = userResult.getData(); + SysUser user = userResult.getData().getSysUser(); + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + throw new ServiceException("对不起,您的账号:" + username + " 已停用"); + } + passwordService.validate(user, password); + recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功"); + return userInfo; + } + + public void logout (String loginName) { + recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功"); + } + + /** + * 注册 + */ + public void register (String username, String password) { + // 用户名或密码为空 错误 + if (StringUtils.isAnyBlank(username, password)) { + throw new ServiceException("用户/密码必须填写"); + } + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) { + throw new ServiceException("账户长度必须在2到20个字符之间"); + } + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { + throw new ServiceException("密码长度必须在5到20个字符之间"); + } + + // 注册用户信息 + SysUser sysUser = new SysUser(); + sysUser.setUserName(username); + sysUser.setNickName(username); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + Result registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER); + + if (Result.FAIL == registerResult.getCode()) { + throw new ServiceException(registerResult.getMsg()); + } + recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java new file mode 100644 index 0000000..64a198b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysPasswordService.java @@ -0,0 +1,76 @@ +package com.ruoyi.auth.service; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * 登录密码方法 + * + * @author muyu + */ +@Component +public class SysPasswordService { + @Autowired + private RedisService redisService; + + private int maxRetryCount = CacheConstants.PASSWORD_MAX_RETRY_COUNT; + + private Long lockTime = CacheConstants.PASSWORD_LOCK_TIME; + + @Autowired + private SysRecordLogService recordLogService; + + /** + * 登录账户密码错误次数缓存键名 + * + * @param username 用户名 + * + * @return 缓存键key + */ + private String getCacheKey (String username) { + return CacheConstants.PWD_ERR_CNT_KEY + username; + } + + public void validate (SysUser user, String password) { + String username = user.getUserName(); + + Integer retryCount = redisService.getCacheObject(getCacheKey(username)); + + if (retryCount == null) { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) { + String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime); + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, errMsg); + throw new ServiceException(errMsg); + } + + if (!matches(user, password)) { + retryCount = retryCount + 1; + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount)); + redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new ServiceException("用户不存在/密码错误"); + } else { + clearLoginRecordCache(username); + } + } + + public boolean matches (SysUser user, String rawPassword) { + return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); + } + + public void clearLoginRecordCache (String loginName) { + if (redisService.hasKey(getCacheKey(loginName))) { + redisService.deleteObject(getCacheKey(loginName)); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java new file mode 100644 index 0000000..2d29134 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java @@ -0,0 +1,44 @@ +package com.ruoyi.auth.service; + +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; +import com.ruoyi.common.system.remote.RemoteLogService; +import com.ruoyi.common.system.domain.SysLogininfor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 记录日志方法 + * + * @author muyu + */ +@Component +public class SysRecordLogService { + @Autowired + private RemoteLogService remoteLogService; + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息内容 + * + * @return + */ + public void recordLogininfor (String username, String status, String message) { + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(IpUtils.getIpAddr()); + logininfor.setMsg(message); + // 日志状态 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) { + logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS); + } else if (Constants.LOGIN_FAIL.equals(status)) { + logininfor.setStatus(Constants.LOGIN_FAIL_STATUS); + } + remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); + } +} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-auth/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-auth/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..0b36537 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/resources/bootstrap.yml @@ -0,0 +1,25 @@ +# Tomcat +server: + port: 9200 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-auth + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/muyu-ruoyi-server/ruoyi-auth/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-auth/src/main/resources/logback.xml new file mode 100644 index 0000000..4c01154 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-auth/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/pom.xml new file mode 100644 index 0000000..cb0f891 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + com.muyu + ruoyi-common + 3.6.3 + + + muyu-common-cache + + + muyu-common-cache缓存基准 + + + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-common-redis + + + \ No newline at end of file diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java new file mode 100644 index 0000000..d3da0ca --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java @@ -0,0 +1,62 @@ +package com.muyu.common.cache; + +/** + * @author DongZl + * @description: 缓存接口基类 + * @Date 2024-3-26 下午 03:25 + */ +public interface Cache { + + /** + * key前缀 + * @return key前缀 + */ + public String keyPre(); + + + /** + * 编码 + * @param key ID + * @return 键 + */ + public String encode(K key); + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + public K decode(String redisKey); + + /** + * 通过Key获取value值 + * @param key 键 + * @return 值 + */ + public V get(K key); + + /** + * 缓存添加/修改 + * @param key 键 + * @param value 值 + */ + public void put(K key, V value); + + /** + * 通过键删除 + * @param key 键 + */ + public void remove(K key); + + /** + * 刷新缓存时间 + * @param key 键 + */ + public void refreshTime (K key); + + /** + * 刷新缓存数据 + * @param key 键 + */ + public void refreshData (K key); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java new file mode 100644 index 0000000..3b7af97 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java @@ -0,0 +1,96 @@ +package com.muyu.common.cache.abs; + +import com.muyu.common.cache.Cache; +import com.ruoyi.common.redis.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.concurrent.TimeUnit; + +/** + * @author DongZl + * @description: 缓存抽象类 + * @Date 2024-3-27 下午 03:10 + */ +public abstract class CacheAbs implements Cache { + + @Autowired + private RedisService redisService; + + /** + * 编码 + * @param key ID + * @return 键 + */ + @Override + public String encode (K key) { + return keyPre() + key; + } + + /** + * 通过Key获取value值 + * @param key 键 + * @return 值 + */ + @Override + public V get (K key) { + V value = redisService.getCacheObject(encode(key)); + if (value == null){ + value = getData(key); + if (value == null){ + value = defaultValue(); + } + } + this.put(key, value); + return value; + } + + /** + * 缓存添加/修改 + * @param key 键 + * @param value 值 + */ + @Override + public void put (K key, V value) { + this.redisService.setCacheObject(encode(key), value); + } + + /** + * 通过键删除 + * @param key 键 + */ + @Override + public void remove (K key) { + this.redisService.deleteObject(encode(key)); + } + + /** + * 刷新缓存 + * @param key 键 + */ + @Override + public void refreshTime (K key) { + this.redisService.expire(encode(key), 60, TimeUnit.SECONDS); + } + + /** + * 刷新缓存数据 + * + * @param key 键 + */ + @Override + public void refreshData (K key) { + this.put(key, getData(key)); + } + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + public abstract V getData(K key); + + /** + * 默认值 + */ + public abstract V defaultValue(); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/pom.xml new file mode 100644 index 0000000..8506e97 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/pom.xml @@ -0,0 +1,141 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-core + + + muyu-common-core核心模块 + + + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + + + org.springframework + spring-context-support + + + + + org.springframework + spring-web + + + + + com.alibaba + transmittable-thread-local + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + com.baomidou + mybatis-plus-boot-starter + 3.5.3.1 + + + com.github.jsqlparser + jsqlparser + + + org.mybatis + mybatis + + + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba.fastjson2 + fastjson2 + + + + + io.jsonwebtoken + jjwt + + + + + javax.xml.bind + jaxb-api + + + + + org.apache.commons + commons-lang3 + + + + + commons-io + commons-io + + + + + org.apache.poi + poi-ooxml + + + + + javax.servlet + javax.servlet-api + + + + + io.swagger + swagger-annotations + + + + + org.projectlombok + lombok + + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excel.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excel.java new file mode 100644 index 0000000..aa0d3c2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excel.java @@ -0,0 +1,176 @@ +package com.ruoyi.common.core.annotation; + +import com.ruoyi.common.core.utils.poi.ExcelHandlerAdapter; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author muyu + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel { + /** + * 导出时在excel中排序 + */ + public int sort () default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + public String name () default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + public String dateFormat () default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + public String readConverterExp () default ""; + + /** + * 分隔符,读取字符串组内容 + */ + public String separator () default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + public int scale () default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode () default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出时在excel中每个列的高度 + */ + public double height () default 14; + + /** + * 导出时在excel中每个列的宽度 + */ + public double width () default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + public String suffix () default ""; + + /** + * 当值为空时,字段的默认值 + */ + public String defaultValue () default ""; + + /** + * 提示信息 + */ + public String prompt () default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + public String[] combo () default {}; + + /** + * 是否需要纵向合并单元格,应对需求:含有list集合单元格) + */ + public boolean needMerge () default false; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + public boolean isExport () default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + public String targetAttr () default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + public boolean isStatistics () default false; + + /** + * 导出类型(0数字 1字符串) + */ + public ColumnType cellType () default ColumnType.STRING; + + /** + * 导出列头背景颜色 + */ + public IndexedColors headerBackgroundColor () default IndexedColors.GREY_50_PERCENT; + + /** + * 导出列头字体颜色 + */ + public IndexedColors headerColor () default IndexedColors.WHITE; + + /** + * 导出单元格背景颜色 + */ + public IndexedColors backgroundColor () default IndexedColors.WHITE; + + /** + * 导出单元格字体颜色 + */ + public IndexedColors color () default IndexedColors.BLACK; + + /** + * 导出字段对齐方式 + */ + public HorizontalAlignment align () default HorizontalAlignment.CENTER; + + /** + * 自定义数据处理器 + */ + public Class handler () default ExcelHandlerAdapter.class; + + /** + * 自定义数据处理器参数 + */ + public String[] args () default {}; + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type () default Type.ALL; + + public enum Type { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type (int value) { + this.value = value; + } + + public int value () { + return this.value; + } + } + + public enum ColumnType { + NUMERIC(0), STRING(1), IMAGE(2); + private final int value; + + ColumnType (int value) { + this.value = value; + } + + public int value () { + return this.value; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excels.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excels.java new file mode 100644 index 0000000..5f36db1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/annotation/Excels.java @@ -0,0 +1,17 @@ +package com.ruoyi.common.core.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + * @author muyu + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels { + Excel[] value (); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java new file mode 100644 index 0000000..b85370c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java @@ -0,0 +1,58 @@ +package com.ruoyi.common.core.constant; + +/** + * 缓存常量信息 + * + * @author muyu + */ +public class CacheConstants { + /** + * 缓存有效期,默认720(分钟) + */ + public final static long EXPIRATION = 720; + + /** + * 缓存刷新时间,默认120(分钟) + */ + public final static long REFRESH_TIME = 120; + + /** + * 密码最大错误次数 + */ + public final static int PASSWORD_MAX_RETRY_COUNT = 5; + + /** + * 密码锁定时间,默认10(分钟) + */ + public final static long PASSWORD_LOCK_TIME = 10; + + /** + * 权限缓存前缀 + */ + public final static String LOGIN_TOKEN_KEY = "login_tokens:"; + + /** + * 验证码 redis key + */ + public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + + /** + * 参数管理 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 登录账户密码错误次数 redis key + */ + public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; + + /** + * 登录IP黑名单 cache key + */ + public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList"; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java new file mode 100644 index 0000000..54ed09e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java @@ -0,0 +1,134 @@ +package com.ruoyi.common.core.constant; + +/** + * 通用常量信息 + * + * @author muyu + */ +public class Constants { + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * www主域 + */ + public static final String WWW = "www."; + + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi:"; + + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 远程方法调用 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 成功标记 + */ + public static final Integer SUCCESS = 200; + + /** + * 失败标记 + */ + public static final Integer FAIL = 500; + + /** + * 登录成功状态 + */ + public static final String LOGIN_SUCCESS_STATUS = "0"; + + /** + * 登录失败状态 + */ + public static final String LOGIN_FAIL_STATUS = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 注册 + */ + public static final String REGISTER = "Register"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 验证码有效期(分钟) + */ + public static final long CAPTCHA_EXPIRATION = 2; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全) + */ + public static final String[] JSON_WHITELIST_STR = {"org.springframework", "com.ruoyi"}; + + /** + * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) + */ + public static final String[] JOB_WHITELIST_STR = {"com.muyu"}; + + /** + * 定时任务违规的字符 + */ + public static final String[] JOB_ERROR_STR = {"java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework", "org.apache", "com.muyu.common.core.utils.file"}; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/GenConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/GenConstants.java new file mode 100644 index 0000000..8912952 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/GenConstants.java @@ -0,0 +1,186 @@ +package com.ruoyi.common.core.constant; + +/** + * 代码生成通用常量 + * + * @author muyu + */ +public class GenConstants { + /** + * 单表(增删改查) + */ + public static final String TPL_CRUD = "crud"; + + /** + * 树表(增删改查) + */ + public static final String TPL_TREE = "tree"; + + /** + * 主子表(增删改查) + */ + public static final String TPL_SUB = "sub"; + + /** + * 树编码字段 + */ + public static final String TREE_CODE = "treeCode"; + + /** + * 树父编码字段 + */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** + * 树名称字段 + */ + public static final String TREE_NAME = "treeName"; + + /** + * 上级菜单ID字段 + */ + public static final String PARENT_MENU_ID = "parentMenuId"; + + /** + * 上级菜单名称字段 + */ + public static final String PARENT_MENU_NAME = "parentMenuName"; + + /** + * 数据库字符串类型 + */ + public static final String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"}; + + /** + * 数据库文本类型 + */ + public static final String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"}; + + /** + * 数据库时间类型 + */ + public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"}; + + /** + * 数据库数字类型 + */ + public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer", + "bigint", "float", "double", "decimal"}; + + /** + * 页面不需要编辑字段 + */ + public static final String[] COLUMNNAME_NOT_EDIT = {"id", "create_by", "create_time", "del_flag"}; + + /** + * 页面不需要显示的列表字段 + */ + public static final String[] COLUMNNAME_NOT_LIST = {"id", "create_by", "create_time", "del_flag", "update_by", + "update_time"}; + + /** + * 页面不需要查询字段 + */ + public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark"}; + + /** + * Entity基类字段 + */ + public static final String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime", "remark"}; + + /** + * Tree基类字段 + */ + public static final String[] TREE_ENTITY = {"parentName", "parentId", "orderNum", "ancestors"}; + + /** + * 文本框 + */ + public static final String HTML_INPUT = "input"; + + /** + * 文本域 + */ + public static final String HTML_TEXTAREA = "textarea"; + + /** + * 下拉框 + */ + public static final String HTML_SELECT = "select"; + + /** + * 单选框 + */ + public static final String HTML_RADIO = "radio"; + + /** + * 复选框 + */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** + * 日期控件 + */ + public static final String HTML_DATETIME = "datetime"; + + /** + * 图片上传控件 + */ + public static final String HTML_IMAGE_UPLOAD = "imageUpload"; + + /** + * 文件上传控件 + */ + public static final String HTML_FILE_UPLOAD = "fileUpload"; + + /** + * 富文本控件 + */ + public static final String HTML_EDITOR = "editor"; + + /** + * 字符串类型 + */ + public static final String TYPE_STRING = "String"; + + /** + * 整型 + */ + public static final String TYPE_INTEGER = "Integer"; + + /** + * 长整型 + */ + public static final String TYPE_LONG = "Long"; + + /** + * 浮点型 + */ + public static final String TYPE_DOUBLE = "Double"; + + /** + * 高精度计算类型 + */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** + * 时间类型 + */ + public static final String TYPE_DATE = "Date"; + + /** + * 模糊查询 + */ + public static final String QUERY_LIKE = "LIKE"; + + /** + * 相等查询 + */ + public static final String QUERY_EQ = "EQ"; + + /** + * 需要 + */ + public static final String REQUIRE = "1"; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/HttpStatus.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/HttpStatus.java new file mode 100644 index 0000000..eacbe19 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/HttpStatus.java @@ -0,0 +1,93 @@ +package com.ruoyi.common.core.constant; + +/** + * 返回状态码 + * + * @author muyu + */ +public class HttpStatus { + /** + * 操作成功 + */ + public static final int SUCCESS = 200; + + /** + * 对象创建成功 + */ + public static final int CREATED = 201; + + /** + * 请求已经被接受 + */ + public static final int ACCEPTED = 202; + + /** + * 操作已经执行成功,但是没有返回数据 + */ + public static final int NO_CONTENT = 204; + + /** + * 资源已被移除 + */ + public static final int MOVED_PERM = 301; + + /** + * 重定向 + */ + public static final int SEE_OTHER = 303; + + /** + * 资源没有被修改 + */ + public static final int NOT_MODIFIED = 304; + + /** + * 参数列表错误(缺少,格式不匹配) + */ + public static final int BAD_REQUEST = 400; + + /** + * 未授权 + */ + public static final int UNAUTHORIZED = 401; + + /** + * 访问受限,授权过期 + */ + public static final int FORBIDDEN = 403; + + /** + * 资源,服务未找到 + */ + public static final int NOT_FOUND = 404; + + /** + * 不允许的http方法 + */ + public static final int BAD_METHOD = 405; + + /** + * 资源冲突,或者资源被锁 + */ + public static final int CONFLICT = 409; + + /** + * 不支持的数据,媒体类型 + */ + public static final int UNSUPPORTED_TYPE = 415; + + /** + * 系统内部错误 + */ + public static final int ERROR = 500; + + /** + * 接口未实现 + */ + public static final int NOT_IMPLEMENTED = 501; + + /** + * 系统警告消息 + */ + public static final int WARN = 601; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ScheduleConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ScheduleConstants.java new file mode 100644 index 0000000..86f69dd --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ScheduleConstants.java @@ -0,0 +1,56 @@ +package com.ruoyi.common.core.constant; + +/** + * 任务调度通用常量 + * + * @author muyu + */ +public class ScheduleConstants { + public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; + + /** + * 执行目标key + */ + public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; + + /** + * 默认 + */ + public static final String MISFIRE_DEFAULT = "0"; + + /** + * 立即触发执行 + */ + public static final String MISFIRE_IGNORE_MISFIRES = "1"; + + /** + * 触发一次执行 + */ + public static final String MISFIRE_FIRE_AND_PROCEED = "2"; + + /** + * 不触发立即执行 + */ + public static final String MISFIRE_DO_NOTHING = "3"; + + public enum Status { + /** + * 正常 + */ + NORMAL("0"), + /** + * 暂停 + */ + PAUSE("1"); + + private String value; + + private Status (String value) { + this.value = value; + } + + public String getValue () { + return value; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java new file mode 100644 index 0000000..2e5bbf1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.core.constant; + +/** + * 权限相关通用常量 + * + * @author muyu + */ +public class SecurityConstants { + /** + * 用户ID字段 + */ + public static final String DETAILS_USER_ID = "user_id"; + + /** + * 用户名字段 + */ + public static final String DETAILS_USERNAME = "username"; + + /** + * 授权信息字段 + */ + public static final String AUTHORIZATION_HEADER = "authorization"; + + /** + * 请求来源 + */ + public static final String FROM_SOURCE = "from-source"; + + /** + * 内部请求 + */ + public static final String INNER = "inner"; + + /** + * 用户标识 + */ + public static final String USER_KEY = "user_key"; + + /** + * 登录用户 + */ + public static final String LOGIN_USER = "login_user"; + + /** + * 角色权限 + */ + public static final String ROLE_PERMISSION = "role_permission"; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java new file mode 100644 index 0000000..7429022 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java @@ -0,0 +1,23 @@ +package com.ruoyi.common.core.constant; + +/** + * 服务名称 + * + * @author muyu + */ +public class ServiceNameConstants { + /** + * 认证服务的serviceid + */ + public static final String AUTH_SERVICE = "ruoyi-auth"; + + /** + * 系统模块的serviceid + */ + public static final String SYSTEM_SERVICE = "ruoyi-system"; + + /** + * 文件服务的serviceid + */ + public static final String FILE_SERVICE = "ruoyi-file"; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java new file mode 100644 index 0000000..25dc933 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.core.constant; + +/** + * Token的Key常量 + * + * @author muyu + */ +public class TokenConstants { + /** + * 令牌自定义标识 + */ + public static final String AUTHENTICATION = "Authorization"; + + /** + * 令牌前缀 + */ + public static final String PREFIX = "Bearer "; + + /** + * 令牌秘钥 + */ + public final static String SECRET = "abcdefghijklmnopqrstuvwxyz"; + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java new file mode 100644 index 0000000..0173e56 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java @@ -0,0 +1,113 @@ +package com.ruoyi.common.core.constant; + +/** + * 用户常量信息 + * + * @author muyu + */ +public class UserConstants { + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** + * 正常状态 + */ + public static final String NORMAL = "0"; + + /** + * 异常状态 + */ + public static final String EXCEPTION = "1"; + + /** + * 用户封禁状态 + */ + public static final String USER_DISABLE = "1"; + + /** + * 角色封禁状态 + */ + public static final String ROLE_DISABLE = "1"; + + /** + * 部门正常状态 + */ + public static final String DEPT_NORMAL = "0"; + + /** + * 部门停用状态 + */ + public static final String DEPT_DISABLE = "1"; + + /** + * 字典正常状态 + */ + public static final String DICT_NORMAL = "0"; + + /** + * 是否为系统默认(是) + */ + public static final String YES = "Y"; + + /** + * 是否菜单外链(是) + */ + public static final String YES_FRAME = "0"; + + /** + * 是否菜单外链(否) + */ + public static final String NO_FRAME = "1"; + + /** + * 菜单类型(目录) + */ + public static final String TYPE_DIR = "M"; + + /** + * 菜单类型(菜单) + */ + public static final String TYPE_MENU = "C"; + + /** + * 菜单类型(按钮) + */ + public static final String TYPE_BUTTON = "F"; + + /** + * Layout组件标识 + */ + public final static String LAYOUT = "Layout"; + + /** + * ParentView组件标识 + */ + public final static String PARENT_VIEW = "ParentView"; + + /** + * InnerLink组件标识 + */ + public final static String INNER_LINK = "InnerLink"; + + /** + * 校验是否唯一的返回标识 + */ + public final static boolean UNIQUE = true; + public final static boolean NOT_UNIQUE = false; + + /** + * 用户名长度限制 + */ + public static final int USERNAME_MIN_LENGTH = 2; + + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 密码长度限制 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/context/SecurityContextHolder.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/context/SecurityContextHolder.java new file mode 100644 index 0000000..d4e9372 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/context/SecurityContextHolder.java @@ -0,0 +1,83 @@ +package com.ruoyi.common.core.context; + +import com.alibaba.ttl.TransmittableThreadLocal; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.StringUtils; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 获取当前线程变量中的 用户id、用户名称、Token等信息 + * 注意: 必须在网关通过请求头的方法传入,同时在HeaderInterceptor拦截器设置值。 否则这里无法获取 + * + * @author muyu + */ +public class SecurityContextHolder { + private static final TransmittableThreadLocal> THREAD_LOCAL = new TransmittableThreadLocal<>(); + + public static void set (String key, Object value) { + Map map = getLocalMap(); + map.put(key, value == null ? StringUtils.EMPTY : value); + } + + public static String get (String key) { + Map map = getLocalMap(); + return Convert.toStr(map.getOrDefault(key, StringUtils.EMPTY)); + } + + public static T get (String key, Class clazz) { + Map map = getLocalMap(); + return StringUtils.cast(map.getOrDefault(key, null)); + } + + public static Map getLocalMap () { + Map map = THREAD_LOCAL.get(); + if (map == null) { + map = new ConcurrentHashMap(); + THREAD_LOCAL.set(map); + } + return map; + } + + public static void setLocalMap (Map threadLocalMap) { + THREAD_LOCAL.set(threadLocalMap); + } + + public static Long getUserId () { + return Convert.toLong(get(SecurityConstants.DETAILS_USER_ID), 0L); + } + + public static void setUserId (String account) { + set(SecurityConstants.DETAILS_USER_ID, account); + } + + public static String getUserName () { + return get(SecurityConstants.DETAILS_USERNAME); + } + + public static void setUserName (String username) { + set(SecurityConstants.DETAILS_USERNAME, username); + } + + public static String getUserKey () { + return get(SecurityConstants.USER_KEY); + } + + public static void setUserKey (String userKey) { + set(SecurityConstants.USER_KEY, userKey); + } + + public static String getPermission () { + return get(SecurityConstants.ROLE_PERMISSION); + } + + public static void setPermission (String permissions) { + set(SecurityConstants.ROLE_PERMISSION, permissions); + } + + public static void remove () { + THREAD_LOCAL.remove(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/domain/Result.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/domain/Result.java new file mode 100644 index 0000000..c9554f7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/domain/Result.java @@ -0,0 +1,112 @@ +package com.ruoyi.common.core.domain; + +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.HttpStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 响应信息主体 + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Result implements Serializable { + /** + * 成功 + */ + public static final int SUCCESS = Constants.SUCCESS; + /** + * 失败 + */ + public static final int FAIL = Constants.FAIL; + /** + * 警告 + */ + public static final int WARN = HttpStatus.WARN; + + private static final long serialVersionUID = 1L; + private int code; + + private String msg; + + private T data; + + public static Result success () { + return restResult(null, SUCCESS, null); + } + + public static Result success (T data) { + return restResult(data, SUCCESS, null); + } + + public static Result success (T data, String msg) { + return restResult(data, SUCCESS, msg); + } + + public static Result error () { + return restResult(null, FAIL, null); + } + + public static Result error (String msg) { + return restResult(null, FAIL, msg); + } + + public static Result error (T data) { + return restResult(data, FAIL, null); + } + + public static Result error (T data, String msg) { + return restResult(data, FAIL, msg); + } + + public static Result error (int code, String msg) { + return restResult(null, code, msg); + } + + + + public static Result warn () { + return restResult(null, WARN, null); + } + + public static Result warn (String msg) { + return restResult(null, WARN, msg); + } + + public static Result warn (T data) { + return restResult(data, WARN, null); + } + + public static Result warn (T data, String msg) { + return restResult(data, WARN, msg); + } + + public static Result warn (int code, String msg) { + return restResult(null, code, msg); + } + + private static Result restResult (T data, int code, String msg) { + return Result.builder() + .code(code) + .data(data) + .msg(msg) + .build(); + } + + public static Boolean isError (Result ret) { + return !isSuccess(ret); + } + + public static Boolean isSuccess (Result ret) { + return Result.SUCCESS == ret.getCode(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/enums/UserStatus.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/enums/UserStatus.java new file mode 100644 index 0000000..372edf3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/enums/UserStatus.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.core.enums; + +/** + * 用户状态 + * + * @author muyu + */ +public enum UserStatus { + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatus (String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode () { + return code; + } + + public String getInfo () { + return info; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java new file mode 100644 index 0000000..e7ffa41 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CaptchaException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception; + +/** + * 验证码错误异常类 + * + * @author muyu + */ +public class CaptchaException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public CaptchaException (String msg) { + super(msg); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java new file mode 100644 index 0000000..a3a1804 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/CheckedException.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.core.exception; + +/** + * 检查异常 + * + * @author muyu + */ +public class CheckedException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public CheckedException (String message) { + super(message); + } + + public CheckedException (Throwable cause) { + super(cause); + } + + public CheckedException (String message, Throwable cause) { + super(message, cause); + } + + public CheckedException (String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java new file mode 100644 index 0000000..fba3799 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/DemoModeException.java @@ -0,0 +1,13 @@ +package com.ruoyi.common.core.exception; + +/** + * 演示模式异常 + * + * @author muyu + */ +public class DemoModeException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public DemoModeException () { + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java new file mode 100644 index 0000000..48e0e53 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java @@ -0,0 +1,51 @@ +package com.ruoyi.common.core.exception; + +/** + * 全局异常 + * + * @author muyu + */ +public class GlobalException extends RuntimeException { + private static final long serialVersionUID = 1L; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + *

+ * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public GlobalException () { + } + + public GlobalException (String message) { + this.message = message; + } + + public String getDetailMessage () { + return detailMessage; + } + + public GlobalException setDetailMessage (String detailMessage) { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage () { + return message; + } + + public GlobalException setMessage (String message) { + this.message = message; + return this; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java new file mode 100644 index 0000000..ef166c1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/InnerAuthException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception; + +/** + * 内部认证异常 + * + * @author muyu + */ +public class InnerAuthException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public InnerAuthException (String message) { + super(message); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java new file mode 100644 index 0000000..7dd9818 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/PreAuthorizeException.java @@ -0,0 +1,13 @@ +package com.ruoyi.common.core.exception; + +/** + * 权限异常 + * + * @author muyu + */ +public class PreAuthorizeException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public PreAuthorizeException () { + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java new file mode 100644 index 0000000..e965736 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/ServiceException.java @@ -0,0 +1,65 @@ +package com.ruoyi.common.core.exception; + +/** + * 业务异常 + * + * @author muyu + */ +public final class ServiceException extends RuntimeException { + private static final long serialVersionUID = 1L; + + /** + * 错误码 + */ + private Integer code; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + *

+ * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException () { + } + + public ServiceException (String message) { + this.message = message; + } + + public ServiceException (String message, Integer code) { + this.message = message; + this.code = code; + } + + public String getDetailMessage () { + return detailMessage; + } + + public ServiceException setDetailMessage (String detailMessage) { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage () { + return message; + } + + public ServiceException setMessage (String message) { + this.message = message; + return this; + } + + public Integer getCode () { + return code; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java new file mode 100644 index 0000000..b1b8b79 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/UtilException.java @@ -0,0 +1,22 @@ +package com.ruoyi.common.core.exception; + +/** + * 工具类异常 + * + * @author muyu + */ +public class UtilException extends RuntimeException { + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException (Throwable e) { + super(e.getMessage(), e); + } + + public UtilException (String message) { + super(message); + } + + public UtilException (String message, Throwable throwable) { + super(message, throwable); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotLoginException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotLoginException.java new file mode 100644 index 0000000..b7bb2e6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotLoginException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception.auth; + +/** + * 未能通过的登录认证异常 + * + * @author muyu + */ +public class NotLoginException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public NotLoginException (String message) { + super(message); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotPermissionException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotPermissionException.java new file mode 100644 index 0000000..d530c3f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotPermissionException.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.core.exception.auth; + +import org.apache.commons.lang3.StringUtils; + +/** + * 未能通过的权限认证异常 + * + * @author muyu + */ +public class NotPermissionException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public NotPermissionException (String permission) { + super(permission); + } + + public NotPermissionException (String[] permissions) { + super(StringUtils.join(permissions, ",")); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotRoleException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotRoleException.java new file mode 100644 index 0000000..20c7b99 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/auth/NotRoleException.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.core.exception.auth; + +import org.apache.commons.lang3.StringUtils; + +/** + * 未能通过的角色认证异常 + * + * @author muyu + */ +public class NotRoleException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public NotRoleException (String role) { + super(role); + } + + public NotRoleException (String[] roles) { + super(StringUtils.join(roles, ",")); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java new file mode 100644 index 0000000..23d0485 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/base/BaseException.java @@ -0,0 +1,69 @@ +package com.ruoyi.common.core.exception.base; + +/** + * 基础异常 + * + * @author muyu + */ +public class BaseException extends RuntimeException { + private static final long serialVersionUID = 1L; + + /** + * 所属模块 + */ + private String module; + + /** + * 错误码 + */ + private String code; + + /** + * 错误码对应的参数 + */ + private Object[] args; + + /** + * 错误消息 + */ + private String defaultMessage; + + public BaseException (String module, String code, Object[] args, String defaultMessage) { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException (String module, String code, Object[] args) { + this(module, code, args, null); + } + + public BaseException (String module, String defaultMessage) { + this(module, null, null, defaultMessage); + } + + public BaseException (String code, Object[] args) { + this(null, code, args, null); + } + + public BaseException (String defaultMessage) { + this(null, null, null, defaultMessage); + } + + public String getModule () { + return module; + } + + public String getCode () { + return code; + } + + public Object[] getArgs () { + return args; + } + + public String getDefaultMessage () { + return defaultMessage; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileException.java new file mode 100644 index 0000000..416e3f0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileException.java @@ -0,0 +1,17 @@ +package com.ruoyi.common.core.exception.file; + +import com.ruoyi.common.core.exception.base.BaseException; + +/** + * 文件信息异常类 + * + * @author muyu + */ +public class FileException extends BaseException { + private static final long serialVersionUID = 1L; + + public FileException (String code, Object[] args, String msg) { + super("file", code, args, msg); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileNameLengthLimitExceededException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000..cbca03d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception.file; + +/** + * 文件名称超长限制异常类 + * + * @author muyu + */ +public class FileNameLengthLimitExceededException extends FileException { + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException (int defaultFileNameLength) { + super("upload.filename.exceed.length", new Object[]{defaultFileNameLength}, "the filename is too long"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileSizeLimitExceededException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000..5655ecc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception.file; + +/** + * 文件名大小限制异常类 + * + * @author muyu + */ +public class FileSizeLimitExceededException extends FileException { + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException (long defaultMaxSize) { + super("upload.exceed.maxSize", new Object[]{defaultMaxSize}, "the filesize is too large"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileUploadException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileUploadException.java new file mode 100644 index 0000000..d83f47a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/FileUploadException.java @@ -0,0 +1,52 @@ +package com.ruoyi.common.core.exception.file; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * 文件上传异常类 + * + * @author muyu + */ +public class FileUploadException extends Exception { + + private static final long serialVersionUID = 1L; + + private final Throwable cause; + + public FileUploadException () { + this(null, null); + } + + public FileUploadException (final String msg) { + this(msg, null); + } + + public FileUploadException (String msg, Throwable cause) { + super(msg); + this.cause = cause; + } + + @Override + public void printStackTrace (PrintStream stream) { + super.printStackTrace(stream); + if (cause != null) { + stream.println("Caused by:"); + cause.printStackTrace(stream); + } + } + + @Override + public void printStackTrace (PrintWriter writer) { + super.printStackTrace(writer); + if (cause != null) { + writer.println("Caused by:"); + cause.printStackTrace(writer); + } + } + + @Override + public Throwable getCause () { + return cause; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/InvalidExtensionException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000..2191518 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/file/InvalidExtensionException.java @@ -0,0 +1,67 @@ +package com.ruoyi.common.core.exception.file; + +import java.util.Arrays; + +/** + * 文件上传 误异常类 + * + * @author muyu + */ +public class InvalidExtensionException extends FileUploadException { + private static final long serialVersionUID = 1L; + + private String[] allowedExtension; + private String extension; + private String filename; + + public InvalidExtensionException (String[] allowedExtension, String extension, String filename) { + super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension () { + return allowedExtension; + } + + public String getExtension () { + return extension; + } + + public String getFilename () { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException (String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException (String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException (String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidVideoExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidVideoExtensionException (String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java new file mode 100644 index 0000000..812f167 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/job/TaskException.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.core.exception.job; + +/** + * 计划策略异常 + * + * @author muyu + */ +public class TaskException extends Exception { + private static final long serialVersionUID = 1L; + + private Code code; + + public TaskException (String msg, Code code) { + this(msg, code, null); + } + + public TaskException (String msg, Code code, Exception nestedEx) { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode () { + return code; + } + + public enum Code { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/CaptchaExpireException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000..0c77614 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/CaptchaExpireException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception.user; + +/** + * 验证码失效异常类 + * + * @author muyu + */ +public class CaptchaExpireException extends UserException { + private static final long serialVersionUID = 1L; + + public CaptchaExpireException () { + super("user.jcaptcha.expire", null); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserException.java new file mode 100644 index 0000000..9f966df --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.core.exception.user; + +import com.ruoyi.common.core.exception.base.BaseException; + +/** + * 用户信息异常类 + * + * @author muyu + */ +public class UserException extends BaseException { + private static final long serialVersionUID = 1L; + + public UserException (String code, Object[] args) { + super("user", code, args, null); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserPasswordNotMatchException.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..66dbe2b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.exception.user; + +/** + * 用户密码不正确或不符合规范异常类 + * + * @author muyu + */ +public class UserPasswordNotMatchException extends UserException { + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException () { + super("user.password.not.match", null); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/CharsetKit.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/CharsetKit.java new file mode 100644 index 0000000..d3d18c5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/CharsetKit.java @@ -0,0 +1,94 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.core.utils.StringUtils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * 字符集工具类 + * + * @author muyu + */ +public class CharsetKit { + /** + * ISO-8859-1 + */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** + * UTF-8 + */ + public static final String UTF_8 = "UTF-8"; + /** + * GBK + */ + public static final String GBK = "GBK"; + + /** + * ISO-8859-1 + */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** + * UTF-8 + */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** + * GBK + */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * + * @return Charset + */ + public static Charset charset (String charset) { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * + * @return 转换后的字符集 + */ + public static String convert (String source, String srcCharset, String destCharset) { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * + * @return 转换后的字符集 + */ + public static String convert (String source, Charset srcCharset, Charset destCharset) { + if (null == srcCharset) { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset () { + return Charset.defaultCharset().name(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/Convert.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/Convert.java new file mode 100644 index 0000000..552d65d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/Convert.java @@ -0,0 +1,903 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.core.utils.StringUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; + +/** + * 类型转换器 + * + * @author muyu + */ +public class Convert { + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static String toStr (Object value, String defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof String) { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static String toStr (Object value) { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Character toChar (Object value, Character defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof Character) { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Character toChar (Object value) { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Byte toByte (Object value, Byte defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Byte) { + return (Byte) value; + } + if (value instanceof Number) { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Byte.parseByte(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Byte toByte (Object value) { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Short toShort (Object value, Short defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Short) { + return (Short) value; + } + if (value instanceof Number) { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Short.parseShort(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Short toShort (Object value) { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Number toNumber (Object value, Number defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Number) { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return NumberFormat.getInstance().parse(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Number toNumber (Object value) { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Integer toInt (Object value, Integer defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Integer) { + return (Integer) value; + } + if (value instanceof Number) { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Integer.parseInt(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Integer toInt (Object value) { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * + * @return 结果 + */ + public static Integer[] toIntArray (String str) { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * + * @return 结果 + */ + public static Long[] toLongArray (String str) { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * + * @return 结果 + */ + public static Integer[] toIntArray (String split, String str) { + if (StringUtils.isEmpty(str)) { + return new Integer[]{}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0 ; i < arr.length ; i++) { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * + * @return 结果 + */ + public static Long[] toLongArray (String split, String str) { + if (StringUtils.isEmpty(str)) { + return new Long[]{}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0 ; i < arr.length ; i++) { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * + * @return 结果 + */ + public static String[] toStrArray (String str) { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * + * @return 结果 + */ + public static String[] toStrArray (String split, String str) { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Long toLong (Object value, Long defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Long) { + return (Long) value; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Long toLong (Object value) { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Double toDouble (Object value, Double defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Double) { + return (Double) value; + } + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Double toDouble (Object value) { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Float toFloat (Object value, Float defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Float) { + return (Float) value; + } + if (value instanceof Number) { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Float.parseFloat(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Float toFloat (Object value) { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static Boolean toBool (Object value, Boolean defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) { + case "true": + case "yes": + case "ok": + case "1": + return true; + case "false": + case "no": + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static Boolean toBool (Object value) { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * + * @return Enum + */ + public static > E toEnum (Class clazz, Object value, E defaultValue) { + if (value == null) { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Enum.valueOf(clazz, valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * + * @return Enum + */ + public static > E toEnum (Class clazz, Object value) { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static BigInteger toBigInteger (Object value, BigInteger defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigInteger) { + return (BigInteger) value; + } + if (value instanceof Long) { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return new BigInteger(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static BigInteger toBigInteger (Object value) { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * + * @return 结果 + */ + public static BigDecimal toBigDecimal (Object value, BigDecimal defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigDecimal) { + return (BigDecimal) value; + } + if (value instanceof Long) { + return new BigDecimal((Long) value); + } + if (value instanceof Double) { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return new BigDecimal(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * + * @return 结果 + */ + public static BigDecimal toBigDecimal (Object value) { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * + * @return 字符串 + */ + public static String utf8Str (Object obj) { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * + * @return 字符串 + */ + public static String str (Object obj, String charsetName) { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * + * @return 字符串 + */ + public static String str (Object obj, Charset charset) { + if (null == obj) { + return null; + } + + if (obj instanceof String) { + return (String) obj; + } else if (obj instanceof byte[] || obj instanceof Byte[]) { + if (obj instanceof byte[]) { + return str((byte[]) obj, charset); + } else { + Byte[] bytes = (Byte[]) obj; + int length = bytes.length; + byte[] dest = new byte[length]; + for (int i = 0 ; i < length ; i++) { + dest[i] = bytes[i]; + } + return str(dest, charset); + } + } else if (obj instanceof ByteBuffer) { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * + * @return 字符串 + */ + public static String str (byte[] bytes, String charset) { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * + * @return 解码后的字符串 + */ + public static String str (byte[] data, Charset charset) { + if (data == null) { + return null; + } + + if (null == charset) { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * + * @return 字符串 + */ + public static String str (ByteBuffer data, String charset) { + if (data == null) { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * + * @return 字符串 + */ + public static String str (ByteBuffer data, Charset charset) { + if (null == charset) { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + + /** + * 半角转全角 + * + * @param input String. + * + * @return 全角字符串. + */ + public static String toSBC (String input) { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * + * @return 全角字符串. + */ + public static String toSBC (String input, Set notConvertSet) { + char[] c = input.toCharArray(); + for (int i = 0 ; i < c.length ; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') { + c[i] = '\u3000'; + } else if (c[i] < '\177') { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * + * @return 半角字符串 + */ + public static String toDBC (String input) { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * + * @return 替换后的字符 + */ + public static String toDBC (String text, Set notConvertSet) { + char[] c = text.toCharArray(); + for (int i = 0 ; i < c.length ; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') { + c[i] = ' '; + } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') { + c[i] = (char) (c[i] - 65248); + } + } + return new String(c); + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * + * @return 中文大写数字 + */ + public static String digitUppercase (double n) { + String[] fraction = {"角", "分"}; + String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}}; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0 ; i < fraction.length ; i++) { + // 优化double计算精度丢失问题 + BigDecimal nNum = new BigDecimal(n); + BigDecimal decimal = new BigDecimal(10); + BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN); + double d = scale.doubleValue(); + s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0 ; i < unit[0].length && integerPart > 0 ; i++) { + String p = ""; + for (int j = 0 ; j < unit[1].length && n > 0 ; j++) { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/StrFormatter.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/StrFormatter.java new file mode 100644 index 0000000..841dd25 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/text/StrFormatter.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.core.utils.StringUtils; + +/** + * 字符串格式化 + * + * @author muyu + */ +public class StrFormatter { + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * + * @return 结果 + */ + public static String format (final String strPattern, final Object... argArray) { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0 ; argIndex < argArray.length ; argIndex++) { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) { + if (handledPosition == 0) { + return strPattern; + } else { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } else { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } else { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } else { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java new file mode 100644 index 0000000..9f17724 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java @@ -0,0 +1,158 @@ +package com.ruoyi.common.core.utils; + +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Date; + +/** + * 时间工具类 + * + * @author muyu + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils { + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate () { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate () { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime () { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow () { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow (final String format) { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime (final Date date) { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr (final String format, final Date date) { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime (final String format, final String ts) { + try { + return new SimpleDateFormat(format).parse(ts); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath () { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime () { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate (Object str) { + if (str == null) { + return null; + } + try { + return parseDate(str.toString(), parsePatterns); + } catch (ParseException e) { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate () { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算时间差 + * + * @param endDate 最后时间 + * @param startTime 开始时间 + * + * @return 时间差(天/小时/分钟) + */ + public static String timeDistance (Date endDate, Date startTime) { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - startTime.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 增加 LocalDateTime ==> Date + */ + public static Date toDate (LocalDateTime temporalAccessor) { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 增加 LocalDate ==> Date + */ + public static Date toDate (LocalDate temporalAccessor) { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ExceptionUtil.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ExceptionUtil.java new file mode 100644 index 0000000..3a2639e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ExceptionUtil.java @@ -0,0 +1,35 @@ +package com.ruoyi.common.core.utils; + +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * 错误信息处理类。 + * + * @author muyu + */ +public class ExceptionUtil { + /** + * 获取exception的详细错误信息。 + */ + public static String getExceptionMessage (Throwable e) { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw, true)); + return sw.toString(); + } + + public static String getRootErrorMessage (Exception e) { + Throwable root = ExceptionUtils.getRootCause(e); + root = (root == null ? e : root); + if (root == null) { + return ""; + } + String msg = root.getMessage(); + if (msg == null) { + return "null"; + } + return StringUtils.defaultString(msg); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java new file mode 100644 index 0000000..17220b9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java @@ -0,0 +1,123 @@ +package com.ruoyi.common.core.utils; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.TokenConstants; +import com.ruoyi.common.core.text.Convert; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +import java.util.Map; + +/** + * Jwt工具类 + * + * @author muyu + */ +public class JwtUtils { + public static String secret = TokenConstants.SECRET; + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * + * @return 令牌 + */ + public static String createToken (Map claims) { + String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * + * @return 数据声明 + */ + public static Claims parseToken (String token) { + return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); + } + + /** + * 根据令牌获取用户标识 + * + * @param token 令牌 + * + * @return 用户ID + */ + public static String getUserKey (String token) { + Claims claims = parseToken(token); + return getValue(claims, SecurityConstants.USER_KEY); + } + + /** + * 根据令牌获取用户标识 + * + * @param claims 身份信息 + * + * @return 用户ID + */ + public static String getUserKey (Claims claims) { + return getValue(claims, SecurityConstants.USER_KEY); + } + + /** + * 根据令牌获取用户ID + * + * @param token 令牌 + * + * @return 用户ID + */ + public static String getUserId (String token) { + Claims claims = parseToken(token); + return getValue(claims, SecurityConstants.DETAILS_USER_ID); + } + + /** + * 根据身份信息获取用户ID + * + * @param claims 身份信息 + * + * @return 用户ID + */ + public static String getUserId (Claims claims) { + return getValue(claims, SecurityConstants.DETAILS_USER_ID); + } + + /** + * 根据令牌获取用户名 + * + * @param token 令牌 + * + * @return 用户名 + */ + public static String getUserName (String token) { + Claims claims = parseToken(token); + return getValue(claims, SecurityConstants.DETAILS_USERNAME); + } + + /** + * 根据身份信息获取用户名 + * + * @param claims 身份信息 + * + * @return 用户名 + */ + public static String getUserName (Claims claims) { + return getValue(claims, SecurityConstants.DETAILS_USERNAME); + } + + /** + * 根据身份信息获取键值 + * + * @param claims 身份信息 + * @param key 键 + * + * @return 值 + */ + public static String getValue (Claims claims, String key) { + return Convert.toStr(claims.get(key), ""); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ObjUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ObjUtils.java new file mode 100644 index 0000000..b4dd3ae --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ObjUtils.java @@ -0,0 +1,65 @@ +package com.ruoyi.common.core.utils; + +import org.apache.commons.lang3.ObjectUtils; + +import java.math.BigDecimal; + +/** + * @author DongZl + * @description: 对象工具类 + * @Date 2023-10-9 下午 04:56 + */ +public class ObjUtils { + + /** + * 兼容 + * CharSequence: 如果长度为零,则认为为空。 + * Array: 如果长度为零,则认为为空。 + * Collection: 如果元素为零,则认为为空。 + * Map: 如果键值映射为零,则认为为空。 + * @param o 对象 + * @return 如果对象具有受支持的类型并且为空或null,则为true,否则为false + */ + public static boolean notNull(Object o){ + return ObjectUtils.isNotEmpty(o); + } + + /** + * 判断long类型不为0 + * @param val 值 + * @return 返回值不为0 + */ + public static boolean notNull(Long val){ + return ObjectUtils.isNotEmpty(val) && val != 0; + } + + /** + * 判断Integer类型不为0 + * @param val 值 + * @return 返回值不为0 + */ + public static boolean notNull(Integer val){ + return ObjectUtils.isNotEmpty(val) && val != 0; + } + /** + * 判断BigDecimal类型不为0 + * @param val 值 + * @return 返回值不为0 + */ + public static boolean notNull(BigDecimal val){ + return ObjectUtils.isNotEmpty(val) && val.doubleValue() == 0.00; + } + /** + * 判断BigDecimal类型不为0 + * @param val 值 + * @return 返回值不为0 + */ + public static boolean notChildNull(Object[] val){ + for (Object o : val) { + if (!notNull(o)){ + return false; + } + } + return true; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java new file mode 100644 index 0000000..1cef1aa --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java @@ -0,0 +1,32 @@ +package com.ruoyi.common.core.utils; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.utils.sql.SqlUtil; +import com.ruoyi.common.core.web.page.PageDomain; +import com.ruoyi.common.core.web.page.TableSupport; + +/** + * 分页工具类 + * + * @author muyu + */ +public class PageUtils extends PageHelper { + /** + * 设置请求分页数据 + */ + public static void startPage () { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + + /** + * 清理分页的线程变量 + */ + public static void clearPage () { + PageHelper.clearPage(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java new file mode 100644 index 0000000..e541d3c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java @@ -0,0 +1,294 @@ +package com.ruoyi.common.core.utils; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.text.Convert; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.util.LinkedCaseInsensitiveMap; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import reactor.core.publisher.Mono; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +/** + * 客户端工具类 + * + * @author muyu + */ +public class ServletUtils { + /** + * 获取String参数 + */ + public static String getParameter (String name) { + return getRequest().getParameter(name); + } + + /** + * 获取String参数 + */ + public static String getParameter (String name, String defaultValue) { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt (String name) { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt (String name, Integer defaultValue) { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool (String name) { + return Convert.toBool(getRequest().getParameter(name)); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool (String name, Boolean defaultValue) { + return Convert.toBool(getRequest().getParameter(name), defaultValue); + } + + /** + * 获得所有请求参数 + * + * @param request 请求对象{@link ServletRequest} + * + * @return Map + */ + public static Map getParams (ServletRequest request) { + final Map map = request.getParameterMap(); + return Collections.unmodifiableMap(map); + } + + /** + * 获得所有请求参数 + * + * @param request 请求对象{@link ServletRequest} + * + * @return Map + */ + public static Map getParamMap (ServletRequest request) { + Map params = new HashMap<>(); + for (Map.Entry entry : getParams(request).entrySet()) { + params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + } + return params; + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest () { + try { + return getRequestAttributes().getRequest(); + } catch (Exception e) { + return null; + } + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse () { + try { + return getRequestAttributes().getResponse(); + } catch (Exception e) { + return null; + } + } + + /** + * 获取session + */ + public static HttpSession getSession () { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes () { + try { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } catch (Exception e) { + return null; + } + } + + public static String getHeader (HttpServletRequest request, String name) { + String value = request.getHeader(name); + if (StringUtils.isEmpty(value)) { + return StringUtils.EMPTY; + } + return urlDecode(value); + } + + public static Map getHeaders (HttpServletRequest request) { + Map map = new LinkedCaseInsensitiveMap<>(); + Enumeration enumeration = request.getHeaderNames(); + if (enumeration != null) { + while (enumeration.hasMoreElements()) { + String key = enumeration.nextElement(); + String value = request.getHeader(key); + map.put(key, value); + } + } + return map; + } + + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + */ + public static void renderString (HttpServletResponse response, String string) { + try { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest (HttpServletRequest request) { + String accept = request.getHeader("accept"); + if (accept != null && accept.contains("application/json")) { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } + + /** + * 内容编码 + * + * @param str 内容 + * + * @return 编码后的内容 + */ + public static String urlEncode (String str) { + try { + return URLEncoder.encode(str, Constants.UTF8); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } + + /** + * 内容解码 + * + * @param str 内容 + * + * @return 解码后的内容 + */ + public static String urlDecode (String str) { + try { + return URLDecoder.decode(str, Constants.UTF8); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } + + /** + * 设置webflux模型响应 + * + * @param response ServerHttpResponse + * @param value 响应内容 + * + * @return Mono + */ + public static Mono webFluxResponseWriter (ServerHttpResponse response, Object value) { + return webFluxResponseWriter(response, HttpStatus.OK, value, Result.FAIL); + } + + /** + * 设置webflux模型响应 + * + * @param response ServerHttpResponse + * @param code 响应状态码 + * @param value 响应内容 + * + * @return Mono + */ + public static Mono webFluxResponseWriter (ServerHttpResponse response, Object value, int code) { + return webFluxResponseWriter(response, HttpStatus.OK, value, code); + } + + /** + * 设置webflux模型响应 + * + * @param response ServerHttpResponse + * @param status http状态码 + * @param code 响应状态码 + * @param value 响应内容 + * + * @return Mono + */ + public static Mono webFluxResponseWriter (ServerHttpResponse response, HttpStatus status, Object value, int code) { + return webFluxResponseWriter(response, MediaType.APPLICATION_JSON_VALUE, status, value, code); + } + + /** + * 设置webflux模型响应 + * + * @param response ServerHttpResponse + * @param contentType content-type + * @param status http状态码 + * @param code 响应状态码 + * @param value 响应内容 + * + * @return Mono + */ + public static Mono webFluxResponseWriter (ServerHttpResponse response, String contentType, HttpStatus status, Object value, int code) { + response.setStatusCode(status); + response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType); + Result result = Result.error(code, value.toString()); + DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes()); + return response.writeWith(Mono.just(dataBuffer)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/SpringUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/SpringUtils.java new file mode 100644 index 0000000..9fb61cb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/SpringUtils.java @@ -0,0 +1,114 @@ +package com.ruoyi.common.core.utils; + +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Component; + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author muyu + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor { + /** + * Spring应用上下文环境 + */ + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 获取对象 + * + * @param name + * + * @return Object 一个以所给名字注册的bean的实例 + * + * @throws org.springframework.beans.BeansException + */ + @SuppressWarnings("unchecked") + public static T getBean (String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * + * @return + * + * @throws org.springframework.beans.BeansException + */ + public static T getBean (Class clz) throws BeansException { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * + * @return boolean + */ + public static boolean containsBean (String name) { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * + * @return boolean + * + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + */ + public static boolean isSingleton (String name) throws NoSuchBeanDefinitionException { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * + * @return Class 注册对象的类型 + * + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + */ + public static Class getType (String name) throws NoSuchBeanDefinitionException { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * + * @return + * + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + */ + public static String[] getAliases (String name) throws NoSuchBeanDefinitionException { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy (T invoker) { + return (T) AopContext.currentProxy(); + } + + @Override + public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringUtils.beanFactory = beanFactory; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java new file mode 100644 index 0000000..e3d7151 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java @@ -0,0 +1,504 @@ +package com.ruoyi.common.core.utils; + +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.text.StrFormatter; +import org.springframework.util.AntPathMatcher; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 字符串工具类 + * + * @author muyu + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { + /** + * 空字符串 + */ + private static final String NULLSTR = ""; + + /** + * 下划线 + */ + private static final char SEPARATOR = '_'; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * + * @return value 返回值 + */ + public static T nvl (T value, T defaultValue) { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * + * @return true:为空 false:非空 + */ + public static boolean isEmpty (Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * + * @return true:非空 false:空 + */ + public static boolean isNotEmpty (Collection coll) { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + * * @return true:为空 false:非空 + */ + public static boolean isEmpty (Object[] objects) { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * + * @return true:非空 false:空 + */ + public static boolean isNotEmpty (Object[] objects) { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * + * @return true:为空 false:非空 + */ + public static boolean isEmpty (Map map) { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * + * @return true:非空 false:空 + */ + public static boolean isNotEmpty (Map map) { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * + * @return true:为空 false:非空 + */ + public static boolean isEmpty (String str) { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty (String str) { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * + * @return true:为空 false:非空 + */ + public static boolean isNull (Object object) { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * + * @return true:非空 false:空 + */ + public static boolean isNotNull (Object object) { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * + * @return true:是数组 false:不是数组 + */ + public static boolean isArray (Object object) { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim (String str) { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * + * @return 结果 + */ + public static String substring (final String str, int start) { + if (str == null) { + return NULLSTR; + } + + if (start < 0) { + start = str.length() + start; + } + + if (start < 0) { + start = 0; + } + if (start > str.length()) { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * + * @return 结果 + */ + public static String substring (final String str, int start, int end) { + if (str == null) { + return NULLSTR; + } + + if (end < 0) { + end = str.length() + end; + } + if (start < 0) { + start = str.length() + start; + } + + if (end > str.length()) { + end = str.length(); + } + + if (start > end) { + return NULLSTR; + } + + if (start < 0) { + start = 0; + } + if (end < 0) { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 判断是否为空,并且不是空白字符 + * + * @param str 要判断的value + * + * @return 结果 + */ + public static boolean hasText (String str) { + return (str != null && !str.isEmpty() && containsText(str)); + } + + private static boolean containsText (CharSequence str) { + int strLen = str.length(); + for (int i = 0 ; i < strLen ; i++) { + if (!Character.isWhitespace(str.charAt(i))) { + return true; + } + } + return false; + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * + * @return 格式化后的文本 + */ + public static String format (String template, Object... params) { + if (isEmpty(params) || isEmpty(template)) { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * + * @return 结果 + */ + public static boolean ishttp (String link) { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 判断给定的collection列表中是否包含数组array 判断给定的数组array中是否包含给定的元素value + * + * @param collection 给定的集合 + * @param array 给定的数组 + * + * @return boolean 结果 + */ + public static boolean containsAny (Collection collection, String... array) { + if (isEmpty(collection) || isEmpty(array)) { + return false; + } else { + for (String str : array) { + if (collection.contains(str)) { + return true; + } + } + return false; + } + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase (String str) { + if (str == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0 ; i < str.length() ; i++) { + char c = str.charAt(i); + if (i > 0) { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } else { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) { + sb.append(SEPARATOR); + } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * + * @return 包含返回true + */ + public static boolean inStringIgnoreCase (String str, String... strs) { + if (str != null && strs != null) { + for (String s : strs) { + if (str.equalsIgnoreCase(trim(s))) { + return true; + } + } + } + return false; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase (String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 + * 例如:user_name->userName + */ + public static String toCamelCase (String s) { + if (s == null) { + return null; + } + if (s.indexOf(SEPARATOR) == -1) { + return s; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0 ; i < s.length() ; i++) { + char c = s.charAt(i); + + if (c == SEPARATOR) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * + * @return 是否匹配 + */ + public static boolean matches (String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * + * @return + */ + public static boolean isMatch (String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast (Object obj) { + return (T) obj; + } + + /** + * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 + * + * @param num 数字对象 + * @param size 字符串指定长度 + * + * @return 返回数字的字符串格式,该字符串为指定长度。 + */ + public static final String padl (final Number num, final int size) { + return padl(num.toString(), size, '0'); + } + + /** + * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 + * + * @param s 原始字符串 + * @param size 字符串指定长度 + * @param c 用于补齐的字符 + * + * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 + */ + public static final String padl (final String s, final int size, final char c) { + final StringBuilder sb = new StringBuilder(size); + if (s != null) { + final int len = s.length(); + if (s.length() <= size) { + for (int i = size - len ; i > 0 ; i--) { + sb.append(c); + } + sb.append(s); + } else { + return s.substring(len - size, len); + } + } else { + for (int i = size ; i > 0 ; i--) { + sb.append(c); + } + } + return sb.toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanUtils.java new file mode 100644 index 0000000..b084709 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanUtils.java @@ -0,0 +1,107 @@ +package com.ruoyi.common.core.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 工具类 + * + * @author muyu + */ +public class BeanUtils extends org.springframework.beans.BeanUtils { + /** + * Bean方法名中属性名开始的下标 + */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** + * 匹配getter方法的正则表达式 + */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** + * 匹配setter方法的正则表达式 + */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp (Object dest, Object src) { + try { + copyProperties(src, dest); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * + * @return 对象的setter方法列表 + */ + public static List getSetterMethods (Object obj) { + // setter方法列表 + List setterMethods = new ArrayList(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods (Object obj) { + // getter方法列表 + List getterMethods = new ArrayList(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals (String m1, String m2) { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java new file mode 100644 index 0000000..fe7d826 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.core.utils.bean; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; +import java.util.Set; + +/** + * bean对象属性验证 + * + * @author muyu + */ +public class BeanValidators { + public static void validateWithException (Validator validator, Object object, Class... groups) + throws ConstraintViolationException { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileTypeUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileTypeUtils.java new file mode 100644 index 0000000..63f2b9d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileTypeUtils.java @@ -0,0 +1,85 @@ +package com.ruoyi.common.core.utils.file; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.Objects; + +/** + * 文件类型工具类 + * + * @author muyu + */ +public class FileTypeUtils { + /** + * 获取文件类型 + *

+ * 例如: muyu.txt, 返回: txt + * + * @param file 文件名 + * + * @return 后缀(不含".") + */ + public static String getFileType (File file) { + if (null == file) { + return StringUtils.EMPTY; + } + return getFileType(file.getName()); + } + + /** + * 获取文件类型 + *

+ * 例如: muyu.txt, 返回: txt + * + * @param fileName 文件名 + * + * @return 后缀(不含".") + */ + public static String getFileType (String fileName) { + int separatorIndex = fileName.lastIndexOf("."); + if (separatorIndex < 0) { + return ""; + } + return fileName.substring(separatorIndex + 1).toLowerCase(); + } + + /** + * 获取文件名的后缀 + * + * @param file 表单文件 + * + * @return 后缀名 + */ + public static final String getExtension (MultipartFile file) { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) { + extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType())); + } + return extension; + } + + /** + * 获取文件类型 + * + * @param photoByte 文件字节码 + * + * @return 后缀(不含".") + */ + public static String getFileExtendName (byte[] photoByte) { + String strFileExtendName = "JPG"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) { + strFileExtendName = "GIF"; + } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) { + strFileExtendName = "JPG"; + } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) { + strFileExtendName = "BMP"; + } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) { + strFileExtendName = "PNG"; + } + return strFileExtendName; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java new file mode 100644 index 0000000..ef0e808 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java @@ -0,0 +1,223 @@ +package com.ruoyi.common.core.utils.file; + +import com.ruoyi.common.core.utils.StringUtils; +import org.apache.commons.lang3.ArrayUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * 文件处理工具类 + * + * @author muyu + */ +public class FileUtils { + /** + * 字符常量:斜杠 {@code '/'} + */ + public static final char SLASH = '/'; + + /** + * 字符常量:反斜杠 {@code '\\'} + */ + public static final char BACKSLASH = '\\'; + + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 输出指定文件的byte数组 + * + * @param filePath 文件路径 + * @param os 输出流 + * + * @return + */ + public static void writeBytes (String filePath, OutputStream os) throws IOException { + FileInputStream fis = null; + try { + File file = new File(filePath); + if (!file.exists()) { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) { + os.write(b, 0, length); + } + } catch (IOException e) { + throw e; + } finally { + if (os != null) { + try { + os.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + if (fis != null) { + try { + fis.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + } + + /** + * 删除文件 + * + * @param filePath 文件 + * + * @return + */ + public static boolean deleteFile (String filePath) { + boolean flag = false; + File file = new File(filePath); + // 路径为文件且不为空则进行删除 + if (file.isFile() && file.exists()) { + flag = file.delete(); + } + return flag; + } + + /** + * 文件名称验证 + * + * @param filename 文件名称 + * + * @return true 正常 false 非法 + */ + public static boolean isValidFilename (String filename) { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 检查文件是否可下载 + * + * @param resource 需要下载的文件 + * + * @return true 正常 false 非法 + */ + public static boolean checkAllowDownload (String resource) { + // 禁止目录上跳级别 + if (StringUtils.contains(resource, "..")) { + return false; + } + // 判断是否在允许下载的文件规则内 + return ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource)); + } + + /** + * 下载文件名重新编码 + * + * @param request 请求对象 + * @param fileName 文件名 + * + * @return 编码后的文件名 + */ + public static String setFileDownloadHeader (HttpServletRequest request, String fileName) throws UnsupportedEncodingException { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + if (agent.contains("MSIE")) { + // IE浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+", " "); + } else if (agent.contains("Firefox")) { + // 火狐浏览器 + filename = new String(fileName.getBytes(), "ISO8859-1"); + } else if (agent.contains("Chrome")) { + // google浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } else { + // 其它浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + return filename; + } + + /** + * 返回文件名 + * + * @param filePath 文件 + * + * @return 文件名 + */ + public static String getName (String filePath) { + if (null == filePath) { + return null; + } + int len = filePath.length(); + if (0 == len) { + return filePath; + } + if (isFileSeparator(filePath.charAt(len - 1))) { + // 以分隔符结尾的去掉结尾分隔符 + len--; + } + + int begin = 0; + char c; + for (int i = len - 1 ; i > -1 ; i--) { + c = filePath.charAt(i); + if (isFileSeparator(c)) { + // 查找最后一个路径分隔符(/或者\) + begin = i + 1; + break; + } + } + + return filePath.substring(begin, len); + } + + /** + * 是否为Windows或者Linux(Unix)文件分隔符
+ * Windows平台下分隔符为\,Linux(Unix)为/ + * + * @param c 字符 + * + * @return 是否为Windows或者Linux(Unix)文件分隔符 + */ + public static boolean isFileSeparator (char c) { + return SLASH == c || BACKSLASH == c; + } + + /** + * 下载文件名重新编码 + * + * @param response 响应对象 + * @param realFileName 真实文件名 + * + * @return + */ + public static void setAttachmentResponseHeader (HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.setHeader("Content-disposition", contentDispositionValue.toString()); + response.setHeader("download-filename", percentEncodedFileName); + } + + /** + * 百分号编码工具方法 + * + * @param s 需要百分号编码的字符串 + * + * @return 百分号编码后的字符串 + */ + public static String percentEncode (String s) throws UnsupportedEncodingException { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/ImageUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/ImageUtils.java new file mode 100644 index 0000000..b68b470 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/ImageUtils.java @@ -0,0 +1,69 @@ +package com.ruoyi.common.core.utils.file; + +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; + +/** + * 图片处理工具类 + * + * @author muyu + */ +public class ImageUtils { + private static final Logger log = LoggerFactory.getLogger(ImageUtils.class); + + public static byte[] getImage (String imagePath) { + InputStream is = getFile(imagePath); + try { + return IOUtils.toByteArray(is); + } catch (Exception e) { + log.error("图片加载异常 {}", e); + return null; + } finally { + IOUtils.closeQuietly(is); + } + } + + public static InputStream getFile (String imagePath) { + try { + byte[] result = readFile(imagePath); + result = Arrays.copyOf(result, result.length); + return new ByteArrayInputStream(result); + } catch (Exception e) { + log.error("获取图片异常 {}", e); + } + return null; + } + + /** + * 读取文件为字节数据 + * + * @param url 地址 + * + * @return 字节数据 + */ + public static byte[] readFile (String url) { + InputStream in = null; + try { + // 网络地址 + URL urlObj = new URL(url); + URLConnection urlConnection = urlObj.openConnection(); + urlConnection.setConnectTimeout(30 * 1000); + urlConnection.setReadTimeout(60 * 1000); + urlConnection.setDoInput(true); + in = urlConnection.getInputStream(); + return IOUtils.toByteArray(in); + } catch (Exception e) { + log.error("访问文件异常 {}", e); + return null; + } finally { + IOUtils.closeQuietly(in); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/MimeTypeUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000..acb7240 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/file/MimeTypeUtils.java @@ -0,0 +1,56 @@ +package com.ruoyi.common.core.utils.file; + +/** + * 媒体类型工具类 + * + * @author muyu + */ +public class MimeTypeUtils { + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String[] IMAGE_EXTENSION = {"bmp", "gif", "jpg", "jpeg", "png"}; + + public static final String[] FLASH_EXTENSION = {"swf", "flv"}; + + public static final String[] MEDIA_EXTENSION = {"swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb"}; + + public static final String[] VIDEO_EXTENSION = {"mp4", "avi", "rmvb"}; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 图片 + "bmp", "gif", "jpg", "jpeg", "png", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 压缩文件 + "rar", "zip", "gz", "bz2", + // 视频格式 + "mp4", "avi", "rmvb", + // pdf + "pdf"}; + + public static String getExtension (String prefix) { + switch (prefix) { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + default: + return ""; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/EscapeUtil.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/EscapeUtil.java new file mode 100644 index 0000000..a9c7315 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/EscapeUtil.java @@ -0,0 +1,145 @@ +package com.ruoyi.common.core.utils.html; + +import com.ruoyi.common.core.utils.StringUtils; + +/** + * 转义和反转义工具类 + * + * @author muyu + */ +public class EscapeUtil { + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + + private static final char[][] TEXT = new char[64][]; + + static { + for (int i = 0 ; i < 64 ; i++) { + TEXT[i] = new char[]{(char) i}; + } + + // special HTML characters + TEXT['\''] = "'".toCharArray(); // 单引号 + TEXT['"'] = """.toCharArray(); // 双引号 + TEXT['&'] = "&".toCharArray(); // &符 + TEXT['<'] = "<".toCharArray(); // 小于号 + TEXT['>'] = ">".toCharArray(); // 大于号 + } + + /** + * 转义文本中的HTML字符为安全的字符 + * + * @param text 被转义的文本 + * + * @return 转义后的文本 + */ + public static String escape (String text) { + return encode(text); + } + + /** + * 还原被转义的HTML特殊字符 + * + * @param content 包含转义符的HTML内容 + * + * @return 转换后的字符串 + */ + public static String unescape (String content) { + return decode(content); + } + + /** + * 清除所有HTML标签,但是不删除标签内的内容 + * + * @param content 文本 + * + * @return 清除标签后的文本 + */ + public static String clean (String content) { + return new HTMLFilter().filter(content); + } + + /** + * Escape编码 + * + * @param text 被编码的文本 + * + * @return 编码后的字符 + */ + private static String encode (String text) { + if (StringUtils.isEmpty(text)) { + return StringUtils.EMPTY; + } + + final StringBuilder tmp = new StringBuilder(text.length() * 6); + char c; + for (int i = 0 ; i < text.length() ; i++) { + c = text.charAt(i); + if (c < 256) { + tmp.append("%"); + if (c < 16) { + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } else { + tmp.append("%u"); + if (c <= 0xfff) { + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + } + return tmp.toString(); + } + + /** + * Escape解码 + * + * @param content 被转义的内容 + * + * @return 解码后的字符串 + */ + public static String decode (String content) { + if (StringUtils.isEmpty(content)) { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0, pos = 0; + char ch; + while (lastPos < content.length()) { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) { + if (content.charAt(pos + 1) == 'u') { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } else { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } else { + if (pos == -1) { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } else { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + + public static void main (String[] args) { + String html = ""; + String escape = EscapeUtil.escape(html); + // String html = "ipt>alert(\"XSS\")ipt>"; + // String html = "<123"; + // String html = "123>"; + System.out.println("clean: " + EscapeUtil.clean(html)); + System.out.println("escape: " + escape); + System.out.println("unescape: " + EscapeUtil.unescape(escape)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/HTMLFilter.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/HTMLFilter.java new file mode 100644 index 0000000..aeb3c46 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/html/HTMLFilter.java @@ -0,0 +1,498 @@ +package com.ruoyi.common.core.utils.html; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML过滤器,用于去除XSS漏洞隐患。 + * + * @author muyu + */ +public final class HTMLFilter { + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter () { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[]{"img"}; + vNeedClosingTags = new String[]{"a", "b", "strong", "i", "em"}; + vDisallowed = new String[]{}; + vAllowedProtocols = new String[]{"http", "mailto", "https"}; // no ftp. + vProtocolAtts = new String[]{"src", "href"}; + vRemoveBlanks = new String[]{"a", "b", "strong", "i", "em"}; + vAllowedEntities = new String[]{"amp", "gt", "lt", "quot"}; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter (final Map conf) { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr (final int decimal) { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars (final String s) { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + private static String regexReplace (final Pattern regex_pattern, final String replacement, final String s) { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + // --------------------------------------------------------------- + + private static boolean inArray (final String s, final String[] array) { + for (String item : array) { + if (item != null && item.equals(s)) { + return true; + } + } + return false; + } + + private void reset () { + vTagCounts.clear(); + } + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter (final String input) { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags () { + return alwaysMakeTags; + } + + public boolean isStripComments () { + return stripComment; + } + + private String escapeComments (final String s) { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML (String s) { + if (alwaysMakeTags) { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 不追加结束标签 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } else { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags (String s) { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) { + for (int ii = 0 ; ii < vTagCounts.get(key) ; ii++) { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks (final String s) { + String result = s; + for (String tag : vRemoveBlanks) { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private String processTag (final String s) { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) { + if (!inArray(name, vSelfClosingTags)) { + if (vTagCounts.containsKey(name)) { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0 ; ii < paramNames.size() ; ii++) { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) { + if (inArray(paramName, vProtocolAtts)) { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\""); + } + } + + if (inArray(name, vSelfClosingTags)) { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) { + ending = ""; + } + + if (ending == null || ending.length() < 1) { + if (vTagCounts.containsKey(name)) { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } else { + vTagCounts.put(name, 1); + } + } else { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } else { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol (String s) { + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities (String s) { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities (final String s) { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes (final String s) { + if (encodeQuotes) { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 不替换双引号为",防止json格式无效 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } else { + return s; + } + } + + private String checkEntity (final String preamble, final String term) { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity (final String entity) { + return inArray(entity, vAllowedEntities); + } + + private boolean allowed (final String name) { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute (final String name, final String paramName) { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ip/IpUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ip/IpUtils.java new file mode 100644 index 0000000..7dcab3f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/ip/IpUtils.java @@ -0,0 +1,331 @@ +package com.ruoyi.common.core.utils.ip; + +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * 获取IP方法 + * + * @author muyu + */ +public class IpUtils { + public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"; + // 匹配 ip + public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")"; + // 匹配网段 + public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")"; + public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))"; + + /** + * 获取客户端IP + * + * @return IP地址 + */ + public static String getIpAddr () { + return getIpAddr(ServletUtils.getRequest()); + } + + /** + * 获取客户端IP + * + * @param request 请求对象 + * + * @return IP地址 + */ + public static String getIpAddr (HttpServletRequest request) { + if (request == null) { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param ip IP地址 + * + * @return 结果 + */ + public static boolean internalIp (String ip) { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param addr byte地址 + * + * @return 结果 + */ + private static boolean internalIp (byte[] addr) { + if (StringUtils.isNull(addr) || addr.length < 2) { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) { + return true; + } + case SECTION_5: + switch (b1) { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4 (String text) { + if (text.length() == 0) { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try { + long l; + int i; + switch (elements.length) { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2 ; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4 ; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } catch (NumberFormatException e) { + return null; + } + return bytes; + } + + /** + * 获取IP地址 + * + * @return 本地IP地址 + */ + public static String getHostIp () { + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + } + return "127.0.0.1"; + } + + /** + * 获取主机名 + * + * @return 本地主机名 + */ + public static String getHostName () { + try { + return InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + } + return "未知"; + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp (String ip) { + // 多级反向代理检测 + if (ip != null && ip.indexOf(",") > 0) { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) { + if (false == isUnknown(subIp)) { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * + * @return 是否未知 + */ + public static boolean isUnknown (String checkString) { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 是否为IP + */ + public static boolean isIP (String ip) { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP); + } + + /** + * 是否为IP,或 *为间隔的通配符地址 + */ + public static boolean isIpWildCard (String ip) { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD); + } + + /** + * 检测参数是否在ip通配符里 + */ + public static boolean ipIsInWildCardNoCheck (String ipWildCard, String ip) { + String[] s1 = ipWildCard.split("\\."); + String[] s2 = ip.split("\\."); + boolean isMatchedSeg = true; + for (int i = 0 ; i < s1.length && !s1[i].equals("*") ; i++) { + if (!s1[i].equals(s2[i])) { + isMatchedSeg = false; + break; + } + } + return isMatchedSeg; + } + + /** + * 是否为特定格式如:“10.10.10.1-10.10.10.99”的ip段字符串 + */ + public static boolean isIPSegment (String ipSeg) { + return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG); + } + + /** + * 判断ip是否在指定网段中 + */ + public static boolean ipIsInNetNoCheck (String iparea, String ip) { + int idx = iparea.indexOf('-'); + String[] sips = iparea.substring(0, idx).split("\\."); + String[] sipe = iparea.substring(idx + 1).split("\\."); + String[] sipt = ip.split("\\."); + long ips = 0L, ipe = 0L, ipt = 0L; + for (int i = 0 ; i < 4 ; ++i) { + ips = ips << 8 | Integer.parseInt(sips[i]); + ipe = ipe << 8 | Integer.parseInt(sipe[i]); + ipt = ipt << 8 | Integer.parseInt(sipt[i]); + } + if (ips > ipe) { + long t = ips; + ips = ipe; + ipe = t; + } + return ips <= ipt && ipt <= ipe; + } + + /** + * 校验ip是否符合过滤串规则 + * + * @param filter 过滤IP列表,支持后缀'*'通配,支持网段如:`10.10.10.1-10.10.10.99` + * @param ip 校验IP地址 + * + * @return boolean 结果 + */ + public static boolean isMatchedIp (String filter, String ip) { + if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) { + return false; + } + String[] ips = filter.split(";"); + for (String iStr : ips) { + if (isIP(iStr) && iStr.equals(ip)) { + return true; + } else if (isIpWildCard(iStr) && ipIsInWildCardNoCheck(iStr, ip)) { + return true; + } else if (isIPSegment(iStr) && ipIsInNetNoCheck(iStr, ip)) { + return true; + } + } + return false; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelHandlerAdapter.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000..f6c94fd --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,23 @@ +package com.ruoyi.common.core.utils.poi; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * Excel数据格式处理适配器 + * + * @author muyu + */ +public interface ExcelHandlerAdapter { + /** + * 格式化 + * + * @param value 单元格数据值 + * @param args excel注解args参数组 + * @param cell 单元格对象 + * @param wb 工作簿对象 + * + * @return 处理后的值 + */ + Object format (Object value, String[] args, Cell cell, Workbook wb); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java new file mode 100644 index 0000000..f5fe94d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java @@ -0,0 +1,1230 @@ +package com.ruoyi.common.core.utils.poi; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.annotation.Excel.Type; +import com.ruoyi.common.core.annotation.Excels; +import com.ruoyi.common.core.exception.UtilException; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.file.FileTypeUtils; +import com.ruoyi.common.core.utils.file.ImageUtils; +import com.ruoyi.common.core.utils.reflect.ReflectUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Excel相关处理 + * + * @author muyu + */ +public class ExcelUtil { + public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; + public static final String[] FORMULA_STR = {"=", "-", "+", "@"}; + /** + * Excel sheet最大行数,默认65536 + */ + public static final int sheetSize = 65536; + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + /** + * 实体对象 + */ + public Class clazz; + /** + * 需要排除列属性 + */ + public String[] excludeFields; + /** + * 工作表名称 + */ + private String sheetName; + /** + * 导出类型(EXPORT:导出数据;IMPORT:导入模板) + */ + private Type type; + /** + * 工作薄对象 + */ + private Workbook wb; + /** + * 工作表对象 + */ + private Sheet sheet; + /** + * 样式列表 + */ + private Map styles; + /** + * 导入导出数据列表 + */ + private List list; + /** + * 注解列表 + */ + private List fields; + /** + * 当前行号 + */ + private int rownum; + /** + * 标题 + */ + private String title; + /** + * 最大高度 + */ + private short maxHeight; + /** + * 合并后最后行数 + */ + private int subMergedLastRowNum = 0; + /** + * 合并后开始行数 + */ + private int subMergedFirstRowNum = 1; + /** + * 对象的子列表方法 + */ + private Method subMethod; + /** + * 对象的子列表属性 + */ + private List subFields; + /** + * 统计列表 + */ + private Map statistics = new HashMap(); + + public ExcelUtil (Class clazz) { + this.clazz = clazz; + } + + /** + * 获取画布 + */ + public static Drawing getDrawingPatriarch (Sheet sheet) { + if (sheet.getDrawingPatriarch() == null) { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } + + /** + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * + * @return 解析后值 + */ + public static String convertByExp (String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[0].equals(value)) { + propertyString.append(itemArray[1] + separator); + break; + } + } + } else { + if (itemArray[0].equals(propertyValue)) { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * + * @return 解析后值 + */ + public static String reverseByExp (String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[1].equals(value)) { + propertyString.append(itemArray[0] + separator); + break; + } + } + } else { + if (itemArray[1].equals(propertyValue)) { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 隐藏Excel中列属性 + * + * @param fields 列属性名 示例[单个"name"/多个"id","name"] + * + * @throws Exception + */ + public void hideColumn (String... fields) { + this.excludeFields = fields; + } + + public void init (List list, String sheetName, String title, Type type) { + if (list == null) { + list = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.title = title; + createExcelField(); + createWorkbook(); + createTitle(); + createSubHead(); + } + + /** + * 创建excel第一行标题 + */ + public void createTitle () { + if (StringUtils.isNotEmpty(title)) { + subMergedFirstRowNum++; + subMergedLastRowNum++; + int titleLastCol = this.fields.size() - 1; + if (isSubList()) { + titleLastCol = titleLastCol + subFields.size() - 1; + } + Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0); + titleRow.setHeightInPoints(30); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellStyle(styles.get("title")); + titleCell.setCellValue(title); + sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol)); + } + } + + /** + * 创建对象的子列表名称 + */ + public void createSubHead () { + if (isSubList()) { + subMergedFirstRowNum++; + subMergedLastRowNum++; + Row subRow = sheet.createRow(rownum); + int excelNum = 0; + for (Object[] objects : fields) { + Excel attr = (Excel) objects[1]; + Cell headCell1 = subRow.createCell(excelNum); + headCell1.setCellValue(attr.name()); + headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + excelNum++; + } + int headFirstRow = excelNum - 1; + int headLastRow = headFirstRow + subFields.size() - 1; + if (headLastRow > headFirstRow) { + sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow)); + } + rownum++; + } + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * + * @return 转换后集合 + */ + public List importExcel (InputStream is) { + List list = null; + try { + list = importExcel(is, 0); + } catch (Exception e) { + log.error("导入Excel异常{}", e.getMessage()); + throw new UtilException(e.getMessage()); + } finally { + IOUtils.closeQuietly(is); + } + return list; + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @param titleNum 标题占用行数 + * + * @return 转换后集合 + */ + public List importExcel (InputStream is, int titleNum) throws Exception { + return importExcel(StringUtils.EMPTY, is, titleNum); + } + + /** + * 对excel表单指定表格索引名转换成list + * + * @param sheetName 表格索引名 + * @param titleNum 标题占用行数 + * @param is 输入流 + * + * @return 转换后集合 + */ + public List importExcel (String sheetName, InputStream is, int titleNum) throws Exception { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + // 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet + Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0); + if (sheet == null) { + throw new IOException("文件sheet不存在"); + } + + // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1 + int rows = sheet.getLastRowNum(); + if (rows > 0) { + // 定义一个map用于存放excel列的序号和field. + Map cellMap = new HashMap(); + // 获取表头 + Row heard = sheet.getRow(titleNum); + for (int i = 0 ; i < heard.getPhysicalNumberOfCells() ; i++) { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } else { + cellMap.put(null, i); + } + } + // 有数据时才处理 得到类的所有field. + List fields = this.getFields(); + Map fieldsMap = new HashMap(); + for (Object[] objects : fields) { + Excel attr = (Excel) objects[1]; + Integer column = cellMap.get(attr.name()); + if (column != null) { + fieldsMap.put(column, objects); + } + } + for (int i = titleNum + 1 ; i <= rows ; i++) { + // 从第2行开始取数据,默认第一行是表头. + Row row = sheet.getRow(i); + // 判断当前行是否是空行 + if (isRowEmpty(row)) { + continue; + } + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) { + Object val = this.getCellValue(row, entry.getKey()); + + // 如果不存在实例则新建. + entity = (entity == null ? clazz.newInstance() : entity); + // 从map中得到对应列的field. + Field field = (Field) entry.getValue()[0]; + Excel attr = (Excel) entry.getValue()[1]; + // 取得类型,并根据对象类型设置值. + Class fieldType = field.getType(); + if (String.class == fieldType) { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) { + val = StringUtils.substringBefore(s, ".0"); + } else { + String dateFormat = field.getAnnotation(Excel.class).dateFormat(); + if (StringUtils.isNotEmpty(dateFormat)) { + val = parseDateToStr(dateFormat, val); + } else { + val = Convert.toStr(val); + } + } + } else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) { + val = Convert.toInt(val); + } else if ((Long.TYPE == fieldType || Long.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) { + val = Convert.toLong(val); + } else if (Double.TYPE == fieldType || Double.class == fieldType) { + val = Convert.toDouble(val); + } else if (Float.TYPE == fieldType || Float.class == fieldType) { + val = Convert.toFloat(val); + } else if (BigDecimal.class == fieldType) { + val = Convert.toBigDecimal(val); + } else if (Date.class == fieldType) { + if (val instanceof String) { + val = DateUtils.parseDate(val); + } else if (val instanceof Double) { + val = DateUtil.getJavaDate((Double) val); + } + } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { + val = Convert.toBool(val, false); + } + if (StringUtils.isNotNull(fieldType)) { + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) { + propertyName = field.getName() + "." + attr.targetAttr(); + } + if (StringUtils.isNotEmpty(attr.readConverterExp())) { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) { + val = dataFormatHandlerAdapter(val, attr, null); + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * + * @return 结果 + */ + public void exportExcel (HttpServletResponse response, List list, String sheetName) { + exportExcel(response, list, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @param title 标题 + * + * @return 结果 + */ + public void exportExcel (HttpServletResponse response, List list, String sheetName, String title) { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, title, Type.EXPORT); + exportExcel(response); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * + * @return 结果 + */ + public void importTemplateExcel (HttpServletResponse response, String sheetName) { + importTemplateExcel(response, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @param title 标题 + * + * @return 结果 + */ + public void importTemplateExcel (HttpServletResponse response, String sheetName, String title) { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, title, Type.IMPORT); + exportExcel(response); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public void exportExcel (HttpServletResponse response) { + try { + writeSheet(); + wb.write(response.getOutputStream()); + } catch (Exception e) { + log.error("导出Excel异常{}", e.getMessage()); + } finally { + IOUtils.closeQuietly(wb); + } + } + + /** + * 创建写入数据到Sheet + */ + public void writeSheet () { + // 取出一共有多少个sheet. + int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize)); + for (int index = 0 ; index < sheetNo ; index++) { + createSheet(sheetNo, index); + + // 产生一行 + Row row = sheet.createRow(rownum); + int column = 0; + // 写入各个字段的列头名称 + for (Object[] os : fields) { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) { + for (Field subField : subFields) { + Excel subExcel = subField.getAnnotation(Excel.class); + this.createHeadCell(subExcel, row, column++); + } + } else { + this.createHeadCell(excel, row, column++); + } + } + if (Type.EXPORT.equals(type)) { + fillExcelData(index, row); + addStatisticsRow(); + } + } + } + + /** + * 填充excel数据 + * + * @param index 序号 + * @param row 单元格行 + */ + @SuppressWarnings("unchecked") + public void fillExcelData (int index, Row row) { + int startNo = index * sheetSize; + int endNo = Math.min(startNo + sheetSize, list.size()); + int rowNo = (1 + rownum) - startNo; + for (int i = startNo ; i < endNo ; i++) { + rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo; + row = sheet.createRow(rowNo); + // 得到导出对象. + T vo = (T) list.get(i); + Collection subList = null; + if (isSubList()) { + if (isSubListValue(vo)) { + subList = getListCellValue(vo); + subMergedLastRowNum = subMergedLastRowNum + subList.size(); + } else { + subMergedFirstRowNum++; + subMergedLastRowNum++; + } + } + int column = 0; + for (Object[] os : fields) { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType()) && StringUtils.isNotNull(subList)) { + boolean subFirst = false; + for (Object obj : subList) { + if (subFirst) { + rowNo++; + row = sheet.createRow(rowNo); + } + List subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class); + int subIndex = 0; + for (Field subField : subFields) { + if (subField.isAnnotationPresent(Excel.class)) { + subField.setAccessible(true); + Excel attr = subField.getAnnotation(Excel.class); + this.addCell(attr, row, (T) obj, subField, column + subIndex); + } + subIndex++; + } + subFirst = true; + } + this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size(); + } else { + this.addCell(excel, row, vo, field, column++); + } + } + } + } + + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * + * @return 样式列表 + */ + private Map createStyles (Workbook wb) { + // 写入各条记录,每条记录对应excel表中的一行 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("Arial"); + titleFont.setFontHeightInPoints((short) 16); + titleFont.setBold(true); + style.setFont(titleFont); + styles.put("title", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + styles.putAll(annotationHeaderStyles(wb, styles)); + + styles.putAll(annotationDataStyles(wb)); + + return styles; + } + + /** + * 根据Excel注解创建表格头样式 + * + * @param wb 工作薄对象 + * + * @return 自定义样式列表 + */ + private Map annotationHeaderStyles (Workbook wb, Map styles) { + Map headerStyles = new HashMap(); + for (Object[] os : fields) { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor()); + if (!headerStyles.containsKey(key)) { + CellStyle style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(excel.headerBackgroundColor().index); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(excel.headerColor().index); + style.setFont(headerFont); + headerStyles.put(key, style); + } + } + return headerStyles; + } + + /** + * 根据Excel注解创建表格列样式 + * + * @param wb 工作薄对象 + * + * @return 自定义样式列表 + */ + private Map annotationDataStyles (Workbook wb) { + Map styles = new HashMap(); + for (Object[] os : fields) { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("data_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor()); + if (!styles.containsKey(key)) { + CellStyle style = wb.createCellStyle(); + style.setAlignment(excel.align()); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(excel.backgroundColor().getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + dataFont.setColor(excel.color().index); + style.setFont(dataFont); + styles.put(key, style); + } + } + return styles; + } + + /** + * 创建单元格 + */ + public Cell createHeadCell (Excel attr, Row row, int column) { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + if (isSubList()) { + // 填充默认样式,防止合并单元格样式失效 + sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor()))); + if (attr.needMerge()) { + sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column)); + } + } + return cell; + } + + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo (Object value, Excel attr, Cell cell) { + if (ColumnType.STRING == attr.cellType()) { + String cellValue = Convert.toStr(value); + // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。 + if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) { + cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0"); + } + if (value instanceof Collection && StringUtils.equals("[]", cellValue)) { + cellValue = StringUtils.EMPTY; + } + cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); + } else if (ColumnType.NUMERIC == attr.cellType()) { + if (StringUtils.isNotNull(value)) { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } else if (ColumnType.IMAGE == attr.cellType()) { + ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); + String imagePath = Convert.toStr(value); + if (StringUtils.isNotEmpty(imagePath)) { + byte[] data = ImageUtils.getImage(imagePath); + getDrawingPatriarch(cell.getSheet()).createPicture(anchor, + cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); + } + } + } + + /** + * 获取图片类型,设置图片插入类型 + */ + public int getImageType (byte[] value) { + String type = FileTypeUtils.getFileExtendName(value); + if ("JPG".equalsIgnoreCase(type)) { + return Workbook.PICTURE_TYPE_JPEG; + } else if ("PNG".equalsIgnoreCase(type)) { + return Workbook.PICTURE_TYPE_PNG; + } + return Workbook.PICTURE_TYPE_JPEG; + } + + /** + * 创建表格样式 + */ + public void setDataValidation (Excel attr, Row row, int column) { + if (attr.name().indexOf("注:") >= 0) { + sheet.setColumnWidth(column, 6000); + } else { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + } + if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0) { + if (attr.combo().length > 15 || StringUtils.join(attr.combo()).length() > 255) { + // 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到 + setXSSFValidationWithHidden(sheet, attr.combo(), attr.prompt(), 1, 100, column, column); + } else { + // 提示信息或只能选择不能输入的列内容. + setPromptOrValidation(sheet, attr.combo(), attr.prompt(), 1, 100, column, column); + } + } + } + + /** + * 添加单元格 + */ + public Cell addCell (Excel attr, Row row, T vo, Field field, int column) { + Cell cell = null; + try { + // 设置行高 + row.setHeight(maxHeight); + // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列. + if (attr.isExport()) { + // 创建cell + cell = row.createCell(column); + if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge()) { + CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column); + sheet.addMergedRegion(cellAddress); + } + cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor()))); + + // 用于读取对象中的属性 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) { + cell.setCellValue(parseDateToStr(dateFormat, value)); + } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } else if (value instanceof BigDecimal && -1 != attr.scale()) { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue()); + } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) { + cell.setCellValue(dataFormatHandlerAdapter(value, attr, cell)); + } else { + // 设置列类型 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } catch (Exception e) { + log.error("导出Excel失败{}", e); + } + return cell; + } + + /** + * 设置 POI XSSFSheet 单元格提示或选择框 + * + * @param sheet 表单 + * @param textlist 下拉框显示的内容 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setPromptOrValidation (Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) { + // 如果设置了提示信息则鼠标放上去提示 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } else { + dataValidation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(dataValidation); + } + + /** + * 设置某些列的值只能输入预制的数据,显示下拉框(兼容超出一定数量的下拉框). + * + * @param sheet 要设置的sheet. + * @param textlist 下拉框显示的内容 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFValidationWithHidden (Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol) { + String hideSheetName = "combo_" + firstCol + "_" + endCol; + Sheet hideSheet = wb.createSheet(hideSheetName); // 用于存储 下拉菜单数据 + for (int i = 0 ; i < textlist.length ; i++) { + hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]); + } + // 创建名称,可被其他单元格引用 + Name name = wb.createName(); + name.setNameName(hideSheetName + "_data"); + name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length); + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 加载下拉列表内容 + DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data"); + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 数据有效性对象 + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) { + // 如果设置了提示信息则鼠标放上去提示 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } else { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + // 设置hiddenSheet隐藏 + wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); + } + + /** + * 数据处理器 + * + * @param value 数据值 + * @param excel 数据注解 + * + * @return + */ + public String dataFormatHandlerAdapter (Object value, Excel excel, Cell cell) { + try { + Object instance = excel.handler().newInstance(); + Method formatMethod = excel.handler().getMethod("format", new Class[]{Object.class, String[].class, Cell.class, Workbook.class}); + value = formatMethod.invoke(instance, value, excel.args(), cell, this.wb); + } catch (Exception e) { + log.error("不能格式化数据 " + excel.handler(), e.getMessage()); + } + return Convert.toStr(value); + } + + /** + * 合计统计信息 + */ + private void addStatisticsData (Integer index, String text, Excel entity) { + if (entity != null && entity.isStatistics()) { + Double temp = 0D; + if (!statistics.containsKey(index)) { + statistics.put(index, temp); + } + try { + temp = Double.valueOf(text); + } catch (NumberFormatException e) { + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 创建统计行 + */ + public void addStatisticsRow () { + if (statistics.size() > 0) { + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + Cell cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("合计"); + + for (Integer key : keys) { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 获取bean中的属性值 + * + * @param vo 实体对象 + * @param field 字段 + * @param excel 注解 + * + * @return 最终的属性值 + * + * @throws Exception + */ + private Object getTargetValue (T vo, Field field, Excel excel) throws Exception { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) { + String target = excel.targetAttr(); + if (target.contains(".")) { + String[] targets = target.split("[.]"); + for (String name : targets) { + o = getValue(o, name); + } + } else { + o = getValue(o, target); + } + } + return o; + } + + /** + * 以类的属性的get方法方法形式获取值 + * + * @param o + * @param name + * + * @return value + * + * @throws Exception + */ + private Object getValue (Object o, String name) throws Exception { + if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 得到所有定义字段 + */ + private void createExcelField () { + this.fields = getFields(); + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 获取字段注解信息 + */ + public List getFields () { + List fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) { + if (!ArrayUtils.contains(this.excludeFields, field.getName())) { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) { + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) { + field.setAccessible(true); + fields.add(new Object[]{field, attr}); + } + if (Collection.class.isAssignableFrom(field.getType())) { + subMethod = getSubMethod(field.getName(), clazz); + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + } + } + + // 多注解 + if (field.isAnnotationPresent(Excels.class)) { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel attr : excels) { + if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr()) + && (attr != null && (attr.type() == Type.ALL || attr.type() == type))) { + field.setAccessible(true); + fields.add(new Object[]{field, attr}); + } + } + } + } + } + return fields; + } + + /** + * 根据注解获取最大行高 + */ + public short getRowHeight () { + double maxHeight = 0; + for (Object[] os : this.fields) { + Excel excel = (Excel) os[1]; + maxHeight = Math.max(maxHeight, excel.height()); + } + return (short) (maxHeight * 20); + } + + /** + * 创建一个工作簿 + */ + public void createWorkbook () { + this.wb = new SXSSFWorkbook(500); + this.sheet = wb.createSheet(); + wb.setSheetName(0, sheetName); + this.styles = createStyles(wb); + } + + /** + * 创建工作表 + * + * @param sheetNo sheet数量 + * @param index 序号 + */ + public void createSheet (int sheetNo, int index) { + // 设置工作表的名称. + if (sheetNo > 1 && index > 0) { + this.sheet = wb.createSheet(); + this.createTitle(); + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 获取单元格值 + * + * @param row 获取的行 + * @param column 获取单元格列号 + * + * @return 单元格值 + */ + public Object getCellValue (Row row, int column) { + if (row == null) { + return row; + } + Object val = ""; + try { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) { + if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) { + val = cell.getNumericCellValue(); + if (DateUtil.isCellDateFormatted(cell)) { + val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换 + } else { + if ((Double) val % 1 != 0) { + val = new BigDecimal(val.toString()); + } else { + val = new DecimalFormat("0").format(val); + } + } + } else if (cell.getCellType() == CellType.STRING) { + val = cell.getStringCellValue(); + } else if (cell.getCellType() == CellType.BOOLEAN) { + val = cell.getBooleanCellValue(); + } else if (cell.getCellType() == CellType.ERROR) { + val = cell.getErrorCellValue(); + } + + } + } catch (Exception e) { + return val; + } + return val; + } + + /** + * 判断是否是空行 + * + * @param row 判断的行 + * + * @return + */ + private boolean isRowEmpty (Row row) { + if (row == null) { + return true; + } + for (int i = row.getFirstCellNum() ; i < row.getLastCellNum() ; i++) { + Cell cell = row.getCell(i); + if (cell != null && cell.getCellType() != CellType.BLANK) { + return false; + } + } + return true; + } + + /** + * 格式化不同类型的日期对象 + * + * @param dateFormat 日期格式 + * @param val 被格式化的日期对象 + * + * @return 格式化后的日期字符 + */ + public String parseDateToStr (String dateFormat, Object val) { + if (val == null) { + return ""; + } + String str; + if (val instanceof Date) { + str = DateUtils.parseDateToStr(dateFormat, (Date) val); + } else if (val instanceof LocalDateTime) { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val)); + } else if (val instanceof LocalDate) { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val)); + } else { + str = val.toString(); + } + return str; + } + + /** + * 是否有对象的子列表 + */ + public boolean isSubList () { + return StringUtils.isNotNull(subFields) && subFields.size() > 0; + } + + /** + * 是否有对象的子列表,集合不为空 + */ + public boolean isSubListValue (T vo) { + return StringUtils.isNotNull(subFields) && subFields.size() > 0 && StringUtils.isNotNull(getListCellValue(vo)) && getListCellValue(vo).size() > 0; + } + + /** + * 获取集合的值 + */ + public Collection getListCellValue (Object obj) { + Object value; + try { + value = subMethod.invoke(obj, new Object[]{}); + } catch (Exception e) { + return new ArrayList(); + } + return (Collection) value; + } + + /** + * 获取对象的子列表方法 + * + * @param name 名称 + * @param pojoClass 类对象 + * + * @return 子列表方法 + */ + public Method getSubMethod (String name, Class pojoClass) { + StringBuffer getMethodName = new StringBuffer("get"); + getMethodName.append(name.substring(0, 1).toUpperCase()); + getMethodName.append(name.substring(1)); + Method method = null; + try { + method = pojoClass.getMethod(getMethodName.toString(), new Class[]{}); + } catch (Exception e) { + log.error("获取对象异常{}", e.getMessage()); + } + return method; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/reflect/ReflectUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..2376da7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/reflect/ReflectUtils.java @@ -0,0 +1,324 @@ +package com.ruoyi.common.core.utils.reflect; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.*; +import java.util.Date; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + * @author muyu + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils { + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter (Object obj, String propertyName) { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{}); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter (Object obj, String propertyName, E value) { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0 ; i < names.length ; i++) { + if (i < names.length - 1) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{}); + } else { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[]{value}); + } + } + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue (final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return null; + } + E result = null; + try { + result = (E) field.get(obj); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue (final Object obj, final String fieldName, final E value) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + // throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return; + } + try { + field.set(obj, value); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常: {}", e.getMessage()); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. + * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. + * 同时匹配方法名+参数类型, + */ + @SuppressWarnings("unchecked") + public static E invokeMethod (final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) { + if (obj == null || methodName == null) { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try { + return (E) method.invoke(obj, args); + } catch (Exception e) { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName (final Object obj, final String methodName, final Object[] args) { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) { + // 如果为空不报错,直接返回空。 + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try { + // 类型转换(将参数数据类型转换为目标方法参数类型) + Class[] cs = method.getParameterTypes(); + for (int i = 0 ; i < cs.length ; i++) { + if (args[i] != null && !args[i].getClass().equals(cs[i])) { + if (cs[i] == String.class) { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } else if (cs[i] == Integer.class) { + args[i] = Convert.toInt(args[i]); + } else if (cs[i] == Long.class) { + args[i] = Convert.toLong(args[i]); + } else if (cs[i] == Double.class) { + args[i] = Convert.toDouble(args[i]); + } else if (cs[i] == Float.class) { + args[i] = Convert.toFloat(args[i]); + } else if (cs[i] == Date.class) { + if (args[i] instanceof String) { + args[i] = DateUtils.parseDate(args[i]); + } else { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } else if (cs[i] == boolean.class || cs[i] == Boolean.class) { + args[i] = Convert.toBool(args[i]); + } + } + } + return (E) method.invoke(obj, args); + } catch (Exception e) { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField (final Object obj, final String fieldName) { + // 为空不报错。直接返回 null + if (obj == null) { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass() ; superClass != Object.class ; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod (final Object obj, final String methodName, + final Class... parameterTypes) { + // 为空不报错。直接返回 null + if (obj == null) { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass() ; searchType != Object.class ; searchType = searchType.getSuperclass()) { + try { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } catch (NoSuchMethodException e) { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName (final Object obj, final String methodName, int argsNum) { + // 为空不报错。直接返回 null + if (obj == null) { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass() ; searchType != Object.class ; searchType = searchType.getSuperclass()) { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible (Method method) { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible (Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处 + * 如无法找到, 返回Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType (final Class clazz) { + return getClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. + * 如无法找到, 返回Object.class. + */ + public static Class getClassGenricType (final Class clazz, final int index) { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass (Object instance) { + if (instance == null) { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) { + return superClass; + } + } + return clazz; + + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked (String msg, Exception e) { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) { + return new IllegalArgumentException(msg, e); + } else if (e instanceof InvocationTargetException) { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sign/Base64.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sign/Base64.java new file mode 100644 index 0000000..8b17246 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sign/Base64.java @@ -0,0 +1,256 @@ +package com.ruoyi.common.core.utils.sign; + +/** + * Base64工具类 + * + * @author muyu + */ +public final class Base64 { + static private final int BASELENGTH = 128; + static private final int LOOKUPLENGTH = 64; + static private final int TWENTYFOURBITGROUP = 24; + static private final int EIGHTBIT = 8; + static private final int SIXTEENBIT = 16; + static private final int FOURBYTE = 4; + static private final int SIGN = -128; + static private final char PAD = '='; + static final private byte[] base64Alphabet = new byte[BASELENGTH]; + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + + static { + for (int i = 0 ; i < BASELENGTH ; ++i) { + base64Alphabet[i] = -1; + } + for (int i = 'Z' ; i >= 'A' ; i--) { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z' ; i >= 'a' ; i--) { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + + for (int i = '9' ; i >= '0' ; i--) { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0 ; i <= 25 ; i++) { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + + for (int i = 26, j = 0 ; i <= 51 ; i++, j++) { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + + for (int i = 52, j = 0 ; i <= 61 ; i++, j++) { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace (char octect) { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad (char octect) { + return (octect == PAD); + } + + private static boolean isData (char octect) { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * + * @return Encoded Base64 array + */ + public static String encode (byte[] binaryData) { + if (binaryData == null) { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + + encodedData = new char[numberQuartet * 4]; + + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0 ; i < numberTriplets ; i++) { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } else if (fewerThan24bits == SIXTEENBIT) { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * + * @return Array containind decoded data. + */ + public static byte[] decode (String encoded) { + if (encoded == null) { + return null; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) { + return null;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) { + return new byte[0]; + } + + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + + for ( ; i < numberQuadruple - 1 ; i++) { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) { + return null; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) { + return null;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } else if (!isPad(d3) && isPad(d4)) { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } else { + return null; + } + } else { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * + * @return the new length + */ + private static int removeWhiteSpace (char[] data) { + if (data == null) { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0 ; i < len ; i++) { + if (!isWhiteSpace(data[i])) { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java new file mode 100644 index 0000000..92837a8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java @@ -0,0 +1,59 @@ +package com.ruoyi.common.core.utils.sql; + +import com.ruoyi.common.core.exception.UtilException; +import com.ruoyi.common.core.utils.StringUtils; + +/** + * sql操作工具类 + * + * @author muyu + */ +public class SqlUtil { + /** + * 限制orderBy最大长度 + */ + private static final int ORDER_BY_MAX_LENGTH = 500; + /** + * 定义常用的 sql关键字 + */ + public static String SQL_REGEX = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |+|user()"; + /** + * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) + */ + public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 检查字符,防止注入绕过 + */ + public static String escapeOrderBySql (String value) { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) { + throw new UtilException("参数不符合规范,不能进行查询"); + } + if (StringUtils.length(value) > ORDER_BY_MAX_LENGTH) { + throw new UtilException("参数已超过最大限制,不能进行查询"); + } + return value; + } + + /** + * 验证 order by 语法是否符合规范 + */ + public static boolean isValidOrderBySql (String value) { + return value.matches(SQL_PATTERN); + } + + /** + * SQL关键字检查 + */ + public static void filterKeyword (String value) { + if (StringUtils.isEmpty(value)) { + return; + } + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + for (String sqlKeyword : sqlKeywords) { + if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) { + throw new UtilException("参数存在SQL注入风险"); + } + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/IdUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/IdUtils.java new file mode 100644 index 0000000..e95b072 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/IdUtils.java @@ -0,0 +1,44 @@ +package com.ruoyi.common.core.utils.uuid; + +/** + * ID生成器工具类 + * + * @author muyu + */ +public class IdUtils { + /** + * 获取随机UUID + * + * @return 随机UUID + */ + public static String randomUUID () { + return UUID.randomUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线 + * + * @return 简化的UUID,去掉了横线 + */ + public static String simpleUUID () { + return UUID.randomUUID().toString(true); + } + + /** + * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 随机UUID + */ + public static String fastUUID () { + return UUID.fastUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 简化的UUID,去掉了横线 + */ + public static String fastSimpleUUID () { + return UUID.fastUUID().toString(true); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/Seq.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/Seq.java new file mode 100644 index 0000000..1a23d33 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/Seq.java @@ -0,0 +1,78 @@ +package com.ruoyi.common.core.utils.uuid; + +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author muyu 序列生成类 + */ +public class Seq { + // 通用序列类型 + public static final String commSeqType = "COMMON"; + + // 上传序列类型 + public static final String uploadSeqType = "UPLOAD"; + // 机器标识 + private static final String machineCode = "A"; + // 通用接口序列数 + private static AtomicInteger commSeq = new AtomicInteger(1); + // 上传接口序列数 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + /** + * 获取通用序列号 + * + * @return 序列值 + */ + public static String getId () { + return getId(commSeqType); + } + + /** + * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串 + * + * @return 序列值 + */ + public static String getId (String type) { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串 + * + * @param atomicInt 序列数 + * @param length 数值长度 + * + * @return 序列值 + */ + public static String getId (AtomicInteger atomicInt, int length) { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数 + * + * @return 序列值 + */ + private synchronized static String getSeq (AtomicInteger atomicInt, int length) { + // 先取值再+1 + int value = atomicInt.getAndIncrement(); + + // 如果更新后值>=10 的 (length)幂次方则重置为1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) { + atomicInt.set(1); + } + // 转字符串,用0左补齐 + return StringUtils.padl(value, length); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/UUID.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/UUID.java new file mode 100644 index 0000000..8af3c20 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/UUID.java @@ -0,0 +1,450 @@ +package com.ruoyi.common.core.utils.uuid; + +import com.ruoyi.common.core.exception.UtilException; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 提供通用唯一识别码(universally unique identifier)(UUID)实现 + * + * @author muyu + */ +public final class UUID implements java.io.Serializable, Comparable { + private static final long serialVersionUID = -1185015143654744140L; + /** + * 此UUID的最高64有效位 + */ + private final long mostSigBits; + /** + * 此UUID的最低64有效位 + */ + private final long leastSigBits; + + /** + * 私有构造 + * + * @param data 数据 + */ + private UUID (byte[] data) { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0 ; i < 8 ; i++) { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8 ; i < 16 ; i++) { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 使用指定的数据构造新的 UUID。 + * + * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位 + * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位 + */ + public UUID (long mostSigBits, long leastSigBits) { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID fastUUID () { + return randomUUID(false); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID () { + return randomUUID(true); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID (boolean isSecure) { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。 + * + * @param name 用于构造 UUID 的字节数组。 + * + * @return 根据指定数组生成的 {@code UUID} + */ + public static UUID nameUUIDFromBytes (byte[] name) { + MessageDigest md; + try { + md = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException nsae) { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 根据 {@link #toString()} 方法中描述的字符串标准表示形式创建{@code UUID}。 + * + * @param name 指定 {@code UUID} 字符串 + * + * @return 具有指定值的 {@code UUID} + * + * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常 + */ + public static UUID fromString (String name) { + String[] components = name.split("-"); + if (components.length != 5) { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0 ; i < 5 ; i++) { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 返回指定数字对应的hex值 + * + * @param val 值 + * @param digits 位 + * + * @return 值 + */ + private static String digits (long val, int digits) { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 获取{@link SecureRandom},类提供加密的强随机数生成器 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom () { + try { + return SecureRandom.getInstance("SHA1PRNG"); + } catch (NoSuchAlgorithmException e) { + throw new UtilException(e); + } + } + + /** + * 获取随机数生成器对象
+ * ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom () { + return ThreadLocalRandom.current(); + } + + /** + * 返回此 UUID 的 128 位值中的最低有效 64 位。 + * + * @return 此 UUID 的 128 位值中的最低有效 64 位。 + */ + public long getLeastSignificantBits () { + return leastSigBits; + } + + /** + * 返回此 UUID 的 128 位值中的最高有效 64 位。 + * + * @return 此 UUID 的 128 位值中最高有效 64 位。 + */ + public long getMostSignificantBits () { + return mostSigBits; + } + + /** + * 与此 {@code UUID} 相关联的版本号. 版本号描述此 {@code UUID} 是如何生成的。 + *

+ * 版本号具有以下含意: + *

    + *
  • 1 基于时间的 UUID + *
  • 2 DCE 安全 UUID + *
  • 3 基于名称的 UUID + *
  • 4 随机生成的 UUID + *
+ * + * @return 此 {@code UUID} 的版本号 + */ + public int version () { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 与此 {@code UUID} 相关联的变体号。变体号描述 {@code UUID} 的布局。 + *

+ * 变体号具有以下含意: + *

    + *
  • 0 为 NCS 向后兼容保留 + *
  • 2 IETF RFC 4122(Leach-Salz), 用于此类 + *
  • 6 保留,微软向后兼容 + *
  • 7 保留供以后定义使用 + *
+ * + * @return 此 {@code UUID} 相关联的变体号 + */ + public int variant () { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 与此 UUID 相关联的时间戳值。 + * + *

+ * 60 位的时间戳值根据此 {@code UUID} 的 time_low、time_mid 和 time_hi 字段构造。
+ * 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 + * + *

+ * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 + */ + public long timestamp () throws UnsupportedOperationException { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 与此 UUID 相关联的时钟序列值。 + * + *

+ * 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。 + *

+ * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 + * UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的时钟序列 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public int clockSequence () throws UnsupportedOperationException { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 与此 UUID 相关的节点值。 + * + *

+ * 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 + *

+ * 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的节点值 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public long node () throws UnsupportedOperationException { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 此{@code UUID} 的字符串表现形式 + * + * @see #toString(boolean) + */ + @Override + public String toString () { + return toString(false); + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 + * + * @return 此{@code UUID} 的字符串表现形式 + */ + public String toString (boolean isSimple) { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (false == isSimple) { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (false == isSimple) { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (false == isSimple) { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (false == isSimple) { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + // Comparison Operations + + /** + * 返回此 UUID 的哈希码。 + * + * @return UUID 的哈希码值。 + */ + @Override + public int hashCode () { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + + /** + * 将此对象与指定对象比较。 + *

+ * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 + * + * @param obj 要与之比较的对象 + * + * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} + */ + @Override + public boolean equals (Object obj) { + if ((null == obj) || (obj.getClass() != UUID.class)) { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + /** + * 将此 UUID 与指定的 UUID 比较。 + * + *

+ * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 + * + * @param val 与此 UUID 比较的 UUID + * + * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 + */ + @Override + public int compareTo (UUID val) { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + /** + * 检查是否为time-based版本UUID + */ + private void checkTimeBase () { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * SecureRandom 的单例 + */ + private static class Holder { + static final SecureRandom numberGenerator = getSecureRandom(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java new file mode 100644 index 0000000..74051d3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java @@ -0,0 +1,129 @@ +package com.ruoyi.common.core.web.controller; + +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.PageUtils; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; + +/** + * web层通用数据处理 + * + * @author muyu + */ +public class BaseController { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 将前台传递过来的日期格式的字符串,自动转化为Date类型 + */ + @InitBinder + public void initBinder (WebDataBinder binder) { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + @Override + public void setAsText (String text) { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 设置请求分页数据 + */ + protected void startPage () { + PageUtils.startPage(); + } + + /** + * 清理分页的线程变量 + */ + protected void clearPage () { + PageUtils.clearPage(); + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + protected Result> getDataTable (List list) { + return Result.success( + TableDataInfo.builder() + .total(new PageInfo(list).getTotal()) + .rows(list) + .build() + ); + } + + /** + * 返回成功 + */ + public Result success () { + return Result.success(); + } + + /** + * 返回成功消息 + */ + public Result success (String message) { + return Result.success(message); + } + + /** + * 返回成功消息 + */ + public Result success (Object data) { + return Result.success(data); + } + + /** + * 返回失败消息 + */ + public Result error () { + return Result.error(); + } + + /** + * 返回失败消息 + */ + public Result error (String message) { + return Result.error(message); + } + + /** + * 返回警告消息 + */ + public Result warn (String message) { + return Result.warn(message); + } + + /** + * 响应返回结果 + * + * @param rows 影响行数 + * + * @return 操作结果 + */ + protected Result toAjax (int rows) { + return rows > 0 ? Result.success() : Result.error(); + } + + /** + * 响应返回结果 + * + * @param result 结果 + * + * @return 操作结果 + */ + protected Result toAjax (boolean result) { + return result ? success() : error(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java new file mode 100644 index 0000000..e1270a4 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java @@ -0,0 +1,80 @@ +package com.ruoyi.common.core.web.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Entity基类 + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 搜索值 + */ + @JsonIgnore + @TableField(exist = false) + private String searchValue; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新者 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 备注 + */ + private String remark; + + /** + * 请求参数 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + @TableField(exist = false) + private Map params; + + public Map getParams () { + if (params == null) { + params = new HashMap<>(); + } + return params; + } + + public void setParams (Map params) { + this.params = params; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/TreeEntity.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/TreeEntity.java new file mode 100644 index 0000000..7681573 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/domain/TreeEntity.java @@ -0,0 +1,88 @@ +package com.ruoyi.common.core.web.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.ArrayList; +import java.util.List; + +/** + * Tree基类 + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class TreeEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 父菜单名称 + */ + private String parentName; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 子部门 + */ + private List children = new ArrayList<>(); + + public String getParentName () { + return parentName; + } + + public void setParentName (String parentName) { + this.parentName = parentName; + } + + public Long getParentId () { + return parentId; + } + + public void setParentId (Long parentId) { + this.parentId = parentId; + } + + public Integer getOrderNum () { + return orderNum; + } + + public void setOrderNum (Integer orderNum) { + this.orderNum = orderNum; + } + + public String getAncestors () { + return ancestors; + } + + public void setAncestors (String ancestors) { + this.ancestors = ancestors; + } + + public List getChildren () { + return children; + } + + public void setChildren (List children) { + this.children = children; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/PageDomain.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/PageDomain.java new file mode 100644 index 0000000..d77b46c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/PageDomain.java @@ -0,0 +1,93 @@ +package com.ruoyi.common.core.web.page; + +import com.ruoyi.common.core.utils.StringUtils; + +/** + * 分页数据 + * + * @author muyu + */ +public class PageDomain { + /** + * 当前记录起始索引 + */ + private Integer pageNum; + + /** + * 每页显示记录数 + */ + private Integer pageSize; + + /** + * 排序列 + */ + private String orderByColumn; + + /** + * 排序的方向desc或者asc + */ + private String isAsc = "asc"; + + /** + * 分页参数合理化 + */ + private Boolean reasonable = true; + + public String getOrderBy () { + if (StringUtils.isEmpty(orderByColumn)) { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum () { + return pageNum; + } + + public void setPageNum (Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize () { + return pageSize; + } + + public void setPageSize (Integer pageSize) { + this.pageSize = pageSize; + } + + public String getOrderByColumn () { + return orderByColumn; + } + + public void setOrderByColumn (String orderByColumn) { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc () { + return isAsc; + } + + public void setIsAsc (String isAsc) { + if (StringUtils.isNotEmpty(isAsc)) { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) { + isAsc = "asc"; + } else if ("descending".equals(isAsc)) { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } + + public Boolean getReasonable () { + if (StringUtils.isNull(reasonable)) { + return Boolean.TRUE; + } + return reasonable; + } + + public void setReasonable (Boolean reasonable) { + this.reasonable = reasonable; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableDataInfo.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableDataInfo.java new file mode 100644 index 0000000..cb00a79 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableDataInfo.java @@ -0,0 +1,44 @@ +package com.ruoyi.common.core.web.page; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 表格分页数据对象 + * + * @author muyu + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TableDataInfo implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 总记录数 + */ + private long total; + + /** + * 列表数据 + */ + private List rows; + + /** + * 消息状态码 + */ + private int code; + + /** + * 消息内容 + */ + private String msg; + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableSupport.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableSupport.java new file mode 100644 index 0000000..3d84a96 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/web/page/TableSupport.java @@ -0,0 +1,53 @@ +package com.ruoyi.common.core.web.page; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.ServletUtils; + +/** + * 表格数据处理 + * + * @author muyu + */ +public class TableSupport { + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 分页参数合理化 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain () { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); + pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); + return pageDomain; + } + + public static PageDomain buildPageRequest () { + return getPageDomain(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java new file mode 100644 index 0000000..dacf896 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.core.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author muyu + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) +@Constraint(validatedBy = {XssValidator.class}) +public @interface Xss { + String message () + + default "不允许任何脚本运行"; + + Class[] groups () default {}; + + Class[] payload () default {}; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java new file mode 100644 index 0000000..43f229d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java @@ -0,0 +1,31 @@ +package com.ruoyi.common.core.xss; + +import com.ruoyi.common.core.utils.StringUtils; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 自定义xss校验注解实现 + * + * @author muyu + */ +public class XssValidator implements ConstraintValidator { + private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + public static boolean containsHtml (String value) { + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + return matcher.matches(); + } + + @Override + public boolean isValid (String value, ConstraintValidatorContext constraintValidatorContext) { + if (StringUtils.isBlank(value)) { + return true; + } + return !containsHtml(value); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..30c45a0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.ruoyi.common.core.utils.SpringUtils diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/pom.xml new file mode 100644 index 0000000..0ea7b53 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/pom.xml @@ -0,0 +1,27 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-datascope + + + muyu-common-datascope权限范围 + + + + + + + com.muyu + muyu-common-security + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java new file mode 100644 index 0000000..004e4a8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.datascope.annotation; + +import java.lang.annotation.*; + +/** + * 数据权限过滤注解 + * + * @author muyu + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope { + /** + * 部门表的别名 + */ + public String deptAlias () default ""; + + /** + * 用户表的别名 + */ + public String userAlias () default ""; + + /** + * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@RequiresPermissions获取,多个权限用逗号分隔开来 + */ + public String permission () default ""; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java new file mode 100644 index 0000000..e03c025 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java @@ -0,0 +1,149 @@ +package com.ruoyi.common.datascope.aspect; + +import com.ruoyi.common.core.context.SecurityContextHolder; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.common.datascope.annotation.DataScope; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.common.system.domain.LoginUser; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 数据过滤处理 + * + * @author muyu + */ +@Aspect +@Component +public class DataScopeAspect { + /** + * 全部数据权限 + */ + public static final String DATA_SCOPE_ALL = "1"; + + /** + * 自定数据权限 + */ + public static final String DATA_SCOPE_CUSTOM = "2"; + + /** + * 部门数据权限 + */ + public static final String DATA_SCOPE_DEPT = "3"; + + /** + * 部门及以下数据权限 + */ + public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + + /** + * 仅本人数据权限 + */ + public static final String DATA_SCOPE_SELF = "5"; + + /** + * 数据权限过滤关键字 + */ + public static final String DATA_SCOPE = "dataScope"; + + /** + * 数据范围过滤 + * + * @param joinPoint 切点 + * @param user 用户 + * @param deptAlias 部门别名 + * @param userAlias 用户别名 + * @param permission 权限字符 + */ + public static void dataScopeFilter (JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission) { + StringBuilder sqlString = new StringBuilder(); + List conditions = new ArrayList(); + + for (SysRole role : user.getRoles()) { + String dataScope = role.getDataScope(); + if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) { + continue; + } + if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions()) + && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) { + continue; + } + if (DATA_SCOPE_ALL.equals(dataScope)) { + sqlString = new StringBuilder(); + conditions.add(dataScope); + break; + } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) { + sqlString.append(StringUtils.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, + role.getRoleId())); + } else if (DATA_SCOPE_DEPT.equals(dataScope)) { + sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); + } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) { + sqlString.append(StringUtils.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", + deptAlias, user.getDeptId(), user.getDeptId())); + } else if (DATA_SCOPE_SELF.equals(dataScope)) { + if (StringUtils.isNotBlank(userAlias)) { + sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } else { + // 数据权限为仅本人且没有userAlias别名不查询任何数据 + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + } + conditions.add(dataScope); + } + + // 多角色情况下,所有角色都不包含传递过来的权限字符,这个时候sqlString也会为空,所以要限制一下,不查询任何数据 + if (StringUtils.isEmpty(conditions)) { + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + + if (StringUtils.isNotBlank(sqlString.toString())) { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); + } + } + } + + @Before("@annotation(controllerDataScope)") + public void doBefore (JoinPoint point, DataScope controllerDataScope) throws Throwable { + clearDataScope(point); + handleDataScope(point, controllerDataScope); + } + + protected void handleDataScope (final JoinPoint joinPoint, DataScope controllerDataScope) { + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNotNull(loginUser)) { + SysUser currentUser = loginUser.getSysUser(); + // 如果是超级管理员,则不过滤数据 + if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) { + String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), SecurityContextHolder.getPermission()); + dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), + controllerDataScope.userAlias(), permission); + } + } + } + + /** + * 拼接权限sql前先清空params.dataScope参数防止注入 + */ + private void clearDataScope (final JoinPoint joinPoint) { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, ""); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..8c4b0e4 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datascope/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.ruoyi.common.datascope.aspect.DataScopeAspect diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/pom.xml new file mode 100644 index 0000000..4fc1bd3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/pom.xml @@ -0,0 +1,35 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-datasource + + + muyu-common-datasource多数据源 + + + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + com.baomidou + dynamic-datasource-spring-boot-starter + ${dynamic-ds.version} + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Master.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Master.java new file mode 100644 index 0000000..aa12f35 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Master.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.datasource.annotation; + +import com.baomidou.dynamic.datasource.annotation.DS; + +import java.lang.annotation.*; + +/** + * 主库数据源 + * + * @author muyu + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@DS("master") +public @interface Master { + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Slave.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Slave.java new file mode 100644 index 0000000..9652c41 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Slave.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.datasource.annotation; + +import com.baomidou.dynamic.datasource.annotation.DS; + +import java.lang.annotation.*; + +/** + * 从库数据源 + * + * @author muyu + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@DS("slave") +public @interface Slave { + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/pom.xml new file mode 100644 index 0000000..4d8915d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/pom.xml @@ -0,0 +1,27 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-log + + + muyu-common-log日志记录 + + + + + + + com.muyu + muyu-common-security + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java new file mode 100644 index 0000000..abdbdbf --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java @@ -0,0 +1,46 @@ +package com.ruoyi.common.log.annotation; + +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.log.enums.OperatorType; + +import java.lang.annotation.*; + +/** + * 自定义操作日志记录注解 + * + * @author muyu + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log { + /** + * 模块 + */ + public String title () default ""; + + /** + * 功能 + */ + public BusinessType businessType () default BusinessType.OTHER; + + /** + * 操作人类别 + */ + public OperatorType operatorType () default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + public boolean isSaveRequestData () default true; + + /** + * 是否保存响应的参数 + */ + public boolean isSaveResponseData () default true; + + /** + * 排除指定的请求参数 + */ + public String[] excludeParamNames () default {}; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java new file mode 100644 index 0000000..32d5bf8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java @@ -0,0 +1,220 @@ +package com.ruoyi.common.log.aspect; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessStatus; +import com.ruoyi.common.log.filter.PropertyPreExcludeFilter; +import com.ruoyi.common.log.service.AsyncLogService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysOperLog; +import org.apache.commons.lang3.ArrayUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.NamedThreadLocal; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Collection; +import java.util.Map; + +/** + * 操作日志记录处理 + * + * @author muyu + */ +@Aspect +@Component +public class LogAspect { + /** + * 排除敏感属性字段 + */ + public static final String[] EXCLUDE_PROPERTIES = {"password", "oldPassword", "newPassword", "confirmPassword"}; + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); + /** + * 计算操作消耗时间 + */ + private static final ThreadLocal TIME_THREADLOCAL = new NamedThreadLocal("Cost Time"); + + @Autowired + private AsyncLogService asyncLogService; + + /** + * 处理请求前执行 + */ + @Before(value = "@annotation(controllerLog)") + public void boBefore (JoinPoint joinPoint, Log controllerLog) { + TIME_THREADLOCAL.set(System.currentTimeMillis()); + } + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") + public void doAfterReturning (JoinPoint joinPoint, Log controllerLog, Object jsonResult) { + handleLog(joinPoint, controllerLog, null, jsonResult); + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") + public void doAfterThrowing (JoinPoint joinPoint, Log controllerLog, Exception e) { + handleLog(joinPoint, controllerLog, e, null); + } + + protected void handleLog (final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) { + try { + // *========数据库日志=========*// + SysOperLog operLog = new SysOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 请求的地址 + String ip = IpUtils.getIpAddr(); + operLog.setOperIp(ip); + operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); + String username = SecurityUtils.getUsername(); + if (StringUtils.isNotBlank(username)) { + operLog.setOperName(username); + } + + if (e != null) { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 处理设置注解上的参数 + getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); + // 设置消耗时间 + operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get()); + // 保存数据库 + asyncLogService.saveSysLog(operLog); + } catch (Exception exp) { + // 记录本地异常日志 + log.error("异常信息:{}", exp.getMessage()); + exp.printStackTrace(); + } finally { + TIME_THREADLOCAL.remove(); + } + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param log 日志 + * @param operLog 操作日志 + * + * @throws Exception + */ + public void getControllerMethodDescription (JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception { + // 设置action动作 + operLog.setBusinessType(log.businessType().ordinal()); + // 设置标题 + operLog.setTitle(log.title()); + // 设置操作人类别 + operLog.setOperatorType(log.operatorType().ordinal()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) { + // 获取参数的信息,传入到数据库中。 + setRequestValue(joinPoint, operLog, log.excludeParamNames()); + } + // 是否需要保存response,参数和值 + if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) { + operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000)); + } + } + + /** + * 获取请求的参数,放到log中 + * + * @param operLog 操作日志 + * + * @throws Exception 异常 + */ + private void setRequestValue (JoinPoint joinPoint, SysOperLog operLog, String[] excludeParamNames) throws Exception { + String requestMethod = operLog.getRequestMethod(); + Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); + if (StringUtils.isEmpty(paramsMap) + && (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))) { + String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames); + operLog.setOperParam(StringUtils.substring(params, 0, 2000)); + } else { + operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter(excludeParamNames)), 0, 2000)); + } + } + + /** + * 参数拼装 + */ + private String argsArrayToString (Object[] paramsArray, String[] excludeParamNames) { + String params = ""; + if (paramsArray != null && paramsArray.length > 0) { + for (Object o : paramsArray) { + if (StringUtils.isNotNull(o) && !isFilterObject(o)) { + try { + String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter(excludeParamNames)); + params += jsonObj.toString() + " "; + } catch (Exception e) { + } + } + } + } + return params.trim(); + } + + /** + * 忽略敏感属性 + */ + public PropertyPreExcludeFilter excludePropertyPreFilter (String[] excludeParamNames) { + return new PropertyPreExcludeFilter().addExcludes(ArrayUtils.addAll(EXCLUDE_PROPERTIES, excludeParamNames)); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject (final Object o) { + Class clazz = o.getClass(); + if (clazz.isArray()) { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } else if (Collection.class.isAssignableFrom(clazz)) { + Collection collection = (Collection) o; + for (Object value : collection) { + return value instanceof MultipartFile; + } + } else if (Map.class.isAssignableFrom(clazz)) { + Map map = (Map) o; + for (Object value : map.entrySet()) { + Map.Entry entry = (Map.Entry) value; + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessStatus.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessStatus.java new file mode 100644 index 0000000..1566867 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessStatus.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.log.enums; + +/** + * 操作状态 + * + * @author muyu + */ +public enum BusinessStatus { + /** + * 成功 + */ + SUCCESS, + + /** + * 失败 + */ + FAIL, +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessType.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessType.java new file mode 100644 index 0000000..8d66259 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessType.java @@ -0,0 +1,58 @@ +package com.ruoyi.common.log.enums; + +/** + * 业务操作类型 + * + * @author muyu + */ +public enum BusinessType { + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/OperatorType.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/OperatorType.java new file mode 100644 index 0000000..1ff1153 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/enums/OperatorType.java @@ -0,0 +1,23 @@ +package com.ruoyi.common.log.enums; + +/** + * 操作人类别 + * + * @author muyu + */ +public enum OperatorType { + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/filter/PropertyPreExcludeFilter.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/filter/PropertyPreExcludeFilter.java new file mode 100644 index 0000000..90fba88 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/filter/PropertyPreExcludeFilter.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.log.filter; + +import com.alibaba.fastjson2.filter.SimplePropertyPreFilter; + +/** + * 排除JSON敏感属性 + * + * @author muyu + */ +public class PropertyPreExcludeFilter extends SimplePropertyPreFilter { + public PropertyPreExcludeFilter () { + } + + public PropertyPreExcludeFilter addExcludes (String... filters) { + for (int i = 0 ; i < filters.length ; i++) { + this.getExcludes().add(filters[i]); + } + return this; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java new file mode 100644 index 0000000..845dc26 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.log.service; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.system.remote.RemoteLogService; +import com.ruoyi.common.system.domain.SysOperLog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +/** + * 异步调用日志服务 + * + * @author muyu + */ +@Service +public class AsyncLogService { + @Autowired + private RemoteLogService remoteLogService; + + /** + * 保存系统日志记录 + */ + @Async + public void saveSysLog (SysOperLog sysOperLog) throws Exception { + remoteLogService.saveLog(sysOperLog, SecurityConstants.INNER); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..ee96a67 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.ruoyi.common.log.service.AsyncLogService +com.ruoyi.common.log.aspect.LogAspect diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/pom.xml new file mode 100644 index 0000000..648440e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/pom.xml @@ -0,0 +1,33 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-redis + + + muyu-common-redis缓存服务 + + + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + com.muyu + muyu-common-core + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..71aa95c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java @@ -0,0 +1,47 @@ +package com.ruoyi.common.redis.configure; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.filter.Filter; +import com.ruoyi.common.core.constant.Constants; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.Charset; + +/** + * Redis使用FastJson序列化 + * + * @author muyu + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer { + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); + + private Class clazz; + + public FastJson2JsonRedisSerializer (Class clazz) { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize (T t) throws SerializationException { + if (t == null) { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize (byte[] bytes) throws SerializationException { + if (bytes == null || bytes.length <= 0) { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz, AUTO_TYPE_FILTER); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java new file mode 100644 index 0000000..67d09ed --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java @@ -0,0 +1,41 @@ +package com.ruoyi.common.redis.configure; + +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * redis配置 + * + * @author muyu + */ +@Configuration +@EnableCaching +@AutoConfigureBefore(RedisAutoConfiguration.class) +public class RedisConfig extends CachingConfigurerSupport { + @Bean + @SuppressWarnings(value = {"unchecked", "rawtypes"}) + public RedisTemplate redisTemplate (RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + + // 使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + + // Hash的key也采用StringRedisSerializer的序列化方式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java new file mode 100644 index 0000000..bfd39a4 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java @@ -0,0 +1,258 @@ +package com.ruoyi.common.redis.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * spring redis 工具类 + * + * @author muyu + **/ +@SuppressWarnings(value = {"unchecked", "rawtypes"}) +@Component +public class RedisService { + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject (final String key, final T value) { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject (final String key, final T value, final Long timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * + * @return true=设置成功;false=设置失败 + */ + public boolean expire (final String key, final long timeout) { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * + * @return true=设置成功;false=设置失败 + */ + public boolean expire (final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * + * @return 有效时间 + */ + public long getExpire (final String key) { + return redisTemplate.getExpire(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * + * @return true 存在 false不存在 + */ + public Boolean hasKey (String key) { + return redisTemplate.hasKey(key); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * + * @return 缓存键值对应的数据 + */ + public T getCacheObject (final String key) { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject (final String key) { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * + * @return + */ + public boolean deleteObject (final Collection collection) { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * + * @return 缓存的对象 + */ + public long setCacheList (final String key, final List dataList) { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * + * @return 缓存键值对应的数据 + */ + public List getCacheList (final String key) { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet (final String key, final Set dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * + * @return + */ + public Set getCacheSet (final String key) { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap (final String key, final Map dataMap) { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * + * @return + */ + public Map getCacheMap (final String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue (final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * + * @return Hash中的对象 + */ + public T getCacheMapValue (final String key, final String hKey) { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * + * @return Hash对象集合 + */ + public List getMultiCacheMapValue (final String key, final Collection hKeys) { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * + * @return 是否成功 + */ + public boolean deleteCacheMapValue (final String key, final String hKey) { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * + * @return 对象列表 + */ + public Collection keys (final String pattern) { + return redisTemplate.keys(pattern); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..9ff60df --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.ruoyi.common.redis.configure.RedisConfig +com.ruoyi.common.redis.service.RedisService diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-seata/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-seata/pom.xml new file mode 100644 index 0000000..6812827 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-seata/pom.xml @@ -0,0 +1,27 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-seata + + + muyu-common-seata分布式事务 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/pom.xml new file mode 100644 index 0000000..7ed71bd --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/pom.xml @@ -0,0 +1,39 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-security + + + muyu-common-security安全模块 + + + + + + + org.springframework + spring-webmvc + + + + + com.muyu + muyu-common-redis + + + + + com.muyu + muyu-common-system + + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java new file mode 100644 index 0000000..cf2c2cc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.security.annotation; + +import com.ruoyi.common.security.config.ApplicationConfig; +import com.ruoyi.common.security.feign.FeignAutoConfiguration; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.context.annotation.Import; +import org.springframework.scheduling.annotation.EnableAsync; + +import java.lang.annotation.*; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +// 表示通过aop框架暴露该代理对象,AopContext能够访问 +@EnableAspectJAutoProxy(exposeProxy = true) +// 指定要扫描的Mapper类的包的路径 +@MapperScan("com.ruoyi.**.mapper") +// 开启线程异步执行 +@EnableAsync +// 自动加载类 +@Import({ApplicationConfig.class, FeignAutoConfiguration.class}) +public @interface EnableCustomConfig { + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableMyFeignClients.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableMyFeignClients.java new file mode 100644 index 0000000..704a30e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableMyFeignClients.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.security.annotation; + +import org.springframework.cloud.openfeign.EnableFeignClients; + +import java.lang.annotation.*; + +/** + * 自定义feign注解 + * 添加basePackages路径 + * + * @author muyu + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@EnableFeignClients +public @interface EnableMyFeignClients { + String[] value () default {}; + + String[] basePackages () default {"com.ruoyi"}; + + Class[] basePackageClasses () default {}; + + Class[] defaultConfiguration () default {}; + + Class[] clients () default {}; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java new file mode 100644 index 0000000..5ecad8b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.security.annotation; + +import java.lang.annotation.*; + +/** + * 内部认证注解 + * + * @author muyu + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface InnerAuth { + /** + * 是否校验用户信息 + */ + boolean isUser () default false; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java new file mode 100644 index 0000000..3bc9172 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.security.annotation; + +/** + * 权限注解的验证模式 + * + * @author muyu + */ +public enum Logical { + /** + * 必须具有所有的元素 + */ + AND, + + /** + * 只需具有其中一个元素 + */ + OR +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java new file mode 100644 index 0000000..ece2940 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.security.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 登录认证:只有登录之后才能进入该方法 + * + * @author muyu + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.TYPE}) +public @interface RequiresLogin { +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java new file mode 100644 index 0000000..8a2988c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java @@ -0,0 +1,25 @@ +package com.ruoyi.common.security.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 权限认证:必须具有指定权限才能进入该方法 + * + * @author muyu + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.TYPE}) +public @interface RequiresPermissions { + /** + * 需要校验的权限码 + */ + String[] value () default {}; + + /** + * 验证模式:AND | OR,默认AND + */ + Logical logical () default Logical.AND; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java new file mode 100644 index 0000000..d4a5895 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java @@ -0,0 +1,25 @@ +package com.ruoyi.common.security.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 角色认证:必须具有指定角色标识才能进入该方法 + * + * @author muyu + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.TYPE}) +public @interface RequiresRoles { + /** + * 需要校验的角色标识 + */ + String[] value () default {}; + + /** + * 验证逻辑:AND | OR,默认AND + */ + Logical logical () default Logical.AND; +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java new file mode 100644 index 0000000..48da01c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java @@ -0,0 +1,46 @@ +package com.ruoyi.common.security.aspect; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.exception.InnerAuthException; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.annotation.InnerAuth; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; + +/** + * 内部服务调用验证处理 + * + * @author muyu + */ +@Aspect +@Component +public class InnerAuthAspect implements Ordered { + @Around("@annotation(innerAuth)") + public Object innerAround (ProceedingJoinPoint point, InnerAuth innerAuth) throws Throwable { + String source = ServletUtils.getRequest().getHeader(SecurityConstants.FROM_SOURCE); + // 内部请求验证 + if (!StringUtils.equals(SecurityConstants.INNER, source)) { + throw new InnerAuthException("没有内部访问权限,不允许访问"); + } + + String userid = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USER_ID); + String username = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USERNAME); + // 用户信息验证 + if (innerAuth.isUser() && (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))) { + throw new InnerAuthException("没有设置用户信息,不允许访问 "); + } + return point.proceed(); + } + + /** + * 确保在权限认证aop执行前执行 + */ + @Override + public int getOrder () { + return Ordered.HIGHEST_PRECEDENCE + 1; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java new file mode 100644 index 0000000..f0ecb04 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java @@ -0,0 +1,89 @@ +package com.ruoyi.common.security.aspect; + +import com.ruoyi.common.security.annotation.RequiresLogin; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.annotation.RequiresRoles; +import com.ruoyi.common.security.auth.AuthUtil; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +/** + * 基于 Spring Aop 的注解鉴权 + * + * @author kong + */ +@Aspect +@Component +public class PreAuthorizeAspect { + /** + * 定义AOP签名 (切入所有使用鉴权注解的方法) + */ + public static final String POINTCUT_SIGN = " @annotation(com.ruoyi.common.security.annotation.RequiresLogin) || " + + "@annotation(com.ruoyi.common.security.annotation.RequiresPermissions) || " + + "@annotation(com.ruoyi.common.security.annotation.RequiresRoles)"; + + /** + * 构建 + */ + public PreAuthorizeAspect () { + } + + /** + * 声明AOP签名 + */ + @Pointcut(POINTCUT_SIGN) + public void pointcut () { + } + + /** + * 环绕切入 + * + * @param joinPoint 切面对象 + * + * @return 底层方法执行后的返回值 + * + * @throws Throwable 底层方法抛出的异常 + */ + @Around("pointcut()") + public Object around (ProceedingJoinPoint joinPoint) throws Throwable { + // 注解鉴权 + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + checkMethodAnnotation(signature.getMethod()); + try { + // 执行原有逻辑 + Object obj = joinPoint.proceed(); + return obj; + } catch (Throwable e) { + throw e; + } + } + + /** + * 对一个Method对象进行注解检查 + */ + public void checkMethodAnnotation (Method method) { + // 校验 @RequiresLogin 注解 + RequiresLogin requiresLogin = method.getAnnotation(RequiresLogin.class); + if (requiresLogin != null) { + AuthUtil.checkLogin(); + } + + // 校验 @RequiresRoles 注解 + RequiresRoles requiresRoles = method.getAnnotation(RequiresRoles.class); + if (requiresRoles != null) { + AuthUtil.checkRole(requiresRoles); + } + + // 校验 @RequiresPermissions 注解 + RequiresPermissions requiresPermissions = method.getAnnotation(RequiresPermissions.class); + if (requiresPermissions != null) { + AuthUtil.checkPermi(requiresPermissions); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java new file mode 100644 index 0000000..81ac2fe --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java @@ -0,0 +1,327 @@ +package com.ruoyi.common.security.auth; + +import com.ruoyi.common.core.context.SecurityContextHolder; +import com.ruoyi.common.core.exception.auth.NotLoginException; +import com.ruoyi.common.core.exception.auth.NotPermissionException; +import com.ruoyi.common.core.exception.auth.NotRoleException; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.annotation.Logical; +import com.ruoyi.common.security.annotation.RequiresLogin; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.annotation.RequiresRoles; +import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.LoginUser; +import org.springframework.util.PatternMatchUtils; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +/** + * Token 权限验证,逻辑实现类 + * + * @author muyu + */ +public class AuthLogic { + /** + * 所有权限标识 + */ + private static final String ALL_PERMISSION = "*:*:*"; + + /** + * 管理员角色权限标识 + */ + private static final String SUPER_ADMIN = "admin"; + + public TokenService tokenService = SpringUtils.getBean(TokenService.class); + + /** + * 会话注销 + */ + public void logout () { + String token = SecurityUtils.getToken(); + if (token == null) { + return; + } + logoutByToken(token); + } + + /** + * 会话注销,根据指定Token + */ + public void logoutByToken (String token) { + tokenService.delLoginUser(token); + } + + /** + * 检验用户是否已经登录,如未登录,则抛出异常 + */ + public void checkLogin () { + getLoginUser(); + } + + /** + * 获取当前用户缓存信息, 如果未登录,则抛出异常 + * + * @return 用户缓存信息 + */ + public LoginUser getLoginUser () { + String token = SecurityUtils.getToken(); + if (token == null) { + throw new NotLoginException("未提供token"); + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null) { + throw new NotLoginException("无效的token"); + } + return loginUser; + } + + /** + * 获取当前用户缓存信息, 如果未登录,则抛出异常 + * + * @param token 前端传递的认证信息 + * + * @return 用户缓存信息 + */ + public LoginUser getLoginUser (String token) { + return tokenService.getLoginUser(token); + } + + /** + * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存 + * + * @param loginUser 当前用户信息 + */ + public void verifyLoginUserExpire (LoginUser loginUser) { + tokenService.verifyToken(loginUser); + } + + /** + * 验证用户是否具备某权限 + * + * @param permission 权限字符串 + * + * @return 用户是否具备某权限 + */ + public boolean hasPermi (String permission) { + return hasPermi(getPermiList(), permission); + } + + /** + * 验证用户是否具备某权限, 如果验证未通过,则抛出异常: NotPermissionException + * + * @param permission 权限字符串 + * + * @return 用户是否具备某权限 + */ + public void checkPermi (String permission) { + if (!hasPermi(getPermiList(), permission)) { + throw new NotPermissionException(permission); + } + } + + /** + * 根据注解(@RequiresPermissions)鉴权, 如果验证未通过,则抛出异常: NotPermissionException + * + * @param requiresPermissions 注解对象 + */ + public void checkPermi (RequiresPermissions requiresPermissions) { + SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ",")); + if (requiresPermissions.logical() == Logical.AND) { + checkPermiAnd(requiresPermissions.value()); + } else { + checkPermiOr(requiresPermissions.value()); + } + } + + /** + * 验证用户是否含有指定权限,必须全部拥有 + * + * @param permissions 权限列表 + */ + public void checkPermiAnd (String... permissions) { + Set permissionList = getPermiList(); + for (String permission : permissions) { + if (!hasPermi(permissionList, permission)) { + throw new NotPermissionException(permission); + } + } + } + + /** + * 验证用户是否含有指定权限,只需包含其中一个 + * + * @param permissions 权限码数组 + */ + public void checkPermiOr (String... permissions) { + Set permissionList = getPermiList(); + for (String permission : permissions) { + if (hasPermi(permissionList, permission)) { + return; + } + } + if (permissions.length > 0) { + throw new NotPermissionException(permissions); + } + } + + /** + * 判断用户是否拥有某个角色 + * + * @param role 角色标识 + * + * @return 用户是否具备某角色 + */ + public boolean hasRole (String role) { + return hasRole(getRoleList(), role); + } + + /** + * 判断用户是否拥有某个角色, 如果验证未通过,则抛出异常: NotRoleException + * + * @param role 角色标识 + */ + public void checkRole (String role) { + if (!hasRole(role)) { + throw new NotRoleException(role); + } + } + + /** + * 根据注解(@RequiresRoles)鉴权 + * + * @param requiresRoles 注解对象 + */ + public void checkRole (RequiresRoles requiresRoles) { + if (requiresRoles.logical() == Logical.AND) { + checkRoleAnd(requiresRoles.value()); + } else { + checkRoleOr(requiresRoles.value()); + } + } + + /** + * 验证用户是否含有指定角色,必须全部拥有 + * + * @param roles 角色标识数组 + */ + public void checkRoleAnd (String... roles) { + Set roleList = getRoleList(); + for (String role : roles) { + if (!hasRole(roleList, role)) { + throw new NotRoleException(role); + } + } + } + + /** + * 验证用户是否含有指定角色,只需包含其中一个 + * + * @param roles 角色标识数组 + */ + public void checkRoleOr (String... roles) { + Set roleList = getRoleList(); + for (String role : roles) { + if (hasRole(roleList, role)) { + return; + } + } + if (roles.length > 0) { + throw new NotRoleException(roles); + } + } + + /** + * 根据注解(@RequiresLogin)鉴权 + * + * @param at 注解对象 + */ + public void checkByAnnotation (RequiresLogin at) { + this.checkLogin(); + } + + /** + * 根据注解(@RequiresRoles)鉴权 + * + * @param at 注解对象 + */ + public void checkByAnnotation (RequiresRoles at) { + String[] roleArray = at.value(); + if (at.logical() == Logical.AND) { + this.checkRoleAnd(roleArray); + } else { + this.checkRoleOr(roleArray); + } + } + + /** + * 根据注解(@RequiresPermissions)鉴权 + * + * @param at 注解对象 + */ + public void checkByAnnotation (RequiresPermissions at) { + String[] permissionArray = at.value(); + if (at.logical() == Logical.AND) { + this.checkPermiAnd(permissionArray); + } else { + this.checkPermiOr(permissionArray); + } + } + + /** + * 获取当前账号的角色列表 + * + * @return 角色列表 + */ + public Set getRoleList () { + try { + LoginUser loginUser = getLoginUser(); + return loginUser.getRoles(); + } catch (Exception e) { + return new HashSet<>(); + } + } + + /** + * 获取当前账号的权限列表 + * + * @return 权限列表 + */ + public Set getPermiList () { + try { + LoginUser loginUser = getLoginUser(); + return loginUser.getPermissions(); + } catch (Exception e) { + return new HashSet<>(); + } + } + + /** + * 判断是否包含权限 + * + * @param authorities 权限列表 + * @param permission 权限字符串 + * + * @return 用户是否具备某权限 + */ + public boolean hasPermi (Collection authorities, String permission) { + return authorities.stream().filter(StringUtils::hasText) + .anyMatch(x -> ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission)); + } + + /** + * 判断是否包含角色 + * + * @param roles 角色列表 + * @param role 角色 + * + * @return 用户是否具备某角色权限 + */ + public boolean hasRole (Collection roles, String role) { + return roles.stream().filter(StringUtils::hasText) + .anyMatch(x -> SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java new file mode 100644 index 0000000..c764df2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java @@ -0,0 +1,154 @@ +package com.ruoyi.common.security.auth; + +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.annotation.RequiresRoles; +import com.ruoyi.common.system.domain.LoginUser; + +/** + * Token 权限验证工具类 + * + * @author muyu + */ +public class AuthUtil { + /** + * 底层的 AuthLogic 对象 + */ + public static AuthLogic authLogic = new AuthLogic(); + + /** + * 会话注销 + */ + public static void logout () { + authLogic.logout(); + } + + /** + * 会话注销,根据指定Token + * + * @param token 指定token + */ + public static void logoutByToken (String token) { + authLogic.logoutByToken(token); + } + + /** + * 检验当前会话是否已经登录,如未登录,则抛出异常 + */ + public static void checkLogin () { + authLogic.checkLogin(); + } + + /** + * 获取当前登录用户信息 + * + * @param token 指定token + * + * @return 用户信息 + */ + public static LoginUser getLoginUser (String token) { + return authLogic.getLoginUser(token); + } + + /** + * 验证当前用户有效期 + * + * @param loginUser 用户信息 + */ + public static void verifyLoginUserExpire (LoginUser loginUser) { + authLogic.verifyLoginUserExpire(loginUser); + } + + /** + * 当前账号是否含有指定角色标识, 返回true或false + * + * @param role 角色标识 + * + * @return 是否含有指定角色标识 + */ + public static boolean hasRole (String role) { + return authLogic.hasRole(role); + } + + /** + * 当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException + * + * @param role 角色标识 + */ + public static void checkRole (String role) { + authLogic.checkRole(role); + } + + /** + * 根据注解传入参数鉴权, 如果验证未通过,则抛出异常: NotRoleException + * + * @param requiresRoles 角色权限注解 + */ + public static void checkRole (RequiresRoles requiresRoles) { + authLogic.checkRole(requiresRoles); + } + + /** + * 当前账号是否含有指定角色标识 [指定多个,必须全部验证通过] + * + * @param roles 角色标识数组 + */ + public static void checkRoleAnd (String... roles) { + authLogic.checkRoleAnd(roles); + } + + /** + * 当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可] + * + * @param roles 角色标识数组 + */ + public static void checkRoleOr (String... roles) { + authLogic.checkRoleOr(roles); + } + + /** + * 当前账号是否含有指定权限, 返回true或false + * + * @param permission 权限码 + * + * @return 是否含有指定权限 + */ + public static boolean hasPermi (String permission) { + return authLogic.hasPermi(permission); + } + + /** + * 当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException + * + * @param permission 权限码 + */ + public static void checkPermi (String permission) { + authLogic.checkPermi(permission); + } + + /** + * 根据注解传入参数鉴权, 如果验证未通过,则抛出异常: NotPermissionException + * + * @param requiresPermissions 权限注解 + */ + public static void checkPermi (RequiresPermissions requiresPermissions) { + authLogic.checkPermi(requiresPermissions); + } + + /** + * 当前账号是否含有指定权限 [指定多个,必须全部验证通过] + * + * @param permissions 权限码数组 + */ + public static void checkPermiAnd (String... permissions) { + authLogic.checkPermiAnd(permissions); + } + + /** + * 当前账号是否含有指定权限 [指定多个,只要其一验证通过即可] + * + * @param permissions 权限码数组 + */ + public static void checkPermiOr (String... permissions) { + authLogic.checkPermiOr(permissions); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java new file mode 100644 index 0000000..b272d1f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.security.config; + +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; + +import java.util.TimeZone; + +/** + * 系统配置 + * + * @author muyu + */ +public class ApplicationConfig { + /** + * 时区配置 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization () { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java new file mode 100644 index 0000000..0e9130a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java @@ -0,0 +1,32 @@ +package com.ruoyi.common.security.config; + +import com.ruoyi.common.security.interceptor.HeaderInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 拦截器配置 + * + * @author muyu + */ +public class WebMvcConfig implements WebMvcConfigurer { + /** + * 不需要拦截地址 + */ + public static final String[] excludeUrls = {"/login", "/logout", "/refresh"}; + + @Override + public void addInterceptors (InterceptorRegistry registry) { + registry.addInterceptor(getHeaderInterceptor()) + .addPathPatterns("/**") + .excludePathPatterns(excludeUrls) + .order(-10); + } + + /** + * 自定义请求头拦截器 + */ + public HeaderInterceptor getHeaderInterceptor () { + return new HeaderInterceptor(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java new file mode 100644 index 0000000..3a994a2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.security.feign; + +import feign.RequestInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Feign 配置注册 + * + * @author muyu + **/ +@Configuration +public class FeignAutoConfiguration { + @Bean + public RequestInterceptor requestInterceptor () { + return new FeignRequestInterceptor(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java new file mode 100644 index 0000000..2836a40 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.security.feign; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; +import feign.RequestInterceptor; +import feign.RequestTemplate; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +/** + * feign 请求拦截器 + * + * @author muyu + */ +@Component +public class FeignRequestInterceptor implements RequestInterceptor { + @Override + public void apply (RequestTemplate requestTemplate) { + HttpServletRequest httpServletRequest = ServletUtils.getRequest(); + if (StringUtils.isNotNull(httpServletRequest)) { + Map headers = ServletUtils.getHeaders(httpServletRequest); + // 传递用户信息请求头,防止丢失 + String userId = headers.get(SecurityConstants.DETAILS_USER_ID); + if (StringUtils.isNotEmpty(userId)) { + requestTemplate.header(SecurityConstants.DETAILS_USER_ID, userId); + } + String userKey = headers.get(SecurityConstants.USER_KEY); + if (StringUtils.isNotEmpty(userKey)) { + requestTemplate.header(SecurityConstants.USER_KEY, userKey); + } + String userName = headers.get(SecurityConstants.DETAILS_USERNAME); + if (StringUtils.isNotEmpty(userName)) { + requestTemplate.header(SecurityConstants.DETAILS_USERNAME, userName); + } + String authentication = headers.get(SecurityConstants.AUTHORIZATION_HEADER); + if (StringUtils.isNotEmpty(authentication)) { + requestTemplate.header(SecurityConstants.AUTHORIZATION_HEADER, authentication); + } + + // 配置客户端IP + requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr()); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..7b70561 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java @@ -0,0 +1,147 @@ +package com.ruoyi.common.security.handler; + +import com.ruoyi.common.core.constant.HttpStatus; +import com.ruoyi.common.core.exception.DemoModeException; +import com.ruoyi.common.core.exception.InnerAuthException; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.exception.auth.NotPermissionException; +import com.ruoyi.common.core.exception.auth.NotRoleException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.domain.Result; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +import javax.servlet.http.HttpServletRequest; + +/** + * 全局异常处理器 + * + * @author muyu + */ +@RestControllerAdvice +public class GlobalExceptionHandler { + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 权限码异常 + */ + @ExceptionHandler(NotPermissionException.class) + public Result handleNotPermissionException (NotPermissionException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage()); + return Result.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权"); + } + + /** + * 角色权限异常 + */ + @ExceptionHandler(NotRoleException.class) + public Result handleNotRoleException (NotRoleException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage()); + return Result.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权"); + } + + /** + * 请求方式不支持 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public Result handleHttpRequestMethodNotSupported (HttpRequestMethodNotSupportedException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); + return Result.error(e.getMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler(ServiceException.class) + public Result handleServiceException (ServiceException e, HttpServletRequest request) { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + return StringUtils.isNotNull(code) ? Result.error(code, e.getMessage()) : Result.error(e.getMessage()); + } + + /** + * 请求路径中缺少必需的路径变量 + */ + @ExceptionHandler(MissingPathVariableException.class) + public Result handleMissingPathVariableException (MissingPathVariableException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e); + return Result.error(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName())); + } + + /** + * 请求参数类型不匹配 + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public Result handleMethodArgumentTypeMismatchException (MethodArgumentTypeMismatchException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e); + return Result.error(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), e.getValue())); + } + + /** + * 拦截未知的运行时异常 + */ + @ExceptionHandler(RuntimeException.class) + public Result handleRuntimeException (RuntimeException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + return Result.error(e.getMessage()); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public Result handleException (Exception e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生系统异常.", requestURI, e); + return Result.error(e.getMessage()); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public Result handleBindException (BindException e) { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return Result.error(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object handleMethodArgumentNotValidException (MethodArgumentNotValidException e) { + log.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return Result.error(message); + } + + /** + * 内部认证异常 + */ + @ExceptionHandler(InnerAuthException.class) + public Result handleInnerAuthException (InnerAuthException e) { + return Result.error(e.getMessage()); + } + + /** + * 演示模式异常 + */ + @ExceptionHandler(DemoModeException.class) + public Result handleDemoModeException (DemoModeException e) { + return Result.error("演示模式,不允许操作"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java new file mode 100644 index 0000000..370f2e3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java @@ -0,0 +1,49 @@ +package com.ruoyi.common.security.interceptor; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.context.SecurityContextHolder; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.auth.AuthUtil; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.LoginUser; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.AsyncHandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 自定义请求头拦截器,将Header数据封装到线程变量中方便获取 + * 注意:此拦截器会同时验证当前用户有效期自动刷新有效期 + * + * @author muyu + */ +public class HeaderInterceptor implements AsyncHandlerInterceptor { + @Override + public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (!(handler instanceof HandlerMethod)) { + return true; + } + + SecurityContextHolder.setUserId(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USER_ID)); + SecurityContextHolder.setUserName(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USERNAME)); + SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY)); + + String token = SecurityUtils.getToken(); + if (StringUtils.isNotEmpty(token)) { + LoginUser loginUser = AuthUtil.getLoginUser(token); + if (StringUtils.isNotNull(loginUser)) { + AuthUtil.verifyLoginUserExpire(loginUser); + SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser); + } + } + return true; + } + + @Override + public void afterCompletion (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + SecurityContextHolder.remove(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java new file mode 100644 index 0000000..1ed12fb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java @@ -0,0 +1,153 @@ +package com.ruoyi.common.security.service; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; +import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.LoginUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * token验证处理 + * + * @author muyu + */ +@Component +public class TokenService { + protected static final long MILLIS_SECOND = 1000; + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + private final static Long MILLIS_MINUTE_TEN = CacheConstants.REFRESH_TIME * MILLIS_MINUTE; + private static final Logger log = LoggerFactory.getLogger(TokenService.class); + private final static long expireTime = CacheConstants.EXPIRATION; + + private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY; + @Autowired + private RedisService redisService; + + /** + * 创建令牌 + */ + public Map createToken (LoginUser loginUser) { + String token = IdUtils.fastUUID(); + Long userId = loginUser.getSysUser().getUserId(); + String userName = loginUser.getSysUser().getUserName(); + loginUser.setToken(token); + loginUser.setUserid(userId); + loginUser.setUsername(userName); + loginUser.setIpaddr(IpUtils.getIpAddr()); + refreshToken(loginUser); + + // Jwt存储信息 + Map claimsMap = new HashMap(); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); + + // 接口返回信息 + Map rspMap = new HashMap(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", expireTime); + return rspMap; + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser () { + return getLoginUser(ServletUtils.getRequest()); + } + + /** + * 设置用户身份信息 + */ + public void setLoginUser (LoginUser loginUser) { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) { + refreshToken(loginUser); + } + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser (HttpServletRequest request) { + // 获取请求携带的令牌 + String token = SecurityUtils.getToken(request); + return getLoginUser(token); + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser (String token) { + LoginUser user = null; + try { + if (StringUtils.isNotEmpty(token)) { + String userkey = JwtUtils.getUserKey(token); + user = redisService.getCacheObject(getTokenKey(userkey)); + return user; + } + } catch (Exception e) { + log.error("获取用户信息异常'{}'", e.getMessage()); + } + return user; + } + + /** + * 删除用户缓存信息 + */ + public void delLoginUser (String token) { + if (StringUtils.isNotEmpty(token)) { + String userkey = JwtUtils.getUserKey(token); + redisService.deleteObject(getTokenKey(userkey)); + } + } + + /** + * 验证令牌有效期,相差不足120分钟,自动刷新缓存 + * + * @param loginUser + */ + public void verifyToken (LoginUser loginUser) { + long expireTime = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { + refreshToken(loginUser); + } + } + + /** + * 刷新令牌有效期 + * + * @param loginUser 登录信息 + */ + public void refreshToken (LoginUser loginUser) { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(loginUser.getToken()); + redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + private String getTokenKey (String token) { + return ACCESS_TOKEN + token; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java new file mode 100644 index 0000000..6a7c5f7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java @@ -0,0 +1,71 @@ +package com.ruoyi.common.security.utils; + +import com.alibaba.fastjson2.JSONArray; +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.system.domain.SysDictData; + +import java.util.Collection; +import java.util.List; + +/** + * 字典工具类 + * + * @author muyu + */ +public class DictUtils { + /** + * 设置字典缓存 + * + * @param key 参数键 + * @param dictDatas 字典数据列表 + */ + public static void setDictCache (String key, List dictDatas) { + SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas); + } + + /** + * 获取字典缓存 + * + * @param key 参数键 + * + * @return dictDatas 字典数据列表 + */ + public static List getDictCache (String key) { + JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(arrayCache)) { + return arrayCache.toList(SysDictData.class); + } + return null; + } + + /** + * 删除指定字典缓存 + * + * @param key 字典键 + */ + public static void removeDictCache (String key) { + SpringUtils.getBean(RedisService.class).deleteObject(getCacheKey(key)); + } + + /** + * 清空字典缓存 + */ + public static void clearDictCache () { + Collection keys = SpringUtils.getBean(RedisService.class).keys(CacheConstants.SYS_DICT_KEY + "*"); + SpringUtils.getBean(RedisService.class).deleteObject(keys); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * + * @return 缓存键key + */ + public static String getCacheKey (String configKey) { + return CacheConstants.SYS_DICT_KEY + configKey; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java new file mode 100644 index 0000000..b770467 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java @@ -0,0 +1,109 @@ +package com.ruoyi.common.security.utils; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.TokenConstants; +import com.ruoyi.common.core.context.SecurityContextHolder; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.system.domain.LoginUser; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +import javax.servlet.http.HttpServletRequest; + +/** + * 权限获取工具类 + * + * @author muyu + */ +public class SecurityUtils { + /** + * 获取用户ID + */ + public static Long getUserId () { + return SecurityContextHolder.getUserId(); + } + + /** + * 获取用户名称 + */ + public static String getUsername () { + return SecurityContextHolder.getUserName(); + } + + /** + * 获取用户key + */ + public static String getUserKey () { + return SecurityContextHolder.getUserKey(); + } + + /** + * 获取登录用户信息 + */ + public static LoginUser getLoginUser () { + return SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class); + } + + /** + * 获取请求token + */ + public static String getToken () { + return getToken(ServletUtils.getRequest()); + } + + /** + * 根据request获取请求token + */ + public static String getToken (HttpServletRequest request) { + // 从header获取token标识 + String token = request.getHeader(TokenConstants.AUTHENTICATION); + return replaceTokenPrefix(token); + } + + /** + * 裁剪token前缀 + */ + public static String replaceTokenPrefix (String token) { + // 如果前端设置了令牌前缀,则裁剪掉前缀 + if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) { + token = token.replaceFirst(TokenConstants.PREFIX, ""); + } + return token; + } + + /** + * 是否为管理员 + * + * @param userId 用户ID + * + * @return 结果 + */ + public static boolean isAdmin (Long userId) { + return userId != null && 1L == userId; + } + + /** + * 生成BCryptPasswordEncoder密码 + * + * @param password 密码 + * + * @return 加密字符串 + */ + public static String encryptPassword (String password) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 判断密码是否相同 + * + * @param rawPassword 真实密码 + * @param encodedPassword 加密后字符 + * + * @return 结果 + */ + public static boolean matchesPassword (String rawPassword, String encodedPassword) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..7418bbc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,5 @@ +com.ruoyi.common.security.config.WebMvcConfig +com.ruoyi.common.security.service.TokenService +com.ruoyi.common.security.aspect.PreAuthorizeAspect +com.ruoyi.common.security.aspect.InnerAuthAspect +com.ruoyi.common.security.handler.GlobalExceptionHandler diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/pom.xml new file mode 100644 index 0000000..82c54eb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/pom.xml @@ -0,0 +1,34 @@ + + + + com.muyu + ruoyi-common + 3.6.3 + + 4.0.0 + + muyu-common-swagger + + + muyu-common-swagger系统接口 + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + io.springfox + springfox-swagger2 + ${swagger.fox.version} + + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/annotation/EnableCustomSwagger2.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/annotation/EnableCustomSwagger2.java new file mode 100644 index 0000000..e7c1ac2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/annotation/EnableCustomSwagger2.java @@ -0,0 +1,15 @@ +package com.ruoyi.common.swagger.annotation; + +import com.ruoyi.common.swagger.config.SwaggerAutoConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@Import({SwaggerAutoConfiguration.class}) +public @interface EnableCustomSwagger2 { + +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerAutoConfiguration.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerAutoConfiguration.java new file mode 100644 index 0000000..92731a8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerAutoConfiguration.java @@ -0,0 +1,111 @@ +package com.ruoyi.common.swagger.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.ApiSelectorBuilder; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.Predicate; + +@Configuration +@EnableSwagger2 +@EnableConfigurationProperties(SwaggerProperties.class) +@ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) +@Import({SwaggerBeanPostProcessor.class, SwaggerWebConfiguration.class}) +public class SwaggerAutoConfiguration { + /** + * 默认的排除路径,排除Spring Boot默认的错误处理路径和端点 + */ + private static final List DEFAULT_EXCLUDE_PATH = Arrays.asList("/error", "/actuator/**"); + + private static final String BASE_PATH = "/**"; + + @Bean + public Docket api (SwaggerProperties swaggerProperties) { + // base-path处理 + if (swaggerProperties.getBasePath().isEmpty()) { + swaggerProperties.getBasePath().add(BASE_PATH); + } + // noinspection unchecked + List> basePath = new ArrayList>(); + swaggerProperties.getBasePath().forEach(path -> basePath.add(PathSelectors.ant(path))); + + // exclude-path处理 + if (swaggerProperties.getExcludePath().isEmpty()) { + swaggerProperties.getExcludePath().addAll(DEFAULT_EXCLUDE_PATH); + } + + List> excludePath = new ArrayList<>(); + swaggerProperties.getExcludePath().forEach(path -> excludePath.add(PathSelectors.ant(path))); + + ApiSelectorBuilder builder = new Docket(DocumentationType.SWAGGER_2).host(swaggerProperties.getHost()) + .apiInfo(apiInfo(swaggerProperties)).select() + .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage())); + + swaggerProperties.getBasePath().forEach(p -> builder.paths(PathSelectors.ant(p))); + swaggerProperties.getExcludePath().forEach(p -> builder.paths(PathSelectors.ant(p).negate())); + + return builder.build().securitySchemes(securitySchemes()).securityContexts(securityContexts()).pathMapping("/"); + } + + /** + * 安全模式,这里指定token通过Authorization头请求头传递 + */ + private List securitySchemes () { + List apiKeyList = new ArrayList(); + apiKeyList.add(new ApiKey("Authorization", "Authorization", "header")); + return apiKeyList; + } + + /** + * 安全上下文 + */ + private List securityContexts () { + List securityContexts = new ArrayList<>(); + securityContexts.add( + SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> o.requestMappingPattern().matches("/.*")) + .build()); + return securityContexts; + } + + /** + * 默认的全局鉴权策略 + * + * @return + */ + private List defaultAuth () { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } + + private ApiInfo apiInfo (SwaggerProperties swaggerProperties) { + return new ApiInfoBuilder() + .title(swaggerProperties.getTitle()) + .description(swaggerProperties.getDescription()) + .license(swaggerProperties.getLicense()) + .licenseUrl(swaggerProperties.getLicenseUrl()) + .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl()) + .contact(new Contact(swaggerProperties.getContact().getName(), swaggerProperties.getContact().getUrl(), swaggerProperties.getContact().getEmail())) + .version(swaggerProperties.getVersion()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerBeanPostProcessor.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerBeanPostProcessor.java new file mode 100644 index 0000000..6d39c29 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerBeanPostProcessor.java @@ -0,0 +1,45 @@ +package com.ruoyi.common.swagger.config; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + +/** + * swagger 在 springboot 2.6.x 不兼容问题的处理 + * + * @author muyu + */ +public class SwaggerBeanPostProcessor implements BeanPostProcessor { + @Override + public Object postProcessAfterInitialization (Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void customizeSpringfoxHandlerMappings (List mappings) { + List copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List getHandlerMappings (Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerProperties.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerProperties.java new file mode 100644 index 0000000..a722201 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerProperties.java @@ -0,0 +1,296 @@ +package com.ruoyi.common.swagger.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.ArrayList; +import java.util.List; + +@ConfigurationProperties("swagger") +public class SwaggerProperties { + /** + * 是否开启swagger + */ + private Boolean enabled; + + /** + * swagger会解析的包路径 + **/ + private String basePackage = ""; + + /** + * swagger会解析的url规则 + **/ + private List basePath = new ArrayList<>(); + + /** + * 在basePath基础上需要排除的url规则 + **/ + private List excludePath = new ArrayList<>(); + + /** + * 标题 + **/ + private String title = ""; + + /** + * 描述 + **/ + private String description = ""; + + /** + * 版本 + **/ + private String version = ""; + + /** + * 许可证 + **/ + private String license = ""; + + /** + * 许可证URL + **/ + private String licenseUrl = ""; + + /** + * 服务条款URL + **/ + private String termsOfServiceUrl = ""; + + /** + * host信息 + **/ + private String host = ""; + + /** + * 联系人信息 + */ + private Contact contact = new Contact(); + + /** + * 全局统一鉴权配置 + **/ + private Authorization authorization = new Authorization(); + + public Boolean getEnabled () { + return enabled; + } + + public void setEnabled (Boolean enabled) { + this.enabled = enabled; + } + + public String getBasePackage () { + return basePackage; + } + + public void setBasePackage (String basePackage) { + this.basePackage = basePackage; + } + + public List getBasePath () { + return basePath; + } + + public void setBasePath (List basePath) { + this.basePath = basePath; + } + + public List getExcludePath () { + return excludePath; + } + + public void setExcludePath (List excludePath) { + this.excludePath = excludePath; + } + + public String getTitle () { + return title; + } + + public void setTitle (String title) { + this.title = title; + } + + public String getDescription () { + return description; + } + + public void setDescription (String description) { + this.description = description; + } + + public String getVersion () { + return version; + } + + public void setVersion (String version) { + this.version = version; + } + + public String getLicense () { + return license; + } + + public void setLicense (String license) { + this.license = license; + } + + public String getLicenseUrl () { + return licenseUrl; + } + + public void setLicenseUrl (String licenseUrl) { + this.licenseUrl = licenseUrl; + } + + public String getTermsOfServiceUrl () { + return termsOfServiceUrl; + } + + public void setTermsOfServiceUrl (String termsOfServiceUrl) { + this.termsOfServiceUrl = termsOfServiceUrl; + } + + public String getHost () { + return host; + } + + public void setHost (String host) { + this.host = host; + } + + public Contact getContact () { + return contact; + } + + public void setContact (Contact contact) { + this.contact = contact; + } + + public Authorization getAuthorization () { + return authorization; + } + + public void setAuthorization (Authorization authorization) { + this.authorization = authorization; + } + + public static class Contact { + /** + * 联系人 + **/ + private String name = ""; + /** + * 联系人url + **/ + private String url = ""; + /** + * 联系人email + **/ + private String email = ""; + + public String getName () { + return name; + } + + public void setName (String name) { + this.name = name; + } + + public String getUrl () { + return url; + } + + public void setUrl (String url) { + this.url = url; + } + + public String getEmail () { + return email; + } + + public void setEmail (String email) { + this.email = email; + } + } + + public static class Authorization { + /** + * 鉴权策略ID,需要和SecurityReferences ID保持一致 + */ + private String name = ""; + + /** + * 需要开启鉴权URL的正则 + */ + private String authRegex = "^.*$"; + + /** + * 鉴权作用域列表 + */ + private List authorizationScopeList = new ArrayList<>(); + + private List tokenUrlList = new ArrayList<>(); + + public String getName () { + return name; + } + + public void setName (String name) { + this.name = name; + } + + public String getAuthRegex () { + return authRegex; + } + + public void setAuthRegex (String authRegex) { + this.authRegex = authRegex; + } + + public List getAuthorizationScopeList () { + return authorizationScopeList; + } + + public void setAuthorizationScopeList (List authorizationScopeList) { + this.authorizationScopeList = authorizationScopeList; + } + + public List getTokenUrlList () { + return tokenUrlList; + } + + public void setTokenUrlList (List tokenUrlList) { + this.tokenUrlList = tokenUrlList; + } + } + + public static class AuthorizationScope { + /** + * 作用域名称 + */ + private String scope = ""; + + /** + * 作用域描述 + */ + private String description = ""; + + public String getScope () { + return scope; + } + + public void setScope (String scope) { + this.scope = scope; + } + + public String getDescription () { + return description; + } + + public void setDescription (String description) { + this.description = description; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java new file mode 100644 index 0000000..f696e9c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.swagger.config; + +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * swagger 资源映射路径 + * + * @author muyu + */ +public class SwaggerWebConfiguration implements WebMvcConfigurer { + @Override + public void addResourceHandlers (ResourceHandlerRegistry registry) { + /** swagger-ui 地址 */ + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..4c2e499 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +# com.ruoyi.common.swagger.config.SwaggerAutoConfiguration +# com.ruoyi.common.swagger.config.SwaggerWebConfiguration +# com.ruoyi.common.swagger.config.SwaggerBeanPostProcessor diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/pom.xml b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/pom.xml new file mode 100644 index 0000000..11c8a50 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + com.muyu + ruoyi-common + 3.6.3 + + + muyu-common-system + + + 17 + 17 + UTF-8 + + + + + + com.muyu + muyu-common-core + + + diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/LoginUser.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/LoginUser.java new file mode 100644 index 0000000..3111586 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/LoginUser.java @@ -0,0 +1,131 @@ +package com.ruoyi.common.system.domain; + + +import java.io.Serializable; +import java.util.Set; + +/** + * 用户信息 + * + * @author muyu + */ +public class LoginUser implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 用户名id + */ + private Long userid; + + /** + * 用户名 + */ + private String username; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 权限列表 + */ + private Set permissions; + + /** + * 角色列表 + */ + private Set roles; + + /** + * 用户信息 + */ + private SysUser sysUser; + + public String getToken () { + return token; + } + + public void setToken (String token) { + this.token = token; + } + + public Long getUserid () { + return userid; + } + + public void setUserid (Long userid) { + this.userid = userid; + } + + public String getUsername () { + return username; + } + + public void setUsername (String username) { + this.username = username; + } + + public Long getLoginTime () { + return loginTime; + } + + public void setLoginTime (Long loginTime) { + this.loginTime = loginTime; + } + + public Long getExpireTime () { + return expireTime; + } + + public void setExpireTime (Long expireTime) { + this.expireTime = expireTime; + } + + public String getIpaddr () { + return ipaddr; + } + + public void setIpaddr (String ipaddr) { + this.ipaddr = ipaddr; + } + + public Set getPermissions () { + return permissions; + } + + public void setPermissions (Set permissions) { + this.permissions = permissions; + } + + public Set getRoles () { + return roles; + } + + public void setRoles (Set roles) { + this.roles = roles; + } + + public SysUser getSysUser () { + return sysUser; + } + + public void setSysUser (SysUser sysUser) { + this.sysUser = sysUser; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDept.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDept.java new file mode 100644 index 0000000..042b865 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDept.java @@ -0,0 +1,213 @@ +package com.ruoyi.common.system.domain; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 部门表 sys_dept + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysDept extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 父部门ID + */ + private Long parentId; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 负责人 + */ + private String leader; + + /** + * 联系电话 + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + + /** + * 部门状态:0正常,1停用 + */ + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + /** + * 父部门名称 + */ + private String parentName; + + /** + * 子部门 + */ + private List children = new ArrayList(); + + public Long getDeptId () { + return deptId; + } + + public void setDeptId (Long deptId) { + this.deptId = deptId; + } + + public Long getParentId () { + return parentId; + } + + public void setParentId (Long parentId) { + this.parentId = parentId; + } + + public String getAncestors () { + return ancestors; + } + + public void setAncestors (String ancestors) { + this.ancestors = ancestors; + } + + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + public String getDeptName () { + return deptName; + } + + public void setDeptName (String deptName) { + this.deptName = deptName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum () { + return orderNum; + } + + public void setOrderNum (Integer orderNum) { + this.orderNum = orderNum; + } + + public String getLeader () { + return leader; + } + + public void setLeader (String leader) { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") + public String getPhone () { + return phone; + } + + public void setPhone (String phone) { + this.phone = phone; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail () { + return email; + } + + public void setEmail (String email) { + this.email = email; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + public String getDelFlag () { + return delFlag; + } + + public void setDelFlag (String delFlag) { + this.delFlag = delFlag; + } + + public String getParentName () { + return parentName; + } + + public void setParentName (String parentName) { + this.parentName = parentName; + } + + public List getChildren () { + return children; + } + + public void setChildren (List children) { + this.children = children; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictData.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictData.java new file mode 100644 index 0000000..61d7bf2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictData.java @@ -0,0 +1,185 @@ +package com.ruoyi.common.system.domain; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 字典数据表 sys_dict_data + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysDictData extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 字典编码 + */ + @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) + private Long dictCode; + + /** + * 字典排序 + */ + @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) + private Long dictSort; + + /** + * 字典标签 + */ + @Excel(name = "字典标签") + private String dictLabel; + + /** + * 字典键值 + */ + @Excel(name = "字典键值") + private String dictValue; + + /** + * 字典类型 + */ + @Excel(name = "字典类型") + private String dictType; + + /** + * 样式属性(其他样式扩展) + */ + private String cssClass; + + /** + * 表格字典样式 + */ + private String listClass; + + /** + * 是否默认(Y是 N否) + */ + @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") + private String isDefault; + + /** + * 状态(0正常 1停用) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictCode () { + return dictCode; + } + + public void setDictCode (Long dictCode) { + this.dictCode = dictCode; + } + + public Long getDictSort () { + return dictSort; + } + + public void setDictSort (Long dictSort) { + this.dictSort = dictSort; + } + + @NotBlank(message = "字典标签不能为空") + @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") + public String getDictLabel () { + return dictLabel; + } + + public void setDictLabel (String dictLabel) { + this.dictLabel = dictLabel; + } + + @NotBlank(message = "字典键值不能为空") + @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") + public String getDictValue () { + return dictValue; + } + + public void setDictValue (String dictValue) { + this.dictValue = dictValue; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") + public String getDictType () { + return dictType; + } + + public void setDictType (String dictType) { + this.dictType = dictType; + } + + @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") + public String getCssClass () { + return cssClass; + } + + public void setCssClass (String cssClass) { + this.cssClass = cssClass; + } + + public String getListClass () { + return listClass; + } + + public void setListClass (String listClass) { + this.listClass = listClass; + } + + public boolean getDefault () { + return UserConstants.YES.equals(this.isDefault); + } + + public String getIsDefault () { + return isDefault; + } + + public void setIsDefault (String isDefault) { + this.isDefault = isDefault; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("dictCode", getDictCode()) + .append("dictSort", getDictSort()) + .append("dictLabel", getDictLabel()) + .append("dictValue", getDictValue()) + .append("dictType", getDictType()) + .append("cssClass", getCssClass()) + .append("listClass", getListClass()) + .append("isDefault", getIsDefault()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictType.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictType.java new file mode 100644 index 0000000..3cb68bf --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysDictType.java @@ -0,0 +1,106 @@ +package com.ruoyi.common.system.domain; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +/** + * 字典类型表 sys_dict_type + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysDictType extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 字典主键 + */ + @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) + private Long dictId; + + /** + * 字典名称 + */ + @Excel(name = "字典名称") + private String dictName; + + /** + * 字典类型 + */ + @Excel(name = "字典类型") + private String dictType; + + /** + * 状态(0正常 1停用) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictId () { + return dictId; + } + + public void setDictId (Long dictId) { + this.dictId = dictId; + } + + @NotBlank(message = "字典名称不能为空") + @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") + public String getDictName () { + return dictName; + } + + public void setDictName (String dictName) { + this.dictName = dictName; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") + @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)") + public String getDictType () { + return dictType; + } + + public void setDictType (String dictType) { + this.dictType = dictType; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysFile.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysFile.java new file mode 100644 index 0000000..b5a88a7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysFile.java @@ -0,0 +1,45 @@ +package com.ruoyi.common.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 文件信息 + * + * @author muyu + */ +public class SysFile { + /** + * 文件名称 + */ + private String name; + + /** + * 文件地址 + */ + private String url; + + public String getName () { + return name; + } + + public void setName (String name) { + this.name = name; + } + + public String getUrl () { + return url; + } + + public void setUrl (String url) { + this.url = url; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("name", getName()) + .append("url", getUrl()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysLogininfor.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysLogininfor.java new file mode 100644 index 0000000..b331c70 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysLogininfor.java @@ -0,0 +1,112 @@ +package com.ruoyi.common.system.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Date; + +/** + * 系统访问记录表 sys_logininfor + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysLogininfor extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @Excel(name = "序号", cellType = ColumnType.NUMERIC) + private Long infoId; + + /** + * 用户账号 + */ + @Excel(name = "用户账号") + private String userName; + + /** + * 状态 0成功 1失败 + */ + @Excel(name = "状态", readConverterExp = "0=成功,1=失败") + private String status; + + /** + * 地址 + */ + @Excel(name = "地址") + private String ipaddr; + + /** + * 描述 + */ + @Excel(name = "描述") + private String msg; + + /** + * 访问时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date accessTime; + + public Long getInfoId () { + return infoId; + } + + public void setInfoId (Long infoId) { + this.infoId = infoId; + } + + public String getUserName () { + return userName; + } + + public void setUserName (String userName) { + this.userName = userName; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + public String getIpaddr () { + return ipaddr; + } + + public void setIpaddr (String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getMsg () { + return msg; + } + + public void setMsg (String msg) { + this.msg = msg; + } + + public Date getAccessTime () { + return accessTime; + } + + public void setAccessTime (Date accessTime) { + this.accessTime = accessTime; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysOperLog.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysOperLog.java new file mode 100644 index 0000000..015ef6b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysOperLog.java @@ -0,0 +1,265 @@ +package com.ruoyi.common.system.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Date; + +/** + * 操作日志记录表 oper_log + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysOperLog extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 日志主键 + */ + @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) + private Long operId; + + /** + * 操作模块 + */ + @Excel(name = "操作模块") + private String title; + + /** + * 业务类型(0其它 1新增 2修改 3删除) + */ + @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") + private Integer businessType; + + /** + * 业务类型数组 + */ + private Integer[] businessTypes; + + /** + * 请求方法 + */ + @Excel(name = "请求方法") + private String method; + + /** + * 请求方式 + */ + @Excel(name = "请求方式") + private String requestMethod; + + /** + * 操作类别(0其它 1后台用户 2手机端用户) + */ + @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") + private Integer operatorType; + + /** + * 操作人员 + */ + @Excel(name = "操作人员") + private String operName; + + /** + * 部门名称 + */ + @Excel(name = "部门名称") + private String deptName; + + /** + * 请求url + */ + @Excel(name = "请求地址") + private String operUrl; + + /** + * 操作地址 + */ + @Excel(name = "操作地址") + private String operIp; + + /** + * 请求参数 + */ + @Excel(name = "请求参数") + private String operParam; + + /** + * 返回参数 + */ + @Excel(name = "返回参数") + private String jsonResult; + + /** + * 操作状态(0正常 1异常) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=异常") + private Integer status; + + /** + * 错误消息 + */ + @Excel(name = "错误消息") + private String errorMsg; + + /** + * 操作时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + /** + * 消耗时间 + */ + @Excel(name = "消耗时间", suffix = "毫秒") + private Long costTime; + + public Long getOperId () { + return operId; + } + + public void setOperId (Long operId) { + this.operId = operId; + } + + public String getTitle () { + return title; + } + + public void setTitle (String title) { + this.title = title; + } + + public Integer getBusinessType () { + return businessType; + } + + public void setBusinessType (Integer businessType) { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes () { + return businessTypes; + } + + public void setBusinessTypes (Integer[] businessTypes) { + this.businessTypes = businessTypes; + } + + public String getMethod () { + return method; + } + + public void setMethod (String method) { + this.method = method; + } + + public String getRequestMethod () { + return requestMethod; + } + + public void setRequestMethod (String requestMethod) { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType () { + return operatorType; + } + + public void setOperatorType (Integer operatorType) { + this.operatorType = operatorType; + } + + public String getOperName () { + return operName; + } + + public void setOperName (String operName) { + this.operName = operName; + } + + public String getDeptName () { + return deptName; + } + + public void setDeptName (String deptName) { + this.deptName = deptName; + } + + public String getOperUrl () { + return operUrl; + } + + public void setOperUrl (String operUrl) { + this.operUrl = operUrl; + } + + public String getOperIp () { + return operIp; + } + + public void setOperIp (String operIp) { + this.operIp = operIp; + } + + public String getOperParam () { + return operParam; + } + + public void setOperParam (String operParam) { + this.operParam = operParam; + } + + public String getJsonResult () { + return jsonResult; + } + + public void setJsonResult (String jsonResult) { + this.jsonResult = jsonResult; + } + + public Integer getStatus () { + return status; + } + + public void setStatus (Integer status) { + this.status = status; + } + + public String getErrorMsg () { + return errorMsg; + } + + public void setErrorMsg (String errorMsg) { + this.errorMsg = errorMsg; + } + + public Date getOperTime () { + return operTime; + } + + public void setOperTime (Date operTime) { + this.operTime = operTime; + } + + public Long getCostTime () { + return costTime; + } + + public void setCostTime (Long costTime) { + this.costTime = costTime; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysRole.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysRole.java new file mode 100644 index 0000000..03b3a68 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysRole.java @@ -0,0 +1,244 @@ +package com.ruoyi.common.system.domain; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Set; + +/** + * 角色表 sys_role + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysRole extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 角色ID + */ + @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** + * 角色名称 + */ + @Excel(name = "角色名称") + private String roleName; + + /** + * 角色权限 + */ + @Excel(name = "角色权限") + private String roleKey; + + /** + * 角色排序 + */ + @Excel(name = "角色排序") + private Integer roleSort; + + /** + * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) + */ + @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") + private String dataScope; + + /** + * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) + */ + private boolean menuCheckStrictly; + + /** + * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) + */ + private boolean deptCheckStrictly; + + /** + * 角色状态(0正常 1停用) + */ + @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + /** + * 用户是否存在此角色标识 默认不存在 + */ + private boolean flag = false; + + /** + * 菜单组 + */ + private Long[] menuIds; + + /** + * 部门组(数据权限) + */ + private Long[] deptIds; + + /** + * 角色菜单权限 + */ + private Set permissions; + + + public SysRole (Long roleId) { + this.roleId = roleId; + } + + public static boolean isAdmin (Long roleId) { + return roleId != null && 1L == roleId; + } + + public Long getRoleId () { + return roleId; + } + + public void setRoleId (Long roleId) { + this.roleId = roleId; + } + + public boolean isAdmin () { + return isAdmin(this.roleId); + } + + @NotBlank(message = "角色名称不能为空") + @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") + public String getRoleName () { + return roleName; + } + + public void setRoleName (String roleName) { + this.roleName = roleName; + } + + @NotBlank(message = "权限字符不能为空") + @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") + public String getRoleKey () { + return roleKey; + } + + public void setRoleKey (String roleKey) { + this.roleKey = roleKey; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getRoleSort () { + return roleSort; + } + + public void setRoleSort (Integer roleSort) { + this.roleSort = roleSort; + } + + public String getDataScope () { + return dataScope; + } + + public void setDataScope (String dataScope) { + this.dataScope = dataScope; + } + + public boolean isMenuCheckStrictly () { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly (boolean menuCheckStrictly) { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly () { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly (boolean deptCheckStrictly) { + this.deptCheckStrictly = deptCheckStrictly; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + public String getDelFlag () { + return delFlag; + } + + public void setDelFlag (String delFlag) { + this.delFlag = delFlag; + } + + public boolean isFlag () { + return flag; + } + + public void setFlag (boolean flag) { + this.flag = flag; + } + + public Long[] getMenuIds () { + return menuIds; + } + + public void setMenuIds (Long[] menuIds) { + this.menuIds = menuIds; + } + + public Long[] getDeptIds () { + return deptIds; + } + + public void setDeptIds (Long[] deptIds) { + this.deptIds = deptIds; + } + + public Set getPermissions () { + return permissions; + } + + public void setPermissions (Set permissions) { + this.permissions = permissions; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysUser.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysUser.java new file mode 100644 index 0000000..9c517cc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/domain/SysUser.java @@ -0,0 +1,328 @@ +package com.ruoyi.common.system.domain; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.annotation.Excel.Type; +import com.ruoyi.common.core.annotation.Excels; +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.common.core.xss.Xss; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * 用户对象 sys_user + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysUser extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") + private Long userId; + + /** + * 部门ID + */ + @Excel(name = "部门编号", type = Type.IMPORT) + private Long deptId; + + /** + * 用户账号 + */ + @Excel(name = "登录名称") + private String userName; + + /** + * 用户昵称 + */ + @Excel(name = "用户名称") + private String nickName; + + /** + * 用户邮箱 + */ + @Excel(name = "用户邮箱") + private String email; + + /** + * 手机号码 + */ + @Excel(name = "手机号码") + private String phonenumber; + + /** + * 用户性别 + */ + @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") + private String sex; + + /** + * 用户头像 + */ + private String avatar; + + /** + * 密码 + */ + private String password; + + /** + * 帐号状态(0正常 1停用) + */ + @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + /** + * 最后登录IP + */ + @Excel(name = "最后登录IP", type = Type.EXPORT) + private String loginIp; + + /** + * 最后登录时间 + */ + @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** + * 部门对象 + */ + @Excels({ + @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) + }) + private SysDept dept; + + /** + * 角色对象 + */ + private List roles; + + /** + * 角色组 + */ + private Long[] roleIds; + + /** + * 岗位组 + */ + private Long[] postIds; + + /** + * 角色ID + */ + private Long roleId; + + public SysUser (Long userId) { + this.userId = userId; + } + + public static boolean isAdmin (Long userId) { + return userId != null && 1L == userId; + } + + public Long getUserId () { + return userId; + } + + public void setUserId (Long userId) { + this.userId = userId; + } + + public boolean isAdmin () { + return isAdmin(this.userId); + } + + public Long getDeptId () { + return deptId; + } + + public void setDeptId (Long deptId) { + this.deptId = deptId; + } + + @Xss(message = "用户昵称不能包含脚本字符") + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + public String getNickName () { + return nickName; + } + + public void setNickName (String nickName) { + this.nickName = nickName; + } + + @Xss(message = "用户账号不能包含脚本字符") + @NotBlank(message = "用户账号不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + public String getUserName () { + return userName; + } + + public void setUserName (String userName) { + this.userName = userName; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail () { + return email; + } + + public void setEmail (String email) { + this.email = email; + } + + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + public String getPhonenumber () { + return phonenumber; + } + + public void setPhonenumber (String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getSex () { + return sex; + } + + public void setSex (String sex) { + this.sex = sex; + } + + public String getAvatar () { + return avatar; + } + + public void setAvatar (String avatar) { + this.avatar = avatar; + } + + public String getPassword () { + return password; + } + + public void setPassword (String password) { + this.password = password; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + public String getDelFlag () { + return delFlag; + } + + public void setDelFlag (String delFlag) { + this.delFlag = delFlag; + } + + public String getLoginIp () { + return loginIp; + } + + public void setLoginIp (String loginIp) { + this.loginIp = loginIp; + } + + public Date getLoginDate () { + return loginDate; + } + + public void setLoginDate (Date loginDate) { + this.loginDate = loginDate; + } + + public SysDept getDept () { + return dept; + } + + public void setDept (SysDept dept) { + this.dept = dept; + } + + public List getRoles () { + return roles; + } + + public void setRoles (List roles) { + this.roles = roles; + } + + public Long[] getRoleIds () { + return roleIds; + } + + public void setRoleIds (Long[] roleIds) { + this.roleIds = roleIds; + } + + public Long[] getPostIds () { + return postIds; + } + + public void setPostIds (Long[] postIds) { + this.postIds = postIds; + } + + public Long getRoleId () { + return roleId; + } + + public void setRoleId (Long roleId) { + this.roleId = roleId; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteFileService.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteFileService.java new file mode 100644 index 0000000..035b42d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteFileService.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.system.remote; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.system.domain.SysFile; +import com.ruoyi.common.system.remote.factory.RemoteFileFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件服务 + * + * @author muyu + */ +@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class) +public interface RemoteFileService { + /** + * 上传文件 + * + * @param file 文件信息 + * + * @return 结果 + */ + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public Result upload (@RequestPart(value = "file") MultipartFile file); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteLogService.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteLogService.java new file mode 100644 index 0000000..6c9b212 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteLogService.java @@ -0,0 +1,42 @@ +package com.ruoyi.common.system.remote; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.system.domain.SysLogininfor; +import com.ruoyi.common.system.domain.SysOperLog; +import com.ruoyi.common.system.remote.factory.RemoteLogFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; + +/** + * 日志服务 + * + * @author muyu + */ +@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class) +public interface RemoteLogService { + /** + * 保存系统日志 + * + * @param sysOperLog 日志实体 + * @param source 请求来源 + * + * @return 结果 + */ + @PostMapping("/operlog") + public Result saveLog (@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; + + /** + * 保存访问记录 + * + * @param sysLogininfor 访问实体 + * @param source 请求来源 + * + * @return 结果 + */ + @PostMapping("/logininfor") + public Result saveLogininfor (@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteUserService.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteUserService.java new file mode 100644 index 0000000..42c5c0c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/RemoteUserService.java @@ -0,0 +1,40 @@ +package com.ruoyi.common.system.remote; + +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.common.system.remote.factory.RemoteUserFallbackFactory; +import com.ruoyi.common.system.domain.LoginUser; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +/** + * 用户服务 + * + * @author muyu + */ +@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class) +public interface RemoteUserService { + /** + * 通过用户名查询用户信息 + * + * @param username 用户名 + * @param source 请求来源 + * + * @return 结果 + */ + @GetMapping("/user/info/{username}") + public Result getUserInfo (@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 注册用户信息 + * + * @param sysUser 用户信息 + * @param source 请求来源 + * + * @return 结果 + */ + @PostMapping("/user/register") + public Result registerUserInfo (@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteFileFallbackFactory.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteFileFallbackFactory.java new file mode 100644 index 0000000..6ecf5fa --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteFileFallbackFactory.java @@ -0,0 +1,31 @@ +package com.ruoyi.common.system.remote.factory; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.system.remote.RemoteFileService; +import com.ruoyi.common.system.domain.SysFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件服务降级处理 + * + * @author muyu + */ +@Component +public class RemoteFileFallbackFactory implements FallbackFactory { + private static final Logger log = LoggerFactory.getLogger(RemoteFileFallbackFactory.class); + + @Override + public RemoteFileService create (Throwable throwable) { + log.error("文件服务调用失败:{}", throwable.getMessage()); + return new RemoteFileService() { + @Override + public Result upload (MultipartFile file) { + return Result.error("上传文件失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteLogFallbackFactory.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteLogFallbackFactory.java new file mode 100644 index 0000000..c06b820 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteLogFallbackFactory.java @@ -0,0 +1,37 @@ +package com.ruoyi.common.system.remote.factory; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.system.remote.RemoteLogService; +import com.ruoyi.common.system.domain.SysLogininfor; +import com.ruoyi.common.system.domain.SysOperLog; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 日志服务降级处理 + * + * @author muyu + */ +@Component +public class RemoteLogFallbackFactory implements FallbackFactory { + private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class); + + @Override + public RemoteLogService create (Throwable throwable) { + log.error("日志服务调用失败:{}", throwable.getMessage()); + return new RemoteLogService() { + @Override + public Result saveLog (SysOperLog sysOperLog, String source) { + return Result.error("保存操作日志失败:" + throwable.getMessage()); + } + + @Override + public Result saveLogininfor (SysLogininfor sysLogininfor, String source) { + return Result.error("保存登录日志失败:" + throwable.getMessage()); + } + }; + + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteUserFallbackFactory.java b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteUserFallbackFactory.java new file mode 100644 index 0000000..5c040f1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/java/com/ruoyi/common/system/remote/factory/RemoteUserFallbackFactory.java @@ -0,0 +1,36 @@ +package com.ruoyi.common.system.remote.factory; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.system.remote.RemoteUserService; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.common.system.domain.LoginUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 用户服务降级处理 + * + * @author muyu + */ +@Component +public class RemoteUserFallbackFactory implements FallbackFactory { + private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class); + + @Override + public RemoteUserService create (Throwable throwable) { + log.error("用户服务调用失败:{}", throwable.getMessage()); + return new RemoteUserService() { + @Override + public Result getUserInfo (String username, String source) { + return Result.error("获取用户失败:" + throwable.getMessage()); + } + + @Override + public Result registerUserInfo (SysUser sysUser, String source) { + return Result.error("注册用户失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..63cf802 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/muyu-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.ruoyi.common.system.remote.factory.RemoteUserFallbackFactory +com.ruoyi.common.system.remote.factory.RemoteLogFallbackFactory +com.ruoyi.common.system.remote.factory.RemoteFileFallbackFactory diff --git a/muyu-ruoyi-server/ruoyi-common/pom.xml b/muyu-ruoyi-server/ruoyi-common/pom.xml new file mode 100644 index 0000000..40304fe --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-common/pom.xml @@ -0,0 +1,31 @@ + + + + com.muyu + muyu + 3.6.3 + + 4.0.0 + + + muyu-common-log + muyu-common-core + muyu-common-redis + muyu-common-seata + muyu-common-swagger + muyu-common-security + muyu-common-datascope + muyu-common-datasource + muyu-common-system + muyu-common-cache + + + ruoyi-common + pom + + + muyu-common通用模块 + + + diff --git a/muyu-ruoyi-server/ruoyi-gateway/pom.xml b/muyu-ruoyi-server/ruoyi-gateway/pom.xml new file mode 100644 index 0000000..26182df --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/pom.xml @@ -0,0 +1,118 @@ + + + com.muyu + muyu + 3.6.3 + + 4.0.0 + + ruoyi-gateway + + + muyu-gateway网关模块 + + + + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + + + + + com.alibaba.csp + sentinel-datasource-nacos + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + org.springframework.cloud + spring-cloud-loadbalancer + + + + + pro.fessional + kaptcha + + + + + com.muyu + muyu-common-redis + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + io.springfox + springfox-swagger2 + ${swagger.fox.version} + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/MuYuGatewayApplication.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/MuYuGatewayApplication.java new file mode 100644 index 0000000..7db44ef --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/MuYuGatewayApplication.java @@ -0,0 +1,17 @@ +package com.ruoyi.gateway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 网关启动程序 + * + * @author muyu + */ +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class MuYuGatewayApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuGatewayApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CaptchaConfig.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CaptchaConfig.java new file mode 100644 index 0000000..004895e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CaptchaConfig.java @@ -0,0 +1,82 @@ +package com.ruoyi.gateway.config; + +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.util.Config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +import static com.google.code.kaptcha.Constants.*; + +/** + * 验证码配置 + * + * @author muyu + */ +@Configuration +public class CaptchaConfig { + @Bean(name = "captchaProducer") + public DefaultKaptcha getKaptchaBean () { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } + + @Bean(name = "captchaProducerMath") + public DefaultKaptcha getKaptchaBeanMath () { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 边框颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath"); + // 验证码文本生成器 + properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.gateway.config.KaptchaTextCreator"); + // 验证码文本字符间距 默认为2 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 验证码噪点颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); + // 干扰实现类 + properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java new file mode 100644 index 0000000..0b9ffaa --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java @@ -0,0 +1,21 @@ +package com.ruoyi.gateway.config; + +import com.ruoyi.gateway.handler.SentinelFallbackHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +/** + * 网关限流配置 + * + * @author muyu + */ +@Configuration +public class GatewayConfig { + @Bean + @Order(Ordered.HIGHEST_PRECEDENCE) + public SentinelFallbackHandler sentinelGatewayExceptionHandler () { + return new SentinelFallbackHandler(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java new file mode 100644 index 0000000..85c35a8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java @@ -0,0 +1,61 @@ +package com.ruoyi.gateway.config; + +import com.google.code.kaptcha.text.impl.DefaultTextCreator; + +import java.util.Random; + +/** + * 验证码文本生成器 + * + * @author muyu + */ +public class KaptchaTextCreator extends DefaultTextCreator { + private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(","); + + @Override + public String getText () { + Integer result = 0; + Random random = new Random(); + int x = random.nextInt(10); + int y = random.nextInt(10); + StringBuilder suChinese = new StringBuilder(); + int randomoperands = random.nextInt(3); + if (randomoperands == 0) { + result = x * y; + suChinese.append(CNUMBERS[x]); + suChinese.append("*"); + suChinese.append(CNUMBERS[y]); + } else if (randomoperands == 1) { + if ((x != 0) && y % x == 0) { + result = y / x; + suChinese.append(CNUMBERS[y]); + suChinese.append("/"); + suChinese.append(CNUMBERS[x]); + } else { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + } else if (randomoperands == 2) { + if (x >= y) { + result = x - y; + suChinese.append(CNUMBERS[x]); + suChinese.append("-"); + suChinese.append(CNUMBERS[y]); + } else { + result = y - x; + suChinese.append(CNUMBERS[y]); + suChinese.append("-"); + suChinese.append(CNUMBERS[x]); + } + } else { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + suChinese.append("=?@" + result); + return suChinese.toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/RouterFunctionConfiguration.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/RouterFunctionConfiguration.java new file mode 100644 index 0000000..fce894a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/RouterFunctionConfiguration.java @@ -0,0 +1,29 @@ +package com.ruoyi.gateway.config; + +import com.ruoyi.gateway.handler.ValidateCodeHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.server.RequestPredicates; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.RouterFunctions; + +/** + * 路由配置信息 + * + * @author muyu + */ +@Configuration +public class RouterFunctionConfiguration { + @Autowired + private ValidateCodeHandler validateCodeHandler; + + @SuppressWarnings("rawtypes") + @Bean + public RouterFunction routerFunction () { + return RouterFunctions.route( + RequestPredicates.GET("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), + validateCodeHandler); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java new file mode 100644 index 0000000..f5983ec --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java @@ -0,0 +1,76 @@ +package com.ruoyi.gateway.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.config.GatewayProperties; +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.support.NameUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.config.ResourceHandlerRegistry; +import org.springframework.web.reactive.config.WebFluxConfigurer; +import springfox.documentation.swagger.web.SwaggerResource; +import springfox.documentation.swagger.web.SwaggerResourcesProvider; + +import java.util.ArrayList; +import java.util.List; + +/** + * 聚合系统接口 + * + * @author muyu + */ +@Component +public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer { + /** + * Swagger2默认的url后缀 + */ + public static final String SWAGGER2URL = "/v2/api-docs"; + + /** + * 网关路由 + */ + @Lazy + @Autowired + private RouteLocator routeLocator; + + @Autowired + private GatewayProperties gatewayProperties; + + /** + * 聚合其他服务接口 + * + * @return + */ + @Override + public List get () { + List resourceList = new ArrayList<>(); + List routes = new ArrayList<>(); + // 获取网关中配置的route + routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); + gatewayProperties.getRoutes().stream() + .filter(routeDefinition -> routes + .contains(routeDefinition.getId())) + .forEach(routeDefinition -> routeDefinition.getPredicates().stream() + .filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName())) + .filter(predicateDefinition -> !"ruoyi-auth".equalsIgnoreCase(routeDefinition.getId())) + .forEach(predicateDefinition -> resourceList + .add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs() + .get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER2URL))))); + return resourceList; + } + + private SwaggerResource swaggerResource (String name, String location) { + SwaggerResource swaggerResource = new SwaggerResource(); + swaggerResource.setName(name); + swaggerResource.setLocation(location); + swaggerResource.setSwaggerVersion("2.0"); + return swaggerResource; + } + + @Override + public void addResourceHandlers (ResourceHandlerRegistry registry) { + /** swagger-ui 地址 */ + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CaptchaProperties.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CaptchaProperties.java new file mode 100644 index 0000000..2aee809 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CaptchaProperties.java @@ -0,0 +1,41 @@ +package com.ruoyi.gateway.config.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 验证码配置 + * + * @author muyu + */ +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "security.captcha") +public class CaptchaProperties { + /** + * 验证码开关 + */ + private Boolean enabled; + + /** + * 验证码类型(math 数组计算 char 字符) + */ + private String type; + + public Boolean getEnabled () { + return enabled; + } + + public void setEnabled (Boolean enabled) { + this.enabled = enabled; + } + + public String getType () { + return type; + } + + public void setType (String type) { + this.type = type; + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/IgnoreWhiteProperties.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/IgnoreWhiteProperties.java new file mode 100644 index 0000000..8ec23d8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/IgnoreWhiteProperties.java @@ -0,0 +1,31 @@ +package com.ruoyi.gateway.config.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * 放行白名单配置 + * + * @author muyu + */ +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "security.ignore") +public class IgnoreWhiteProperties { + /** + * 放行白名单配置,网关不校验此处的白名单 + */ + private List whites = new ArrayList<>(); + + public List getWhites () { + return whites; + } + + public void setWhites (List whites) { + this.whites = whites; + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/XssProperties.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/XssProperties.java new file mode 100644 index 0000000..66bc42e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/XssProperties.java @@ -0,0 +1,44 @@ +package com.ruoyi.gateway.config.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * XSS跨站脚本配置 + * + * @author muyu + */ +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "security.xss") +public class XssProperties { + /** + * Xss开关 + */ + private Boolean enabled; + + /** + * 排除路径 + */ + private List excludeUrls = new ArrayList<>(); + + public Boolean getEnabled () { + return enabled; + } + + public void setEnabled (Boolean enabled) { + this.enabled = enabled; + } + + public List getExcludeUrls () { + return excludeUrls; + } + + public void setExcludeUrls (List excludeUrls) { + this.excludeUrls = excludeUrls; + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java new file mode 100644 index 0000000..077f598 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java @@ -0,0 +1,120 @@ +package com.ruoyi.gateway.filter; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.HttpStatus; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.constant.TokenConstants; +import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.gateway.config.properties.IgnoreWhiteProperties; +import io.jsonwebtoken.Claims; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * 网关鉴权 + * + * @author muyu + */ +@Component +public class AuthFilter implements GlobalFilter, Ordered { + private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); + + // 排除过滤的 uri 地址,nacos自行添加 + @Autowired + private IgnoreWhiteProperties ignoreWhite; + + @Autowired + private RedisService redisService; + + + @Override + public Mono filter (ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + ServerHttpRequest.Builder mutate = request.mutate(); + + String url = request.getURI().getPath(); + // 跳过不需要验证的路径 + if (StringUtils.matches(url, ignoreWhite.getWhites())) { + return chain.filter(exchange); + } + String token = getToken(request); + if (StringUtils.isEmpty(token)) { + return unauthorizedResponse(exchange, "令牌不能为空"); + } + Claims claims = JwtUtils.parseToken(token); + if (claims == null) { + return unauthorizedResponse(exchange, "令牌已过期或验证不正确!"); + } + String userkey = JwtUtils.getUserKey(claims); + boolean islogin = redisService.hasKey(getTokenKey(userkey)); + if (!islogin) { + return unauthorizedResponse(exchange, "登录状态已过期"); + } + String userid = JwtUtils.getUserId(claims); + String username = JwtUtils.getUserName(claims); + if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) { + return unauthorizedResponse(exchange, "令牌验证失败"); + } + + // 设置用户信息到请求 + addHeader(mutate, SecurityConstants.USER_KEY, userkey); + addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid); + addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username); + // 内部请求来源参数清除 + removeHeader(mutate, SecurityConstants.FROM_SOURCE); + return chain.filter(exchange.mutate().request(mutate.build()).build()); + } + + private void addHeader (ServerHttpRequest.Builder mutate, String name, Object value) { + if (value == null) { + return; + } + String valueStr = value.toString(); + String valueEncode = ServletUtils.urlEncode(valueStr); + mutate.header(name, valueEncode); + } + + private void removeHeader (ServerHttpRequest.Builder mutate, String name) { + mutate.headers(httpHeaders -> httpHeaders.remove(name)).build(); + } + + private Mono unauthorizedResponse (ServerWebExchange exchange, String msg) { + log.error("[鉴权异常处理]请求路径:{}", exchange.getRequest().getPath()); + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED); + } + + /** + * 获取缓存key + */ + private String getTokenKey (String token) { + return CacheConstants.LOGIN_TOKEN_KEY + token; + } + + /** + * 获取请求token + */ + private String getToken (ServerHttpRequest request) { + String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); + // 如果前端设置了令牌前缀,则裁剪掉前缀 + if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) { + token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY); + } + return token; + } + + @Override + public int getOrder () { + return -200; + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/BlackListUrlFilter.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/BlackListUrlFilter.java new file mode 100644 index 0000000..596aaf7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/BlackListUrlFilter.java @@ -0,0 +1,58 @@ +package com.ruoyi.gateway.filter; + +import com.ruoyi.common.core.utils.ServletUtils; +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +/** + * 黑名单过滤器 + * + * @author muyu + */ +@Component +public class BlackListUrlFilter extends AbstractGatewayFilterFactory { + public BlackListUrlFilter () { + super(Config.class); + } + + @Override + public GatewayFilter apply (Config config) { + return (exchange, chain) -> { + + String url = exchange.getRequest().getURI().getPath(); + if (config.matchBlacklist(url)) { + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求地址不允许访问"); + } + + return chain.filter(exchange); + }; + } + + public static class Config { + private List blacklistUrl; + + private List blacklistUrlPattern = new ArrayList<>(); + + public boolean matchBlacklist (String url) { + return !blacklistUrlPattern.isEmpty() && blacklistUrlPattern.stream().anyMatch(p -> p.matcher(url).find()); + } + + public List getBlacklistUrl () { + return blacklistUrl; + } + + public void setBlacklistUrl (List blacklistUrl) { + this.blacklistUrl = blacklistUrl; + this.blacklistUrlPattern.clear(); + this.blacklistUrl.forEach(url -> { + this.blacklistUrlPattern.add(Pattern.compile(url.replaceAll("\\*\\*", "(.*?)"), Pattern.CASE_INSENSITIVE)); + }); + } + } + +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java new file mode 100644 index 0000000..1fce6b1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java @@ -0,0 +1,75 @@ +package com.ruoyi.gateway.filter; + +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.OrderedGatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.util.Collections; +import java.util.List; + +/** + * 获取body请求数据(解决流不能重复读取问题) + * + * @author muyu + */ +@Component +public class CacheRequestFilter extends AbstractGatewayFilterFactory { + public CacheRequestFilter () { + super(Config.class); + } + + @Override + public String name () { + return "CacheRequestFilter"; + } + + @Override + public GatewayFilter apply (Config config) { + CacheRequestGatewayFilter cacheRequestGatewayFilter = new CacheRequestGatewayFilter(); + Integer order = config.getOrder(); + if (order == null) { + return cacheRequestGatewayFilter; + } + return new OrderedGatewayFilter(cacheRequestGatewayFilter, order); + } + + @Override + public List shortcutFieldOrder () { + return Collections.singletonList("order"); + } + + public static class CacheRequestGatewayFilter implements GatewayFilter { + @Override + public Mono filter (ServerWebExchange exchange, GatewayFilterChain chain) { + // GET DELETE 不过滤 + HttpMethod method = exchange.getRequest().getMethod(); + if (method == null || method == HttpMethod.GET || method == HttpMethod.DELETE) { + return chain.filter(exchange); + } + return ServerWebExchangeUtils.cacheRequestBodyAndRequest(exchange, (serverHttpRequest) -> { + if (serverHttpRequest == exchange.getRequest()) { + return chain.filter(exchange); + } + return chain.filter(exchange.mutate().request(serverHttpRequest).build()); + }); + } + } + + static class Config { + private Integer order; + + public Integer getOrder () { + return order; + } + + public void setOrder (Integer order) { + this.order = order; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java new file mode 100644 index 0000000..1d00bef --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java @@ -0,0 +1,69 @@ +package com.ruoyi.gateway.filter; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.gateway.config.properties.CaptchaProperties; +import com.ruoyi.gateway.service.ValidateCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Flux; + +import java.nio.CharBuffer; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.atomic.AtomicReference; + +/** + * 验证码过滤器 + * + * @author muyu + */ +@Component +public class ValidateCodeFilter extends AbstractGatewayFilterFactory { + private final static String[] VALIDATE_URL = new String[]{"/auth/login", "/auth/register"}; + private static final String CODE = "code"; + private static final String UUID = "uuid"; + @Autowired + private ValidateCodeService validateCodeService; + @Autowired + private CaptchaProperties captchaProperties; + + @Override + public GatewayFilter apply (Object config) { + return (exchange, chain) -> { + ServerHttpRequest request = exchange.getRequest(); + + // 非登录/注册请求或验证码关闭,不处理 + if (!StringUtils.equalsAnyIgnoreCase(request.getURI().getPath(), VALIDATE_URL) || !captchaProperties.getEnabled()) { + return chain.filter(exchange); + } + + try { + String rspStr = resolveBodyFromRequest(request); + JSONObject obj = JSON.parseObject(rspStr); + validateCodeService.checkCaptcha(obj.getString(CODE), obj.getString(UUID)); + } catch (Exception e) { + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), e.getMessage()); + } + return chain.filter(exchange); + }; + } + + private String resolveBodyFromRequest (ServerHttpRequest serverHttpRequest) { + // 获取请求体 + Flux body = serverHttpRequest.getBody(); + AtomicReference bodyRef = new AtomicReference<>(); + body.subscribe(buffer -> { + CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer.asByteBuffer()); + DataBufferUtils.release(buffer); + bodyRef.set(charBuffer.toString()); + }); + return bodyRef.get(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java new file mode 100644 index 0000000..5c54fff --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java @@ -0,0 +1,114 @@ +package com.ruoyi.gateway.filter; + +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.html.EscapeUtil; +import com.ruoyi.gateway.config.properties.XssProperties; +import io.netty.buffer.ByteBufAllocator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.*; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.nio.charset.StandardCharsets; + +/** + * 跨站脚本过滤器 + * + * @author muyu + */ +@Component +@ConditionalOnProperty(value = "security.xss.enabled", havingValue = "true") +public class XssFilter implements GlobalFilter, Ordered { + // 跨站脚本的 xss 配置,nacos自行添加 + @Autowired + private XssProperties xss; + + @Override + public Mono filter (ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + // xss开关未开启 或 通过nacos关闭,不过滤 + if (!xss.getEnabled()) { + return chain.filter(exchange); + } + // GET DELETE 不过滤 + HttpMethod method = request.getMethod(); + if (method == null || method == HttpMethod.GET || method == HttpMethod.DELETE) { + return chain.filter(exchange); + } + // 非json类型,不过滤 + if (!isJsonRequest(exchange)) { + return chain.filter(exchange); + } + // excludeUrls 不过滤 + String url = request.getURI().getPath(); + if (StringUtils.matches(url, xss.getExcludeUrls())) { + return chain.filter(exchange); + } + ServerHttpRequestDecorator httpRequestDecorator = requestDecorator(exchange); + return chain.filter(exchange.mutate().request(httpRequestDecorator).build()); + + } + + private ServerHttpRequestDecorator requestDecorator (ServerWebExchange exchange) { + ServerHttpRequestDecorator serverHttpRequestDecorator = new ServerHttpRequestDecorator(exchange.getRequest()) { + @Override + public Flux getBody () { + Flux body = super.getBody(); + return body.buffer().map(dataBuffers -> { + DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); + DataBuffer join = dataBufferFactory.join(dataBuffers); + byte[] content = new byte[join.readableByteCount()]; + join.read(content); + DataBufferUtils.release(join); + String bodyStr = new String(content, StandardCharsets.UTF_8); + // 防xss攻击过滤 + bodyStr = EscapeUtil.clean(bodyStr); + // 转成字节 + byte[] bytes = bodyStr.getBytes(StandardCharsets.UTF_8); + NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT); + DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length); + buffer.write(bytes); + return buffer; + }); + } + + @Override + public HttpHeaders getHeaders () { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.putAll(super.getHeaders()); + // 由于修改了请求体的body,导致content-length长度不确定,因此需要删除原先的content-length + httpHeaders.remove(HttpHeaders.CONTENT_LENGTH); + httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked"); + return httpHeaders; + } + + }; + return serverHttpRequestDecorator; + } + + /** + * 是否是Json请求 + * + * @param exchange HTTP请求 + */ + public boolean isJsonRequest (ServerWebExchange exchange) { + String header = exchange.getRequest().getHeaders().getFirst(HttpHeaders.CONTENT_TYPE); + return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } + + @Override + public int getOrder () { + return -100; + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java new file mode 100644 index 0000000..a463fa5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java @@ -0,0 +1,48 @@ +package com.ruoyi.gateway.handler; + +import com.ruoyi.common.core.utils.ServletUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler; +import org.springframework.cloud.gateway.support.NotFoundException; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.server.ResponseStatusException; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * 网关统一异常处理 + * + * @author muyu + */ +@Order(-1) +@Configuration +public class GatewayExceptionHandler implements ErrorWebExceptionHandler { + private static final Logger log = LoggerFactory.getLogger(GatewayExceptionHandler.class); + + @Override + public Mono handle (ServerWebExchange exchange, Throwable ex) { + ServerHttpResponse response = exchange.getResponse(); + + if (exchange.getResponse().isCommitted()) { + return Mono.error(ex); + } + + String msg; + + if (ex instanceof NotFoundException) { + msg = "服务未找到"; + } else if (ex instanceof ResponseStatusException) { + ResponseStatusException responseStatusException = (ResponseStatusException) ex; + msg = responseStatusException.getMessage(); + } else { + msg = "内部服务器错误"; + } + + log.error("[网关异常处理]请求路径:{},异常信息:{}", exchange.getRequest().getPath(), ex.getMessage()); + + return ServletUtils.webFluxResponseWriter(response, msg); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SentinelFallbackHandler.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SentinelFallbackHandler.java new file mode 100644 index 0000000..2c896a0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SentinelFallbackHandler.java @@ -0,0 +1,35 @@ +package com.ruoyi.gateway.handler; + +import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.ruoyi.common.core.utils.ServletUtils; +import org.springframework.web.reactive.function.server.ServerResponse; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebExceptionHandler; +import reactor.core.publisher.Mono; + +/** + * 自定义限流异常处理 + * + * @author muyu + */ +public class SentinelFallbackHandler implements WebExceptionHandler { + private Mono writeResponse (ServerResponse response, ServerWebExchange exchange) { + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求超过最大数,请稍候再试"); + } + + @Override + public Mono handle (ServerWebExchange exchange, Throwable ex) { + if (exchange.getResponse().isCommitted()) { + return Mono.error(ex); + } + if (!BlockException.isBlockException(ex)) { + return Mono.error(ex); + } + return handleBlockedRequest(exchange, ex).flatMap(response -> writeResponse(response, exchange)); + } + + private Mono handleBlockedRequest (ServerWebExchange exchange, Throwable throwable) { + return GatewayCallbackManager.getBlockHandler().handleRequest(exchange, throwable); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java new file mode 100644 index 0000000..3513560 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java @@ -0,0 +1,46 @@ +package com.ruoyi.gateway.handler; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; +import springfox.documentation.swagger.web.*; + +import java.util.Optional; + +@RestController +@RequestMapping("/swagger-resources") +public class SwaggerHandler { + private final SwaggerResourcesProvider swaggerResources; + @Autowired(required = false) + private SecurityConfiguration securityConfiguration; + @Autowired(required = false) + private UiConfiguration uiConfiguration; + + @Autowired + public SwaggerHandler (SwaggerResourcesProvider swaggerResources) { + this.swaggerResources = swaggerResources; + } + + @GetMapping("/configuration/security") + public Mono> securityConfiguration () { + return Mono.just(new ResponseEntity<>( + Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), + HttpStatus.OK)); + } + + @GetMapping("/configuration/ui") + public Mono> uiConfiguration () { + return Mono.just(new ResponseEntity<>( + Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK)); + } + + @SuppressWarnings("rawtypes") + @GetMapping("") + public Mono swaggerResources () { + return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK))); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/ValidateCodeHandler.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/ValidateCodeHandler.java new file mode 100644 index 0000000..37c269d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/ValidateCodeHandler.java @@ -0,0 +1,37 @@ +package com.ruoyi.gateway.handler; + +import com.ruoyi.common.core.exception.CaptchaException; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.gateway.service.ValidateCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.server.HandlerFunction; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; + +import java.io.IOException; + +/** + * 验证码获取 + * + * @author muyu + */ +@Component +public class ValidateCodeHandler implements HandlerFunction { + @Autowired + private ValidateCodeService validateCodeService; + + @Override + public Mono handle (ServerRequest serverRequest) { + Result ajax; + try { + ajax = validateCodeService.createCaptcha(); + } catch (CaptchaException | IOException e) { + return Mono.error(e); + } + return ServerResponse.status(HttpStatus.OK).body(BodyInserters.fromValue(ajax)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/model/resp/CaptchaCodeResp.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/model/resp/CaptchaCodeResp.java new file mode 100644 index 0000000..fad7048 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/model/resp/CaptchaCodeResp.java @@ -0,0 +1,25 @@ +package com.ruoyi.gateway.model.resp; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author DongZl + * @description: 验证码 + * @Date 2023-11-12 下午 03:36 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CaptchaCodeResp { + + private boolean captchaEnabled; + + private String uuid; + + private String img; + +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/ValidateCodeService.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/ValidateCodeService.java new file mode 100644 index 0000000..77b8781 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/ValidateCodeService.java @@ -0,0 +1,23 @@ +package com.ruoyi.gateway.service; + +import com.ruoyi.common.core.exception.CaptchaException; +import com.ruoyi.common.core.domain.Result; + +import java.io.IOException; + +/** + * 验证码处理 + * + * @author muyu + */ +public interface ValidateCodeService { + /** + * 生成验证码 + */ + public Result createCaptcha () throws IOException, CaptchaException; + + /** + * 校验验证码 + */ + public void checkCaptcha (String key, String value) throws CaptchaException; +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/impl/ValidateCodeServiceImpl.java b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/impl/ValidateCodeServiceImpl.java new file mode 100644 index 0000000..57fa68e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/impl/ValidateCodeServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.gateway.service.impl; + +import com.google.code.kaptcha.Producer; +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.exception.CaptchaException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.sign.Base64; +import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.gateway.config.properties.CaptchaProperties; +import com.ruoyi.gateway.model.resp.CaptchaCodeResp; +import com.ruoyi.gateway.service.ValidateCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.FastByteArrayOutputStream; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +/** + * 验证码实现处理 + * + * @author muyu + */ +@Service +public class ValidateCodeServiceImpl implements ValidateCodeService { + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisService redisService; + + @Autowired + private CaptchaProperties captchaProperties; + + /** + * 生成验证码 + */ + @Override + public Result createCaptcha () throws IOException, CaptchaException { + boolean captchaEnabled = captchaProperties.getEnabled(); + CaptchaCodeResp.CaptchaCodeRespBuilder respBuilder = CaptchaCodeResp.builder() + .captchaEnabled(captchaEnabled); + if (!captchaEnabled) { + return Result.success(respBuilder); + } + + // 保存验证码信息 + String uuid = IdUtils.simpleUUID(); + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + String captchaType = captchaProperties.getType(); + // 生成验证码 + if ("math".equals(captchaType)) { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } else if ("char".equals(captchaType)) { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try { + ImageIO.write(image, "jpg", os); + } catch (IOException e) { + return Result.error(e.getMessage()); + } + + CaptchaCodeResp captchaCodeResp = respBuilder.uuid(uuid) + .img(Base64.encode(os.toByteArray())) + .build(); + return Result.success(captchaCodeResp); + } + + /** + * 校验验证码 + */ + @Override + public void checkCaptcha (String code, String uuid) throws CaptchaException { + if (StringUtils.isEmpty(code)) { + throw new CaptchaException("验证码不能为空"); + } + if (StringUtils.isEmpty(uuid)) { + throw new CaptchaException("验证码已失效"); + } + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + String captcha = redisService.getCacheObject(verifyKey); + redisService.deleteObject(verifyKey); + + if (!code.equalsIgnoreCase(captcha)) { + throw new CaptchaException("验证码错误"); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..1e34d93 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/bootstrap.yml @@ -0,0 +1,41 @@ +# Tomcat +server: + port: 8080 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-gateway + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + sentinel: + # 取消控制台懒加载 + eager: true + transport: + # 控制台地址 + dashboard: localhost:8858 + client-ip: localhost + # nacos配置持久化 + datasource: + ds1: + nacos: + server-addr: 43.142.44.217:8848 + dataId: sentinel-ruoyi-gateway + groupId: DEFAULT_GROUP + data-type: json + rule-type: gw-flow diff --git a/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/logback.xml new file mode 100644 index 0000000..17a0cab --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-gateway/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/pom.xml b/muyu-ruoyi-server/ruoyi-modules/pom.xml new file mode 100644 index 0000000..f8733c6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/pom.xml @@ -0,0 +1,29 @@ + + + + com.muyu + muyu + 3.6.3 + + 4.0.0 + + + ruoyi-system + ruoyi-gen + ruoyi-job + ruoyi-file + ruoyi-product + ruoyi-product/ruoyi-product-common + ruoyi-product/ruoyi-product-remote + ruoyi-product/ruoyi-product-server + + + ruoyi-modules + pom + + + muyu-modules业务模块 + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/pom.xml new file mode 100644 index 0000000..9a42f9b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/pom.xml @@ -0,0 +1,97 @@ + + + + com.muyu + ruoyi-modules + 3.6.3 + + 4.0.0 + + ruoyi-modules-file + + + muyu-modules-file文件服务 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.github.tobato + fastdfs-client + + + + + io.minio + minio + ${minio.version} + + + + + + com.muyu + muyu-common-swagger + + + + + com.muyu + muyu-common-system + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/MuYuFileApplication.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/MuYuFileApplication.java new file mode 100644 index 0000000..dc87ff7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/MuYuFileApplication.java @@ -0,0 +1,19 @@ +package com.ruoyi.file; + +import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 文件服务 + * + * @author muyu + */ +@EnableCustomSwagger2 +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class MuYuFileApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuFileApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/MinioConfig.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/MinioConfig.java new file mode 100644 index 0000000..9406edc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/MinioConfig.java @@ -0,0 +1,72 @@ +package com.ruoyi.file.config; + +import io.minio.MinioClient; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Minio 配置信息 + * + * @author muyu + */ +@Configuration +@ConfigurationProperties(prefix = "minio") +public class MinioConfig { + /** + * 服务地址 + */ + private String url; + + /** + * 用户名 + */ + private String accessKey; + + /** + * 密码 + */ + private String secretKey; + + /** + * 存储桶名称 + */ + private String bucketName; + + public String getUrl () { + return url; + } + + public void setUrl (String url) { + this.url = url; + } + + public String getAccessKey () { + return accessKey; + } + + public void setAccessKey (String accessKey) { + this.accessKey = accessKey; + } + + public String getSecretKey () { + return secretKey; + } + + public void setSecretKey (String secretKey) { + this.secretKey = secretKey; + } + + public String getBucketName () { + return bucketName; + } + + public void setBucketName (String bucketName) { + this.bucketName = bucketName; + } + + @Bean + public MinioClient getMinioClient () { + return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java new file mode 100644 index 0000000..12736e5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java @@ -0,0 +1,48 @@ +package com.ruoyi.file.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.io.File; + +/** + * 通用映射配置 + * + * @author muyu + */ +@Configuration +public class ResourcesConfig implements WebMvcConfigurer { + /** + * 资源映射路径 前缀 + */ + @Value("${file.prefix}") + public String localFilePrefix; + /** + * 上传文件存储在本地的根路径 + */ + @Value("${file.path}") + private String localFilePath; + + @Override + public void addResourceHandlers (ResourceHandlerRegistry registry) { + /** 本地文件上传路径 */ + registry.addResourceHandler(localFilePrefix + "/**") + .addResourceLocations("file:" + localFilePath + File.separator); + } + + /** + * 开启跨域 + */ + @Override + public void addCorsMappings (CorsRegistry registry) { + // 设置允许跨域的路由 + registry.addMapping(localFilePrefix + "/**") + // 设置允许跨域请求的域名 + .allowedOrigins("*") + // 设置允许的方法 + .allowedMethods("GET"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java new file mode 100644 index 0000000..802fa9e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java @@ -0,0 +1,43 @@ +package com.ruoyi.file.controller; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.file.FileUtils; +import com.ruoyi.file.service.ISysFileService; +import com.ruoyi.common.system.domain.SysFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件请求处理 + * + * @author muyu + */ +@RestController +public class SysFileController { + private static final Logger log = LoggerFactory.getLogger(SysFileController.class); + + @Autowired + private ISysFileService sysFileService; + + /** + * 文件上传请求 + */ + @PostMapping("upload") + public Result upload (MultipartFile file) { + try { + // 上传并返回访问地址 + String url = sysFileService.uploadFile(file); + SysFile sysFile = new SysFile(); + sysFile.setName(FileUtils.getName(url)); + sysFile.setUrl(url); + return Result.success(sysFile); + } catch (Exception e) { + log.error("上传文件失败", e); + return Result.error(e.getMessage()); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java new file mode 100644 index 0000000..e15e202 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java @@ -0,0 +1,47 @@ +package com.ruoyi.file.service; + +import com.alibaba.nacos.common.utils.IoUtils; +import com.github.tobato.fastdfs.domain.fdfs.StorePath; +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import com.ruoyi.common.core.utils.file.FileTypeUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; + +/** + * FastDFS 文件存储 + * + * @author muyu + */ +@Service +public class FastDfsSysFileServiceImpl implements ISysFileService { + /** + * 域名或本机访问地址 + */ + @Value("${fdfs.domain}") + public String domain; + + @Autowired + private FastFileStorageClient storageClient; + + /** + * FastDfs文件上传接口 + * + * @param file 上传的文件 + * + * @return 访问地址 + * + * @throws Exception + */ + @Override + public String uploadFile (MultipartFile file) throws Exception { + InputStream inputStream = file.getInputStream(); + StorePath storePath = storageClient.uploadFile(inputStream, file.getSize(), + FileTypeUtils.getExtension(file), null); + IoUtils.closeQuietly(inputStream); + return domain + "/" + storePath.getFullPath(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java new file mode 100644 index 0000000..b13045d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java @@ -0,0 +1,21 @@ +package com.ruoyi.file.service; + +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件上传接口 + * + * @author muyu + */ +public interface ISysFileService { + /** + * 文件上传接口 + * + * @param file 上传的文件 + * + * @return 访问地址 + * + * @throws Exception + */ + public String uploadFile (MultipartFile file) throws Exception; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java new file mode 100644 index 0000000..770cdbb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java @@ -0,0 +1,50 @@ +package com.ruoyi.file.service; + +import com.ruoyi.file.utils.FileUploadUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +/** + * 本地文件存储 + * + * @author muyu + */ +@Primary +@Service +public class LocalSysFileServiceImpl implements ISysFileService { + /** + * 资源映射路径 前缀 + */ + @Value("${file.prefix}") + public String localFilePrefix; + + /** + * 域名或本机访问地址 + */ + @Value("${file.domain}") + public String domain; + + /** + * 上传文件存储在本地的根路径 + */ + @Value("${file.path}") + private String localFilePath; + + /** + * 本地文件上传接口 + * + * @param file 上传的文件 + * + * @return 访问地址 + * + * @throws Exception + */ + @Override + public String uploadFile (MultipartFile file) throws Exception { + String name = FileUploadUtils.upload(localFilePath, file); + String url = domain + localFilePrefix + name; + return url; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java new file mode 100644 index 0000000..3ce9172 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java @@ -0,0 +1,50 @@ +package com.ruoyi.file.service; + +import com.alibaba.nacos.common.utils.IoUtils; +import com.ruoyi.file.config.MinioConfig; +import com.ruoyi.file.utils.FileUploadUtils; +import io.minio.MinioClient; +import io.minio.PutObjectArgs; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; + +/** + * Minio 文件存储 + * + * @author muyu + */ +@Service +public class MinioSysFileServiceImpl implements ISysFileService { + @Autowired + private MinioConfig minioConfig; + + @Autowired + private MinioClient client; + + /** + * Minio文件上传接口 + * + * @param file 上传的文件 + * + * @return 访问地址 + * + * @throws Exception + */ + @Override + public String uploadFile (MultipartFile file) throws Exception { + String fileName = FileUploadUtils.extractFilename(file); + InputStream inputStream = file.getInputStream(); + PutObjectArgs args = PutObjectArgs.builder() + .bucket(minioConfig.getBucketName()) + .object(fileName) + .stream(inputStream, file.getSize(), -1) + .contentType(file.getContentType()) + .build(); + client.putObject(args); + IoUtils.closeQuietly(inputStream); + return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java new file mode 100644 index 0000000..cf1732c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java @@ -0,0 +1,163 @@ +package com.ruoyi.file.utils; + +import com.ruoyi.common.core.exception.file.FileException; +import com.ruoyi.common.core.exception.file.FileNameLengthLimitExceededException; +import com.ruoyi.common.core.exception.file.FileSizeLimitExceededException; +import com.ruoyi.common.core.exception.file.InvalidExtensionException; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.file.FileTypeUtils; +import com.ruoyi.common.core.utils.file.MimeTypeUtils; +import com.ruoyi.common.core.utils.uuid.Seq; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Objects; + +/** + * 文件上传工具类 + * + * @author muyu + */ +public class FileUploadUtils { + /** + * 默认大小 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; + + /** + * 默认的文件名最大长度 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * + * @return 文件名称 + * + * @throws IOException + */ + public static final String upload (String baseDir, MultipartFile file) throws IOException { + try { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } catch (FileException fe) { + throw new IOException(fe.getDefaultMessage(), fe); + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * + * @return 返回上传成功的文件名 + * + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public static final String upload (String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, + InvalidExtensionException { + int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length(); + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + assertAllowed(file, allowedExtension); + + String fileName = extractFilename(file); + + String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); + file.transferTo(Paths.get(absPath)); + return getPathFileName(fileName); + } + + /** + * 编码文件名 + */ + public static final String extractFilename (MultipartFile file) { + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), + FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), FileTypeUtils.getExtension(file)); + } + + private static final File getAbsoluteFile (String uploadDir, String fileName) throws IOException { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) { + if (!desc.getParentFile().exists()) { + desc.getParentFile().mkdirs(); + } + } + return desc.isAbsolute() ? desc : desc.getAbsoluteFile(); + } + + private static final String getPathFileName (String fileName) throws IOException { + String pathFileName = "/" + fileName; + return pathFileName; + } + + /** + * 文件大小校验 + * + * @param file 上传的文件 + * + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws InvalidExtensionException 文件校验异常 + */ + public static final void assertAllowed (MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException { + long size = file.getSize(); + if (size > DEFAULT_MAX_SIZE) { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = FileTypeUtils.getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } else { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension 上传文件类型 + * @param allowedExtension 允许上传文件类型 + * + * @return true/false + */ + public static final boolean isAllowedExtension (String extension, String[] allowedExtension) { + for (String str : allowedExtension) { + if (str.equalsIgnoreCase(extension)) { + return true; + } + } + return false; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..9a13c82 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml @@ -0,0 +1,44 @@ +# Tomcat +server: + port: 9300 + +# 本地文件上传 +file: + domain: http://127.0.0.1:9300 + path: D:/ruoyi/uploadPath + prefix: /statics + +# FastDFS配置 +fdfs: + domain: http://8.129.231.12 + soTimeout: 3000 + connectTimeout: 2000 + trackerList: 8.129.231.12:22122 + +# Minio配置 +minio: + url: http://8.129.231.12:9000 + accessKey: minioadmin + secretKey: minioadmin + bucketName: test +# Spring +spring: + application: + # 应用名称 + name: ruoyi-file + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/logback.xml new file mode 100644 index 0000000..01d1a21 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-file/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/pom.xml new file mode 100644 index 0000000..71751e6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/pom.xml @@ -0,0 +1,102 @@ + + + + com.muyu + ruoyi-modules + 3.6.3 + + 4.0.0 + + ruoyi-modules-gen + + + muyu-modules-gen代码生成 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + org.apache.velocity + velocity-engine-core + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/MuYuGenApplication.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/MuYuGenApplication.java new file mode 100644 index 0000000..8e64f72 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/MuYuGenApplication.java @@ -0,0 +1,22 @@ +package com.ruoyi.gen; + +import com.ruoyi.common.security.annotation.EnableCustomConfig; +import com.ruoyi.common.security.annotation.EnableMyFeignClients; +import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 代码生成 + * + * @author muyu + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class MuYuGenApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuGenApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/config/GenConfig.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/config/GenConfig.java new file mode 100644 index 0000000..2281b0f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/config/GenConfig.java @@ -0,0 +1,65 @@ +package com.ruoyi.gen.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 代码生成相关配置 + * + * @author muyu + */ +@Component +@ConfigurationProperties(prefix = "gen") +public class GenConfig { + /** + * 作者 + */ + public static String author; + + /** + * 生成包路径 + */ + public static String packageName; + + /** + * 自动去除表前缀,默认是false + */ + public static boolean autoRemovePre; + + /** + * 表前缀(类名不会包含表前缀) + */ + public static String tablePrefix; + + public static String getAuthor () { + return author; + } + + public void setAuthor (String author) { + GenConfig.author = author; + } + + public static String getPackageName () { + return packageName; + } + + public void setPackageName (String packageName) { + GenConfig.packageName = packageName; + } + + public static boolean getAutoRemovePre () { + return autoRemovePre; + } + + public void setAutoRemovePre (boolean autoRemovePre) { + GenConfig.autoRemovePre = autoRemovePre; + } + + public static String getTablePrefix () { + return tablePrefix; + } + + public void setTablePrefix (String tablePrefix) { + GenConfig.tablePrefix = tablePrefix; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java new file mode 100644 index 0000000..9960282 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java @@ -0,0 +1,192 @@ +package com.ruoyi.gen.controller; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.gen.domain.GenTable; +import com.ruoyi.gen.domain.GenTableColumn; +import com.ruoyi.gen.service.GenTableColumnServiceImpl; +import com.ruoyi.gen.service.GenTableServiceImpl; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 代码生成 操作处理 + * + * @author muyu + */ +@RequestMapping("/gen") +@RestController +public class GenController extends BaseController { + @Autowired + private GenTableServiceImpl genTableService; + + @Autowired + private GenTableColumnServiceImpl genTableColumnService; + + /** + * 查询代码生成列表 + */ + @RequiresPermissions("tool:gen:list") + @GetMapping("/list") + public Result> genList (GenTable genTable) { + startPage(); + List list = genTableService.selectGenTableList(genTable); + return getDataTable(list); + } + + /** + * 修改代码生成业务 + */ + @RequiresPermissions("tool:gen:query") + @GetMapping(value = "/{tableId}") + public Result getInfo (@PathVariable Long tableId) { + GenTable table = genTableService.selectGenTableById(tableId); + List tables = genTableService.selectGenTableAll(); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + Map map = new HashMap(); + map.put("info", table); + map.put("rows", list); + map.put("tables", tables); + return success(map); + } + + /** + * 查询数据库列表 + */ + @RequiresPermissions("tool:gen:list") + @GetMapping("/db/list") + public Result> dataList (GenTable genTable) { + startPage(); + List list = genTableService.selectDbTableList(genTable); + return getDataTable(list); + } + + /** + * 查询数据表字段列表 + */ + @GetMapping(value = "/column/{tableId}") + public Result> columnList (Long tableId) { + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + return Result.success( + TableDataInfo.builder() + .total(list.size()) + .rows(list) + .build() + ); + } + + /** + * 导入表结构(保存) + */ + @RequiresPermissions("tool:gen:import") + @Log(title = "代码生成", businessType = BusinessType.IMPORT) + @PostMapping("/importTable") + public Result importTableSave (String tables) { + String[] tableNames = Convert.toStrArray(tables); + // 查询表信息 + List tableList = genTableService.selectDbTableListByNames(tableNames); + genTableService.importGenTable(tableList); + return success(); + } + + /** + * 修改保存代码生成业务 + */ + @RequiresPermissions("tool:gen:edit") + @Log(title = "代码生成", businessType = BusinessType.UPDATE) + @PutMapping + public Result editSave (@Validated @RequestBody GenTable genTable) { + genTableService.validateEdit(genTable); + genTableService.updateGenTable(genTable); + return success(); + } + + /** + * 删除代码生成 + */ + @RequiresPermissions("tool:gen:remove") + @Log(title = "代码生成", businessType = BusinessType.DELETE) + @DeleteMapping("/{tableIds}") + public Result remove (@PathVariable Long[] tableIds) { + genTableService.deleteGenTableByIds(tableIds); + return success(); + } + + /** + * 预览代码 + */ + @RequiresPermissions("tool:gen:preview") + @GetMapping("/preview/{tableId}") + public Result preview (@PathVariable("tableId") Long tableId) throws IOException { + Map dataMap = genTableService.previewCode(tableId); + return success(dataMap); + } + + /** + * 生成代码(下载方式) + */ + @RequiresPermissions("tool:gen:code") + @Log(title = "代码生成", businessType = BusinessType.GENCODE) + @GetMapping("/download/{tableName}") + public void download (HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException { + byte[] data = genTableService.downloadCode(tableName); + genCode(response, data); + } + + /** + * 生成代码(自定义路径) + */ + @RequiresPermissions("tool:gen:code") + @Log(title = "代码生成", businessType = BusinessType.GENCODE) + @GetMapping("/genCode/{tableName}") + public Result genCode (@PathVariable("tableName") String tableName) { + genTableService.generatorCode(tableName); + return success(); + } + + /** + * 同步数据库 + */ + @RequiresPermissions("tool:gen:edit") + @Log(title = "代码生成", businessType = BusinessType.UPDATE) + @GetMapping("/synchDb/{tableName}") + public Result synchDb (@PathVariable("tableName") String tableName) { + genTableService.synchDb(tableName); + return success(); + } + + /** + * 批量生成代码 + */ + @RequiresPermissions("tool:gen:code") + @Log(title = "代码生成", businessType = BusinessType.GENCODE) + @GetMapping("/batchGenCode") + public void batchGenCode (HttpServletResponse response, String tables) throws IOException { + String[] tableNames = Convert.toStrArray(tables); + byte[] data = genTableService.downloadCode(tableNames); + genCode(response, data); + } + + /** + * 生成zip文件 + */ + private void genCode (HttpServletResponse response, byte[] data) throws IOException { + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"muyu.zip\""); + response.addHeader("Content-Length", String.valueOf(data.length)); + response.setContentType("application/octet-stream; charset=UTF-8"); + IOUtils.write(data, response.getOutputStream()); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java new file mode 100644 index 0000000..c248d3d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java @@ -0,0 +1,373 @@ +package com.ruoyi.gen.domain; + +import com.ruoyi.common.core.constant.GenConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.ArrayUtils; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import java.util.List; + + +/** + * 业务表 gen_table + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class GenTable extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + private Long tableId; + + /** + * 表名称 + */ + @NotBlank(message = "表名称不能为空") + private String tableName; + + /** + * 表描述 + */ + @NotBlank(message = "表描述不能为空") + private String tableComment; + + /** + * 关联父表的表名 + */ + private String subTableName; + + /** + * 本表关联父表的外键名 + */ + private String subTableFkName; + + /** + * 实体类名称(首字母大写) + */ + @NotBlank(message = "实体类名称不能为空") + private String className; + + /** + * 使用的模板(crud单表操作 tree树表操作 sub主子表操作) + */ + private String tplCategory; + + /** + * 生成包路径 + */ + @NotBlank(message = "生成包路径不能为空") + private String packageName; + + /** + * 生成模块名 + */ + @NotBlank(message = "生成模块名不能为空") + private String moduleName; + + /** + * 生成业务名 + */ + @NotBlank(message = "生成业务名不能为空") + private String businessName; + + /** + * 生成功能名 + */ + @NotBlank(message = "生成功能名不能为空") + private String functionName; + + /** + * 生成作者 + */ + @NotBlank(message = "作者不能为空") + private String functionAuthor; + + /** + * 生成代码方式(0zip压缩包 1自定义路径) + */ + private String genType; + + /** + * 生成路径(不填默认项目路径) + */ + private String genPath; + + /** + * 主键信息 + */ + private GenTableColumn pkColumn; + + /** + * 子表信息 + */ + private GenTable subTable; + + /** + * 表列信息 + */ + @Valid + private List columns; + + /** + * 其它生成选项 + */ + private String options; + + /** + * 树编码字段 + */ + private String treeCode; + + /** + * 树父编码字段 + */ + private String treeParentCode; + + /** + * 树名称字段 + */ + private String treeName; + + /** + * 上级菜单ID字段 + */ + private String parentMenuId; + + /** + * 上级菜单名称字段 + */ + private String parentMenuName; + + public static boolean isSub (String tplCategory) { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory); + } + + public static boolean isTree (String tplCategory) { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory); + } + + public static boolean isCrud (String tplCategory) { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory); + } + + public static boolean isSuperColumn (String tplCategory, String javaField) { + if (isTree(tplCategory)) { + return StringUtils.equalsAnyIgnoreCase(javaField, + ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); + } + return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); + } + + public Long getTableId () { + return tableId; + } + + public void setTableId (Long tableId) { + this.tableId = tableId; + } + + public String getTableName () { + return tableName; + } + + public void setTableName (String tableName) { + this.tableName = tableName; + } + + public String getTableComment () { + return tableComment; + } + + public void setTableComment (String tableComment) { + this.tableComment = tableComment; + } + + public String getSubTableName () { + return subTableName; + } + + public void setSubTableName (String subTableName) { + this.subTableName = subTableName; + } + + public String getSubTableFkName () { + return subTableFkName; + } + + public void setSubTableFkName (String subTableFkName) { + this.subTableFkName = subTableFkName; + } + + public String getClassName () { + return className; + } + + public void setClassName (String className) { + this.className = className; + } + + public String getTplCategory () { + return tplCategory; + } + + public void setTplCategory (String tplCategory) { + this.tplCategory = tplCategory; + } + + public String getPackageName () { + return packageName; + } + + public void setPackageName (String packageName) { + this.packageName = packageName; + } + + public String getModuleName () { + return moduleName; + } + + public void setModuleName (String moduleName) { + this.moduleName = moduleName; + } + + public String getBusinessName () { + return businessName; + } + + public void setBusinessName (String businessName) { + this.businessName = businessName; + } + + public String getFunctionName () { + return functionName; + } + + public void setFunctionName (String functionName) { + this.functionName = functionName; + } + + public String getFunctionAuthor () { + return functionAuthor; + } + + public void setFunctionAuthor (String functionAuthor) { + this.functionAuthor = functionAuthor; + } + + public String getGenType () { + return genType; + } + + public void setGenType (String genType) { + this.genType = genType; + } + + public String getGenPath () { + return genPath; + } + + public void setGenPath (String genPath) { + this.genPath = genPath; + } + + public GenTableColumn getPkColumn () { + return pkColumn; + } + + public void setPkColumn (GenTableColumn pkColumn) { + this.pkColumn = pkColumn; + } + + public GenTable getSubTable () { + return subTable; + } + + public void setSubTable (GenTable subTable) { + this.subTable = subTable; + } + + public List getColumns () { + return columns; + } + + public void setColumns (List columns) { + this.columns = columns; + } + + public String getOptions () { + return options; + } + + public void setOptions (String options) { + this.options = options; + } + + public String getTreeCode () { + return treeCode; + } + + public void setTreeCode (String treeCode) { + this.treeCode = treeCode; + } + + public String getTreeParentCode () { + return treeParentCode; + } + + public void setTreeParentCode (String treeParentCode) { + this.treeParentCode = treeParentCode; + } + + public String getTreeName () { + return treeName; + } + + public void setTreeName (String treeName) { + this.treeName = treeName; + } + + public String getParentMenuId () { + return parentMenuId; + } + + public void setParentMenuId (String parentMenuId) { + this.parentMenuId = parentMenuId; + } + + public String getParentMenuName () { + return parentMenuName; + } + + public void setParentMenuName (String parentMenuName) { + this.parentMenuName = parentMenuName; + } + + public boolean isSub () { + return isSub(this.tplCategory); + } + + public boolean isTree () { + return isTree(this.tplCategory); + } + + public boolean isCrud () { + return isCrud(this.tplCategory); + } + + public boolean isSuperColumn (String javaField) { + return isSuperColumn(this.tplCategory, javaField); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java new file mode 100644 index 0000000..ad1e3eb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java @@ -0,0 +1,357 @@ +package com.ruoyi.gen.domain; + +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import javax.validation.constraints.NotBlank; + +/** + * 代码生成业务字段表 gen_table_column + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class GenTableColumn extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + private Long columnId; + + /** + * 归属表编号 + */ + private Long tableId; + + /** + * 列名称 + */ + private String columnName; + + /** + * 列描述 + */ + private String columnComment; + + /** + * 列类型 + */ + private String columnType; + + /** + * JAVA类型 + */ + private String javaType; + + /** + * JAVA字段名 + */ + @NotBlank(message = "Java属性不能为空") + private String javaField; + + /** + * 是否主键(1是) + */ + private String isPk; + + /** + * 是否自增(1是) + */ + private String isIncrement; + + /** + * 是否必填(1是) + */ + private String isRequired; + + /** + * 是否为插入字段(1是) + */ + private String isInsert; + + /** + * 是否编辑字段(1是) + */ + private String isEdit; + + /** + * 是否列表字段(1是) + */ + private String isList; + + /** + * 是否查询字段(1是) + */ + private String isQuery; + + /** + * 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) + */ + private String queryType; + + /** + * 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件) + */ + private String htmlType; + + /** + * 字典类型 + */ + private String dictType; + + /** + * 排序 + */ + private Integer sort; + + public static boolean isSuperColumn (String javaField) { + return StringUtils.equalsAnyIgnoreCase(javaField, + // BaseEntity + "createBy", "createTime", "updateBy", "updateTime", "remark", + // TreeEntity + "parentName", "parentId", "orderNum", "ancestors"); + } + + public static boolean isUsableColumn (String javaField) { + // isSuperColumn()中的名单用于避免生成多余Domain属性,若某些属性在生成页面时需要用到不能忽略,则放在此处白名单 + return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark"); + } + + public Long getColumnId () { + return columnId; + } + + public void setColumnId (Long columnId) { + this.columnId = columnId; + } + + public Long getTableId () { + return tableId; + } + + public void setTableId (Long tableId) { + this.tableId = tableId; + } + + public String getColumnName () { + return columnName; + } + + public void setColumnName (String columnName) { + this.columnName = columnName; + } + + public String getColumnComment () { + return columnComment; + } + + public void setColumnComment (String columnComment) { + this.columnComment = columnComment; + } + + public String getColumnType () { + return columnType; + } + + public void setColumnType (String columnType) { + this.columnType = columnType; + } + + public String getJavaType () { + return javaType; + } + + public void setJavaType (String javaType) { + this.javaType = javaType; + } + + public String getJavaField () { + return javaField; + } + + public void setJavaField (String javaField) { + this.javaField = javaField; + } + + public String getCapJavaField () { + return StringUtils.capitalize(javaField); + } + + public String getIsPk () { + return isPk; + } + + public void setIsPk (String isPk) { + this.isPk = isPk; + } + + public boolean isPk () { + return isPk(this.isPk); + } + + public boolean isPk (String isPk) { + return isPk != null && StringUtils.equals("1", isPk); + } + + public String getIsIncrement () { + return isIncrement; + } + + public void setIsIncrement (String isIncrement) { + this.isIncrement = isIncrement; + } + + public boolean isIncrement () { + return isIncrement(this.isIncrement); + } + + public boolean isIncrement (String isIncrement) { + return isIncrement != null && StringUtils.equals("1", isIncrement); + } + + public String getIsRequired () { + return isRequired; + } + + public void setIsRequired (String isRequired) { + this.isRequired = isRequired; + } + + public boolean isRequired () { + return isRequired(this.isRequired); + } + + public boolean isRequired (String isRequired) { + return isRequired != null && StringUtils.equals("1", isRequired); + } + + public String getIsInsert () { + return isInsert; + } + + public void setIsInsert (String isInsert) { + this.isInsert = isInsert; + } + + public boolean isInsert () { + return isInsert(this.isInsert); + } + + public boolean isInsert (String isInsert) { + return isInsert != null && StringUtils.equals("1", isInsert); + } + + public String getIsEdit () { + return isEdit; + } + + public void setIsEdit (String isEdit) { + this.isEdit = isEdit; + } + + public boolean isEdit () { + return isInsert(this.isEdit); + } + + public boolean isEdit (String isEdit) { + return isEdit != null && StringUtils.equals("1", isEdit); + } + + public String getIsList () { + return isList; + } + + public void setIsList (String isList) { + this.isList = isList; + } + + public boolean isList () { + return isList(this.isList); + } + + public boolean isList (String isList) { + return isList != null && StringUtils.equals("1", isList); + } + + public String getIsQuery () { + return isQuery; + } + + public void setIsQuery (String isQuery) { + this.isQuery = isQuery; + } + + public boolean isQuery () { + return isQuery(this.isQuery); + } + + public boolean isQuery (String isQuery) { + return isQuery != null && StringUtils.equals("1", isQuery); + } + + public String getQueryType () { + return queryType; + } + + public void setQueryType (String queryType) { + this.queryType = queryType; + } + + public String getHtmlType () { + return htmlType; + } + + public void setHtmlType (String htmlType) { + this.htmlType = htmlType; + } + + public String getDictType () { + return dictType; + } + + public void setDictType (String dictType) { + this.dictType = dictType; + } + + public Integer getSort () { + return sort; + } + + public void setSort (Integer sort) { + this.sort = sort; + } + + public boolean isSuperColumn () { + return isSuperColumn(this.javaField); + } + + public boolean isUsableColumn () { + return isUsableColumn(javaField); + } + + public String readConverterExp () { + String remarks = StringUtils.substringBetween(this.columnComment, "(", ")"); + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotEmpty(remarks)) { + for (String value : remarks.split(" ")) { + if (StringUtils.isNotEmpty(value)) { + Object startStr = value.subSequence(0, 1); + String endStr = value.substring(1); + sb.append(startStr).append("=").append(endStr).append(","); + } + } + return sb.deleteCharAt(sb.length() - 1).toString(); + } else { + return this.columnComment; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableColumnMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableColumnMapper.java new file mode 100644 index 0000000..c15c174 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableColumnMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.gen.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.gen.domain.GenTableColumn; +import java.util.List; + +/** + * 业务字段 数据层 + * + * @author muyu + */ +public interface GenTableColumnMapper extends BaseMapper { + /** + * 根据表名称查询列信息 + * + * @param tableName 表名称 + * + * @return 列信息 + */ + List selectDbTableColumnsByName (String tableName); + + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * + * @return 业务字段集合 + */ + List selectGenTableColumnListByTableId (Long tableId); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + int insertGenTableColumn (GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + int updateGenTableColumn (GenTableColumn genTableColumn); + + /** + * 删除业务字段 + * + * @param genTableColumns 列数据 + * + * @return 结果 + */ + int deleteGenTableColumns (List genTableColumns); + + /** + * 批量删除业务字段 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + int deleteGenTableColumnByIds (Long[] ids); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableMapper.java new file mode 100644 index 0000000..1ed8e04 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableMapper.java @@ -0,0 +1,91 @@ +package com.ruoyi.gen.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.gen.domain.GenTable; +import java.util.List; + +/** + * 业务 数据层 + * + * @author muyu + */ +public interface GenTableMapper extends BaseMapper { + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * + * @return 业务集合 + */ + List selectGenTableList (GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * + * @return 数据库表集合 + */ + List selectDbTableList (GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * + * @return 数据库表集合 + */ + List selectDbTableListByNames (String[] tableNames); + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + List selectGenTableAll (); + + /** + * 查询表ID业务信息 + * + * @param id 业务ID + * + * @return 业务信息 + */ + GenTable selectGenTableById (Long id); + + /** + * 查询表名称业务信息 + * + * @param tableName 表名称 + * + * @return 业务信息 + */ + GenTable selectGenTableByName (String tableName); + + /** + * 新增业务 + * + * @param genTable 业务信息 + * + * @return 结果 + */ + int insertGenTable (GenTable genTable); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * + * @return 结果 + */ + int updateGenTable (GenTable genTable); + + /** + * 批量删除业务 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + int deleteGenTableByIds (Long[] ids); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableColumnServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableColumnServiceImpl.java new file mode 100644 index 0000000..00c14d8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableColumnServiceImpl.java @@ -0,0 +1,67 @@ +package com.ruoyi.gen.service; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.gen.domain.GenTableColumn; +import com.ruoyi.gen.mapper.GenTableColumnMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * 业务字段 服务层实现 + * + * @author muyu + */ +@Service +public class GenTableColumnServiceImpl implements IGenTableColumnService { + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * + * @return 业务字段集合 + */ + @Override + public List selectGenTableColumnListByTableId (Long tableId) { + return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); + } + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + @Override + public int insertGenTableColumn (GenTableColumn genTableColumn) { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + @Override + public int updateGenTableColumn (GenTableColumn genTableColumn) { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 删除业务字段对象 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + @Override + public int deleteGenTableColumnByIds (String ids) { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java new file mode 100644 index 0000000..0ffa9f5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java @@ -0,0 +1,464 @@ +package com.ruoyi.gen.service; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.GenConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.text.CharsetKit; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.gen.domain.GenTable; +import com.ruoyi.gen.domain.GenTableColumn; +import com.ruoyi.gen.mapper.GenTableColumnMapper; +import com.ruoyi.gen.mapper.GenTableMapper; +import com.ruoyi.gen.util.GenUtils; +import com.ruoyi.gen.util.VelocityInitializer; +import com.ruoyi.gen.util.VelocityUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * 业务 服务层实现 + * + * @author muyu + */ +@Service +public class GenTableServiceImpl implements IGenTableService { + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableMapper genTableMapper; + + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 获取代码生成地址 + * + * @param table 业务表信息 + * @param template 模板文件路径 + * + * @return 生成地址 + */ + public static String getGenPath (GenTable table, String template) { + String genPath = table.getGenPath(); + if (StringUtils.equals(genPath, "/")) { + return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); + } + return genPath + File.separator + VelocityUtils.getFileName(template, table); + } + + /** + * 查询业务信息 + * + * @param id 业务ID + * + * @return 业务信息 + */ + @Override + public GenTable selectGenTableById (Long id) { + GenTable genTable = genTableMapper.selectGenTableById(id); + setTableFromOptions(genTable); + return genTable; + } + + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * + * @return 业务集合 + */ + @Override + public List selectGenTableList (GenTable genTable) { + return genTableMapper.selectGenTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * + * @return 数据库表集合 + */ + @Override + public List selectDbTableList (GenTable genTable) { + return genTableMapper.selectDbTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * + * @return 数据库表集合 + */ + @Override + public List selectDbTableListByNames (String[] tableNames) { + return genTableMapper.selectDbTableListByNames(tableNames); + } + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + @Override + public List selectGenTableAll () { + return genTableMapper.selectGenTableAll(); + } + + /** + * 修改业务 + * + * @param genTable 业务信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateGenTable (GenTable genTable) { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) { + for (GenTableColumn cenTableColumn : genTable.getColumns()) { + genTableColumnMapper.updateGenTableColumn(cenTableColumn); + } + } + } + + /** + * 删除业务对象 + * + * @param tableIds 需要删除的数据ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteGenTableByIds (Long[] tableIds) { + genTableMapper.deleteGenTableByIds(tableIds); + genTableColumnMapper.deleteGenTableColumnByIds(tableIds); + } + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void importGenTable (List tableList) { + String operName = SecurityUtils.getUsername(); + try { + for (GenTable table : tableList) { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) { + // 保存列信息 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + } + } + } catch (Exception e) { + throw new ServiceException("导入失败:" + e.getMessage()); + } + } + + /** + * 预览代码 + * + * @param tableId 表编号 + * + * @return 预览数据列表 + */ + @Override + public Map previewCode (Long tableId) { + Map dataMap = new LinkedHashMap<>(); + // 查询表信息 + GenTable table = genTableMapper.selectGenTableById(tableId); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + dataMap.put(template, sw.toString()); + } + return dataMap; + } + + /** + * 生成代码(下载方式) + * + * @param tableName 表名称 + * + * @return 数据 + */ + @Override + public byte[] downloadCode (String tableName) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 生成代码(自定义路径) + * + * @param tableName 表名称 + */ + @Override + public void generatorCode (String tableName) { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) { + if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try { + String path = getGenPath(table, template); + FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8); + } catch (IOException e) { + throw new ServiceException("渲染模板失败,表名:" + table.getTableName()); + } + } + } + } + + /** + * 同步数据库 + * + * @param tableName 表名称 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void synchDb (String tableName) { + GenTable table = genTableMapper.selectGenTableByName(tableName); + List tableColumns = table.getColumns(); + Map tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); + + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + if (StringUtils.isEmpty(dbTableColumns)) { + throw new ServiceException("同步数据失败,原表结构不存在"); + } + List dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); + + dbTableColumns.forEach(column -> { + GenUtils.initColumnField(column, table); + if (tableColumnMap.containsKey(column.getColumnName())) { + GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName()); + column.setColumnId(prevColumn.getColumnId()); + if (column.isList()) { + // 如果是列表,继续保留查询方式/字典类型选项 + column.setDictType(prevColumn.getDictType()); + column.setQueryType(prevColumn.getQueryType()); + } + if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk() + && (column.isInsert() || column.isEdit()) + && ((column.isUsableColumn()) || (!column.isSuperColumn()))) { + // 如果是(新增/修改&非主键/非忽略及父属性),继续保留必填/显示类型选项 + column.setIsRequired(prevColumn.getIsRequired()); + column.setHtmlType(prevColumn.getHtmlType()); + } + genTableColumnMapper.updateGenTableColumn(column); + } else { + genTableColumnMapper.insertGenTableColumn(column); + } + }); + + List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(delColumns)) { + genTableColumnMapper.deleteGenTableColumns(delColumns); + } + } + + /** + * 批量生成代码(下载方式) + * + * @param tableNames 表数组 + * + * @return 数据 + */ + @Override + public byte[] downloadCode (String[] tableNames) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) { + generatorCode(tableName, zip); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 查询表信息并生成代码 + */ + private void generatorCode (String tableName, ZipOutputStream zip) { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try { + // 添加到zip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IOUtils.write(sw.toString(), zip, Constants.UTF8); + IOUtils.closeQuietly(sw); + zip.flush(); + zip.closeEntry(); + } catch (IOException e) { + log.error("渲染模板失败,表名:" + table.getTableName(), e); + } + } + } + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + @Override + public void validateEdit (GenTable genTable) { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSON.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) { + throw new ServiceException("树编码字段不能为空"); + } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) { + throw new ServiceException("树父编码字段不能为空"); + } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) { + throw new ServiceException("树名称字段不能为空"); + } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { + if (StringUtils.isEmpty(genTable.getSubTableName())) { + throw new ServiceException("关联子表的表名不能为空"); + } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) { + throw new ServiceException("子表关联的外键名不能为空"); + } + } + } + } + + /** + * 设置主键列信息 + * + * @param table 业务表信息 + */ + public void setPkColumn (GenTable table) { + for (GenTableColumn column : table.getColumns()) { + if (column.isPk()) { + table.setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getPkColumn())) { + table.setPkColumn(table.getColumns().get(0)); + } + if (GenConstants.TPL_SUB.equals(table.getTplCategory())) { + for (GenTableColumn column : table.getSubTable().getColumns()) { + if (column.isPk()) { + table.getSubTable().setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getSubTable().getPkColumn())) { + table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); + } + } + } + + /** + * 设置主子表信息 + * + * @param table 业务表信息 + */ + public void setSubTable (GenTable table) { + String subTableName = table.getSubTableName(); + if (StringUtils.isNotEmpty(subTableName)) { + table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); + } + } + + /** + * 设置代码生成其他选项值 + * + * @param genTable 设置后的生成对象 + */ + public void setTableFromOptions (GenTable genTable) { + JSONObject paramsObj = JSON.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) { + String treeCode = paramsObj.getString(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID); + String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME); + + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + genTable.setParentMenuId(parentMenuId); + genTable.setParentMenuName(parentMenuName); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableColumnService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableColumnService.java new file mode 100644 index 0000000..9d51d7d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableColumnService.java @@ -0,0 +1,47 @@ +package com.ruoyi.gen.service; + +import com.ruoyi.gen.domain.GenTableColumn; +import java.util.List; + +/** + * 业务字段 服务层 + * + * @author muyu + */ +public interface IGenTableColumnService { + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * + * @return 业务字段集合 + */ + List selectGenTableColumnListByTableId (Long tableId); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + int insertGenTableColumn (GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + int updateGenTableColumn (GenTableColumn genTableColumn); + + /** + * 删除业务字段信息 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + int deleteGenTableColumnByIds (String ids); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableService.java new file mode 100644 index 0000000..9128b08 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableService.java @@ -0,0 +1,130 @@ +package com.ruoyi.gen.service; + +import com.ruoyi.gen.domain.GenTable; +import java.util.List; +import java.util.Map; + +/** + * 业务 服务层 + * + * @author muyu + */ +public interface IGenTableService { + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * + * @return 业务集合 + */ + List selectGenTableList (GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * + * @return 数据库表集合 + */ + List selectDbTableList (GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * + * @return 数据库表集合 + */ + List selectDbTableListByNames (String[] tableNames); + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + List selectGenTableAll (); + + /** + * 查询业务信息 + * + * @param id 业务ID + * + * @return 业务信息 + */ + GenTable selectGenTableById (Long id); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * + * @return 结果 + */ + void updateGenTable (GenTable genTable); + + /** + * 删除业务信息 + * + * @param tableIds 需要删除的表数据ID + * + * @return 结果 + */ + void deleteGenTableByIds (Long[] tableIds); + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + */ + void importGenTable (List tableList); + + /** + * 预览代码 + * + * @param tableId 表编号 + * + * @return 预览数据列表 + */ + Map previewCode (Long tableId); + + /** + * 生成代码(下载方式) + * + * @param tableName 表名称 + * + * @return 数据 + */ + byte[] downloadCode (String tableName); + + /** + * 生成代码(自定义路径) + * + * @param tableName 表名称 + * + * @return 数据 + */ + void generatorCode (String tableName); + + /** + * 同步数据库 + * + * @param tableName 表名称 + */ + void synchDb (String tableName); + + /** + * 批量生成代码(下载方式) + * + * @param tableNames 表数组 + * + * @return 数据 + */ + byte[] downloadCode (String[] tableNames); + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + void validateEdit (GenTable genTable); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java new file mode 100644 index 0000000..51c3884 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java @@ -0,0 +1,228 @@ +package com.ruoyi.gen.util; + +import com.ruoyi.common.core.constant.GenConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.gen.config.GenConfig; +import com.ruoyi.gen.domain.GenTable; +import com.ruoyi.gen.domain.GenTableColumn; +import org.apache.commons.lang3.RegExUtils; +import java.util.Arrays; + +/** + * 代码生成器 工具类 + * + * @author muyu + */ +public class GenUtils { + /** + * 初始化表信息 + */ + public static void initTable (GenTable genTable, String operName) { + genTable.setClassName(convertClassName(genTable.getTableName())); + genTable.setPackageName(GenConfig.getPackageName()); + genTable.setModuleName(getModuleName(GenConfig.getPackageName())); + genTable.setBusinessName(getBusinessName(genTable.getTableName())); + genTable.setFunctionName(replaceText(genTable.getTableComment())); + genTable.setFunctionAuthor(GenConfig.getAuthor()); + genTable.setCreateBy(operName); + } + + /** + * 初始化列属性字段 + */ + public static void initColumnField (GenTableColumn column, GenTable table) { + String dataType = getDbType(column.getColumnType()); + String columnName = column.getColumnName(); + column.setTableId(table.getTableId()); + column.setCreateBy(table.getCreateBy()); + // 设置java字段名 + column.setJavaField(StringUtils.toCamelCase(columnName)); + // 设置默认类型 + column.setJavaType(GenConstants.TYPE_STRING); + column.setQueryType(GenConstants.QUERY_EQ); + + if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) { + // 字符串长度超过500设置为文本域 + Integer columnLength = getColumnLength(column.getColumnType()); + String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; + column.setHtmlType(htmlType); + } else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) { + column.setJavaType(GenConstants.TYPE_DATE); + column.setHtmlType(GenConstants.HTML_DATETIME); + } else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) { + column.setHtmlType(GenConstants.HTML_INPUT); + + // 如果是浮点型 统一用BigDecimal + String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); + if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) { + column.setJavaType(GenConstants.TYPE_BIGDECIMAL); + } + // 如果是整形 + else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) { + column.setJavaType(GenConstants.TYPE_INTEGER); + } + // 长整形 + else { + column.setJavaType(GenConstants.TYPE_LONG); + } + } + + // 插入字段(默认所有字段都需要插入) + column.setIsInsert(GenConstants.REQUIRE); + + // 编辑字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) { + column.setIsEdit(GenConstants.REQUIRE); + } + // 列表字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) { + column.setIsList(GenConstants.REQUIRE); + } + // 查询字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) { + column.setIsQuery(GenConstants.REQUIRE); + } + + // 查询字段类型 + if (StringUtils.endsWithIgnoreCase(columnName, "name")) { + column.setQueryType(GenConstants.QUERY_LIKE); + } + // 状态字段设置单选框 + if (StringUtils.endsWithIgnoreCase(columnName, "status")) { + column.setHtmlType(GenConstants.HTML_RADIO); + } + // 类型&性别字段设置下拉框 + else if (StringUtils.endsWithIgnoreCase(columnName, "type") + || StringUtils.endsWithIgnoreCase(columnName, "sex")) { + column.setHtmlType(GenConstants.HTML_SELECT); + } + // 图片字段设置图片上传控件 + else if (StringUtils.endsWithIgnoreCase(columnName, "image")) { + column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); + } + // 文件字段设置文件上传控件 + else if (StringUtils.endsWithIgnoreCase(columnName, "file")) { + column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); + } + // 内容字段设置富文本控件 + else if (StringUtils.endsWithIgnoreCase(columnName, "content")) { + column.setHtmlType(GenConstants.HTML_EDITOR); + } + } + + /** + * 校验数组是否包含指定值 + * + * @param arr 数组 + * @param targetValue 值 + * + * @return 是否包含 + */ + public static boolean arraysContains (String[] arr, String targetValue) { + return Arrays.asList(arr).contains(targetValue); + } + + /** + * 获取模块名 + * + * @param packageName 包名 + * + * @return 模块名 + */ + public static String getModuleName (String packageName) { + int lastIndex = packageName.lastIndexOf("."); + int nameLength = packageName.length(); + return StringUtils.substring(packageName, lastIndex + 1, nameLength); + } + + /** + * 获取业务名 + * + * @param tableName 表名 + * + * @return 业务名 + */ + public static String getBusinessName (String tableName) { + int lastIndex = tableName.lastIndexOf("_"); + int nameLength = tableName.length(); + return StringUtils.substring(tableName, lastIndex + 1, nameLength); + } + + /** + * 表名转换成Java类名 + * + * @param tableName 表名称 + * + * @return 类名 + */ + public static String convertClassName (String tableName) { + boolean autoRemovePre = GenConfig.getAutoRemovePre(); + String tablePrefix = GenConfig.getTablePrefix(); + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) { + String[] searchList = StringUtils.split(tablePrefix, ","); + tableName = replaceFirst(tableName, searchList); + } + return StringUtils.convertToCamelCase(tableName); + } + + /** + * 批量替换前缀 + * + * @param replacementm 替换值 + * @param searchList 替换列表 + * + * @return + */ + public static String replaceFirst (String replacementm, String[] searchList) { + String text = replacementm; + for (String searchString : searchList) { + if (replacementm.startsWith(searchString)) { + text = replacementm.replaceFirst(searchString, ""); + break; + } + } + return text; + } + + /** + * 关键字替换 + * + * @param text 需要被替换的名字 + * + * @return 替换后的名字 + */ + public static String replaceText (String text) { + return RegExUtils.replaceAll(text, "(?:表|若依)", ""); + } + + /** + * 获取数据库类型字段 + * + * @param columnType 列类型 + * + * @return 截取后的列类型 + */ + public static String getDbType (String columnType) { + if (StringUtils.indexOf(columnType, "(") > 0) { + return StringUtils.substringBefore(columnType, "("); + } else { + return columnType; + } + } + + /** + * 获取字段长度 + * + * @param columnType 列类型 + * + * @return 截取后的列类型 + */ + public static Integer getColumnLength (String columnType) { + if (StringUtils.indexOf(columnType, "(") > 0) { + String length = StringUtils.substringBetween(columnType, "(", ")"); + return Integer.valueOf(length); + } else { + return 0; + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java new file mode 100644 index 0000000..234a2a7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java @@ -0,0 +1,29 @@ +package com.ruoyi.gen.util; + +import com.ruoyi.common.core.constant.Constants; +import org.apache.velocity.app.Velocity; +import java.util.Properties; + +/** + * VelocityEngine工厂 + * + * @author muyu + */ +public class VelocityInitializer { + /** + * 初始化vm方法 + */ + public static void initVelocity () { + Properties p = new Properties(); + try { + // 加载classpath目录下的vm文件 + p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + // 定义字符集 + p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); + // 初始化Velocity引擎,指定配置Properties + Velocity.init(p); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java new file mode 100644 index 0000000..9fcce7f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java @@ -0,0 +1,336 @@ +package com.ruoyi.gen.util; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.constant.GenConstants; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.gen.domain.GenTable; +import com.ruoyi.gen.domain.GenTableColumn; +import org.apache.velocity.VelocityContext; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 模板处理工具类 + * + * @author ruoyi + */ +public class VelocityUtils { + /** + * 项目空间路径 + */ + private static final String PROJECT_PATH = "main/java"; + + /** + * mybatis空间路径 + */ + private static final String MYBATIS_PATH = "main/resources/mapper"; + + /** + * 默认上级菜单,系统工具 + */ + private static final String DEFAULT_PARENT_MENU_ID = "3"; + + /** + * 设置模板变量信息 + * + * @return 模板列表 + */ + public static VelocityContext prepareContext (GenTable genTable) { + String moduleName = genTable.getModuleName(); + String businessName = genTable.getBusinessName(); + String packageName = genTable.getPackageName(); + String tplCategory = genTable.getTplCategory(); + String functionName = genTable.getFunctionName(); + + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("tplCategory", genTable.getTplCategory()); + velocityContext.put("tableName", genTable.getTableName()); + velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】"); + velocityContext.put("ClassName", genTable.getClassName()); + velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); + velocityContext.put("moduleName", genTable.getModuleName()); + velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); + velocityContext.put("businessName", genTable.getBusinessName()); + velocityContext.put("basePackage", getPackagePrefix(packageName)); + velocityContext.put("packageName", packageName); + velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("datetime", DateUtils.getDate()); + velocityContext.put("pkColumn", genTable.getPkColumn()); + velocityContext.put("importList", getImportList(genTable)); + velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); + velocityContext.put("columns", genTable.getColumns()); + velocityContext.put("table", genTable); + velocityContext.put("dicts", getDicts(genTable)); + setMenuVelocityContext(velocityContext, genTable); + if (GenConstants.TPL_TREE.equals(tplCategory)) { + setTreeVelocityContext(velocityContext, genTable); + } + return velocityContext; + } + + public static void setMenuVelocityContext (VelocityContext context, GenTable genTable) { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String parentMenuId = getParentMenuId(paramsObj); + context.put("parentMenuId", parentMenuId); + } + + public static void setTreeVelocityContext (VelocityContext context, GenTable genTable) { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String treeCode = getTreecode(paramsObj); + String treeParentCode = getTreeParentCode(paramsObj); + String treeName = getTreeName(paramsObj); + + context.put("treeCode", treeCode); + context.put("treeParentCode", treeParentCode); + context.put("treeName", treeName); + context.put("expandColumn", getExpandColumn(genTable)); + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { + context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { + context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); + } + } + + + /** + * 获取模板信息 + * + * @return 模板列表 + */ + public static List getTemplateList (String tplCategory) { + List templates = new ArrayList(); + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/query.java.vm"); + templates.add("vm/java/save.java.vm"); + templates.add("vm/java/edit.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/java/service.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + templates.add("vm/sql/sql.vm"); + templates.add("vm/js/api.js.vm"); + if (GenConstants.TPL_CRUD.equals(tplCategory)) { + templates.add("vm/vue/index.vue.vm"); + } else if (GenConstants.TPL_TREE.equals(tplCategory)) { + templates.add("vm/vue/index-tree.vue.vm"); + } + return templates; + } + + /** + * 获取文件名 + */ + public static String getFileName (String template, GenTable genTable) { + // 文件名称 + String fileName = ""; + // 包路径 + String packageName = genTable.getPackageName(); + // 模块名 + String moduleName = genTable.getModuleName(); + // 大写类名 + String className = genTable.getClassName(); + // 业务名称 + String businessName = genTable.getBusinessName(); + + String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); + String mybatisPath = MYBATIS_PATH + "/" + moduleName; + String vuePath = "vue"; + + if (template.contains("domain.java.vm")) { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); + } + if (template.contains("query.java.vm")) { + fileName = StringUtils.format("{}/domain/req/{}QueryReq.java", javaPath, className); + } + if (template.contains("save.java.vm")) { + fileName = StringUtils.format("{}/domain/req/{}SaveReq.java", javaPath, className); + } + if (template.contains("edit.java.vm")) { + fileName = StringUtils.format("{}/domain/req/{}EditReq.java", javaPath, className); + } + if (template.contains("mapper.java.vm")) { + fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); + } else if (template.contains("service.java.vm")) { + fileName = StringUtils.format("{}/service/{}Service.java", javaPath, className); + } else if (template.contains("serviceImpl.java.vm")) { + fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + } else if (template.contains("controller.java.vm")) { + fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + } else if (template.contains("mapper.xml.vm")) { + fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); + } else if (template.contains("sql.vm")) { + fileName = businessName + "Menu.sql"; + } else if (template.contains("api.js.vm")) { + fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); + } else if (template.contains("index.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } else if (template.contains("index-tree.vue.vm")) { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + return fileName; + } + + /** + * 获取包前缀 + * + * @param packageName 包名称 + * + * @return 包前缀名称 + */ + public static String getPackagePrefix (String packageName) { + int lastIndex = packageName.lastIndexOf("."); + return StringUtils.substring(packageName, 0, lastIndex); + } + + /** + * 根据列类型获取导入包 + * + * @param genTable 业务表对象 + * + * @return 返回需要导入的包列表 + */ + public static HashSet getImportList (GenTable genTable) { + List columns = genTable.getColumns(); + HashSet importList = new HashSet(); + for (GenTableColumn column : columns) { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { + importList.add("java.util.Date"); + importList.add("com.fasterxml.jackson.annotation.JsonFormat"); + } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { + importList.add("java.math.BigDecimal"); + } + } + return importList; + } + + /** + * 根据列类型获取字典组 + * + * @param genTable 业务表对象 + * + * @return 返回字典组 + */ + public static String getDicts (GenTable genTable) { + List columns = genTable.getColumns(); + Set dicts = new HashSet(); + addDicts(dicts, columns); + return StringUtils.join(dicts, ", "); + } + + /** + * 添加字典列表 + * + * @param dicts 字典列表 + * @param columns 列集合 + */ + public static void addDicts (Set dicts, List columns) { + for (GenTableColumn column : columns) { + if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( + column.getHtmlType(), + new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX})) { + dicts.add("'" + column.getDictType() + "'"); + } + } + } + + /** + * 获取权限前缀 + * + * @param moduleName 模块名称 + * @param businessName 业务名称 + * + * @return 返回权限前缀 + */ + public static String getPermissionPrefix (String moduleName, String businessName) { + return StringUtils.format("{}:{}", moduleName, businessName); + } + + /** + * 获取上级菜单ID字段 + * + * @param paramsObj 生成其他选项 + * + * @return 上级菜单ID字段 + */ + public static String getParentMenuId (JSONObject paramsObj) { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) + && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) { + return paramsObj.getString(GenConstants.PARENT_MENU_ID); + } + return DEFAULT_PARENT_MENU_ID; + } + + /** + * 获取树编码 + * + * @param paramsObj 生成其他选项 + * + * @return 树编码 + */ + public static String getTreecode (JSONObject paramsObj) { + if (paramsObj.containsKey(GenConstants.TREE_CODE)) { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 获取树父编码 + * + * @param paramsObj 生成其他选项 + * + * @return 树父编码 + */ + public static String getTreeParentCode (JSONObject paramsObj) { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 获取树名称 + * + * @param paramsObj 生成其他选项 + * + * @return 树名称 + */ + public static String getTreeName (JSONObject paramsObj) { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); + } + return StringUtils.EMPTY; + } + + /** + * 获取需要在哪一列上面显示展开按钮 + * + * @param genTable 业务表对象 + * + * @return 展开按钮列序号 + */ + public static int getExpandColumn (GenTable genTable) { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + int num = 0; + for (GenTableColumn column : genTable.getColumns()) { + if (column.isList()) { + num++; + String columnName = column.getColumnName(); + if (columnName.equals(treeName)) { + break; + } + } + } + return num; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..d39345a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml @@ -0,0 +1,25 @@ +# Tomcat +server: + port: 9202 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-gen + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/logback.xml new file mode 100644 index 0000000..918d9b8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml new file mode 100644 index 0000000..ffff889 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time, + update_by, + update_time + from gen_table_column + + + + + + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy}, + update_time = sysdate() + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml new file mode 100644 index 0000000..2bf70ac --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, + table_name, + table_comment, + sub_table_name, + sub_table_fk_name, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + options, + create_by, + create_time, + update_by, + update_time, + remark + from gen_table + + + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + sub_table_name = #{subTableName}, + sub_table_fk_name = #{subTableFkName}, + class_name = #{className}, + function_author = #{functionAuthor}, + gen_type = #{genType}, + gen_path = #{genPath}, + tpl_category = #{tplCategory}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm new file mode 100644 index 0000000..06e3c1e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm @@ -0,0 +1,121 @@ +package ${packageName}.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.security.utils.SecurityUtils; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import ${packageName}.domain.${ClassName}; +import ${packageName}.domain.req.${ClassName}QueryReq; +import ${packageName}.domain.req.${ClassName}SaveReq; +import ${packageName}.domain.req.${ClassName}EditReq; +import ${packageName}.service.${ClassName}Service; +#if($table.crud) +import com.ruoyi.common.core.web.page.TableDataInfo; +#elseif($table.tree) +#end + +/** + * ${functionName}Controller + * + * @author ${author} + * @date ${datetime} + */ +@Api(tags = "${functionName}") +@RestController +@RequestMapping("/${businessName}") +public class ${ClassName}Controller extends BaseController { + @Autowired + private ${ClassName}Service ${className}Service; + + /** + * 查询${functionName}列表 + */ + @ApiOperation("获取${functionName}列表") + @RequiresPermissions("${permissionPrefix}:list") + @GetMapping("/list") +#if($table.crud) + public Result> list(${ClassName}QueryReq ${className}QueryReq) { + startPage(); + List<${ClassName}> list = ${className}Service.list(${ClassName}.queryBuild(${className}QueryReq)); + return getDataTable(list); + } +#elseif($table.tree) + public Result> list(${ClassName} ${className}) { + List<${ClassName}> list = ${className}Service.list(${className}); + return Result.success(list); + } +#end + + /** + * 导出${functionName}列表 + */ + @ApiOperation("导出${functionName}列表") + @RequiresPermissions("${permissionPrefix}:export") + @Log(title = "${functionName}", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ${ClassName} ${className}) { + List<${ClassName}> list = ${className}Service.list(${className}); + ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + util.exportExcel(response, list, "${functionName}数据"); + } + + /** + * 获取${functionName}详细信息 + */ + @ApiOperation("获取${functionName}详细信息") + @RequiresPermissions("${permissionPrefix}:query") + @GetMapping(value = "/{${pkColumn.javaField}}") + @ApiImplicitParam(name = "${pkColumn.javaField}", value = "${pkColumn.javaField}", required = true, dataType = "${pkColumn.javaType}", paramType = "path", dataTypeClass = ${pkColumn.javaType}.class) + public Result<${ClassName}> getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) { + return Result.success(${className}Service.getById(${pkColumn.javaField})); + } + + /** + * 新增${functionName} + */ + @RequiresPermissions("${permissionPrefix}:add") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增${functionName}") + public Result add(@RequestBody ${ClassName}SaveReq ${className}SaveReq) { + return toAjax(${className}Service.save(${ClassName}.saveBuild(${className}SaveReq, SecurityUtils::getUsername))); + } + + /** + * 修改${functionName} + */ + @RequiresPermissions("${permissionPrefix}:edit") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping("/{${pkColumn.javaField}}") + @ApiOperation("修改${functionName}") + public Result edit(@PathVariable ${pkColumn.javaType} ${pkColumn.javaField}, @RequestBody ${ClassName}EditReq ${className}EditReq) { + return toAjax(${className}Service.updateById(${ClassName}.editBuild(${pkColumn.javaField},${className}EditReq, SecurityUtils::getUsername))); + } + + /** + * 删除${functionName} + */ + @RequiresPermissions("${permissionPrefix}:remove") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + @ApiOperation("删除${functionName}") + @ApiImplicitParam(name = "${pkColumn.javaField}", value = "${pkColumn.javaField}", required = true, dataType = "${pkColumn.javaType}", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List<${pkColumn.javaType}> ${pkColumn.javaField}s) { + return toAjax(${className}Service.removeBatchByIds(${pkColumn.javaField}s)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm new file mode 100644 index 0000000..75338e0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm @@ -0,0 +1,145 @@ +package ${packageName}.domain; + +#foreach ($import in $importList) +import ${import}; +#end +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import ${packageName}.domain.req.${ClassName}QueryReq; +import ${packageName}.domain.req.${ClassName}SaveReq; +import ${packageName}.domain.req.${ClassName}EditReq; +#if($table.crud) +import com.ruoyi.common.core.web.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.web.domain.TreeEntity; +#end +import java.util.function.Supplier; +import java.util.Date; + +/** + * ${functionName}对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("${tableName}") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "${ClassName}", description = "${functionName}") +public class ${ClassName} extends ${Entity} { + + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end +#if($column.javaField == $pkColumn.javaField) + @TableId(value = "${pkColumn.columnName}",type = IdType.AUTO) +#end +#set($comment='') +#if($column.isRequired == '1') + #set($comment=', required = true') +#end + @ApiModelProperty(name = "${column.columnComment}", value = "${column.columnComment}"$comment) + private $column.javaType $column.javaField; + +#end +#end + /** + * 查询构造器 + */ + public static ${ClassName} queryBuild( ${ClassName}QueryReq ${className}QueryReq){ + return ${ClassName}.builder() + #foreach ($column in $columns) + #if($column.isQuery == '1') + #if(!$table.isSuperColumn($column.javaField)) + #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) + #set($AttrName=$column.javaField) + #else + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #end + .${column.javaField}(${className}QueryReq.get${AttrName}()) + #end + #end + #end + .build(); + } + + /** + * 添加构造器 + */ + public static ${ClassName} saveBuild(${ClassName}SaveReq ${className}SaveReq,Supplier createBy){ + return ${ClassName}.builder() + #foreach ($column in $columns) + #if($column.isEdit == '1') + #if(!$table.isSuperColumn($column.javaField)) + #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) + #set($AttrName=$column.javaField) + #else + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #end + .${column.javaField}(${className}SaveReq.get${AttrName}()) + #end + #end + #end + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + /** + * 修改构造器 + */ + public static ${ClassName} editBuild(${pkColumn.javaType} ${pkColumn.javaField}, ${ClassName}EditReq ${className}EditReq, Supplier updateBy){ + return ${ClassName}.builder() + .${pkColumn.javaField}(${pkColumn.javaField}) +#foreach ($column in $columns) + #if($column.isEdit == '1') + #if(!$table.isSuperColumn($column.javaField)) + #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) + #set($AttrName=$column.javaField) + #else + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #end + .${column.javaField}(${className}EditReq.get${AttrName}()) + #end + #end +#end + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/edit.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/edit.java.vm new file mode 100644 index 0000000..3c1a71a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/edit.java.vm @@ -0,0 +1,63 @@ +package ${packageName}.domain.req; + +#foreach ($import in $importList) +import ${import}; +#end +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +#if($table.crud) +import com.ruoyi.common.core.web.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.web.domain.TreeEntity; +#end + +/** + * ${functionName}对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud) + #set($Entity="BaseEntity") +#elseif($table.tree) + #set($Entity="TreeEntity") +#end +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "${ClassName}EditReq", description = "${functionName}") +public class ${ClassName}EditReq extends ${Entity} { + + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) + #if(!$table.isSuperColumn($column.javaField)) + #if($column.isEdit == '1') + /** $column.columnComment */ + #if($column.list) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + #end + #end + #set($isRequired='') + #if($column.isRequired == '1') + #set($isRequired=', required = true') + #end + @ApiModelProperty(name = "${column.columnComment}", value = "${column.columnComment}"$isRequired) + private $column.javaType $column.javaField; + + #end + #end +#end +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm new file mode 100644 index 0000000..2926740 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm @@ -0,0 +1,15 @@ +package ${packageName}.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import ${packageName}.domain.${ClassName}; + +/** + * ${functionName}Mapper接口 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/query.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/query.java.vm new file mode 100644 index 0000000..0df060c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/query.java.vm @@ -0,0 +1,62 @@ +package ${packageName}.domain.req; + +#foreach ($import in $importList) +import ${import}; +#end +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +#if($table.crud) +import com.ruoyi.common.core.web.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.web.domain.TreeEntity; +#end + +/** + * ${functionName}对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "${ClassName}QueryReq", description = "${functionName}") +public class ${ClassName}QueryReq extends ${Entity} { + + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.isQuery == '1') + /** $column.columnComment */ +#if($column.list) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + #end +#end +#if($column.javaField == $pkColumn.javaField) + @TableId(value = "${pkColumn.javaField}",type = IdType.AUTO) +#end + @ApiModelProperty(name = "${column.columnComment}", value = "${column.columnComment}") + private $column.javaType $column.javaField; + +#end +#end +#end +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/save.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/save.java.vm new file mode 100644 index 0000000..ad8fa1e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/save.java.vm @@ -0,0 +1,64 @@ +package ${packageName}.domain.req; + +#foreach ($import in $importList) +import ${import}; +#end +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +#if($table.crud) +import com.ruoyi.common.core.web.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.web.domain.TreeEntity; +#end + +/** + * ${functionName}对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud) + #set($Entity="BaseEntity") +#elseif($table.tree) + #set($Entity="TreeEntity") +#end +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "${ClassName}SaveReq", description = "${functionName}") +public class ${ClassName}SaveReq extends ${Entity} { + + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) + #if(!$table.isSuperColumn($column.javaField)) + #if($column.isInsert == '1') + /** $column.columnComment */ + #if($column.list) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + #end + #end + + #set($isRequired='') + #if($column.isRequired == '1') + #set($isRequired=', required = true') + #end + @ApiModelProperty(name = "${column.columnComment}", value = "${column.columnComment}"$isRequired) + private $column.javaType $column.javaField; + + #end + #end +#end +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm new file mode 100644 index 0000000..89bbdf4 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm @@ -0,0 +1,22 @@ +package ${packageName}.service; + +import java.util.List; +import ${packageName}.domain.${ClassName}; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * ${functionName}Service接口 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Service extends IService<${ClassName}> { + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName}集合 + */ + public List<${ClassName}> list(${ClassName} ${className}); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm new file mode 100644 index 0000000..6fb04ed --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm @@ -0,0 +1,76 @@ +package ${packageName}.service.impl; + +import java.util.List; + +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.${ClassName}Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * ${functionName}Service业务层处理 + * + * @author ${author} + * @date ${datetime} + */ +@Slf4j +@Service +public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements ${ClassName}Service { + + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> list(${ClassName} ${className}) { + LambdaQueryWrapper<${ClassName}> queryWrapper = new LambdaQueryWrapper<>(); +#foreach($column in $columns) + #set($queryType=$column.queryType) + #set($javaField=$column.javaField) + #set($JavaField=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + + #if($column.query) + #if($queryType == "EQ") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.eq(${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "NE") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.ne(${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "GT") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.gt(${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "GTE") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.ge(${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "LT") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.lt()${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "LTE") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.le()${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "LIKE") + if (ObjUtils.notNull(${className}.get$JavaField())){ + queryWrapper.like(${ClassName}::get$JavaField, ${className}.get$JavaField()); + } + #elseif($queryType == "BETWEEN") + if (ObjUtils.notChildNull(${className}.getBetween("$JavaField"))){ + queryWrapper.between(${ClassName}::get$JavaField, ${className}.getBeginParam("$JavaField"),${className}.getEndParam("$JavaField")); + } + #end + #end +#end + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/js/api.js.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/js/api.js.vm new file mode 100644 index 0000000..9f6bae9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/js/api.js.vm @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询${functionName}列表 +export function list${BusinessName}(query) { + return request({ + url: '/${moduleName}/${businessName}/list', + method: 'get', + params: query + }) +} + +// 查询${functionName}详细 +export function get${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'get' + }) +} + +// 新增${functionName} +export function add${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'post', + data: data + }) +} + +// 修改${functionName} +export function update${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}/'+data.${pkColumn.javaField}, + method: 'put', + data: data + }) +} + +// 删除${functionName} +export function del${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'delete' + }) +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/sql/sql.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/sql/sql.vm new file mode 100644 index 0000000..787f1db --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/sql/sql.vm @@ -0,0 +1,22 @@ +-- 菜单 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 1, sysdate(), null, null, '${functionName}菜单'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 1, sysdate(), null, null, ''); \ No newline at end of file diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm new file mode 100644 index 0000000..4819c2a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm @@ -0,0 +1,505 @@ + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm new file mode 100644 index 0000000..ac7b661 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm @@ -0,0 +1,493 @@ + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm new file mode 100644 index 0000000..7bbd2fc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm @@ -0,0 +1,474 @@ + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm new file mode 100644 index 0000000..8b25665 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm @@ -0,0 +1,590 @@ + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt new file mode 100644 index 0000000..8ba0f0a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt @@ -0,0 +1 @@ +���ʹ�õ���MuYu-Cloud-Vue3ǰ�ˣ���ô��Ҫ����һ�´�Ŀ¼��ģ��index.vue.vm��index-tree.vue.vm�ļ����ϼ�vueĿ¼�� diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm new file mode 100644 index 0000000..6b49aba --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm @@ -0,0 +1,16 @@ + + + + + +#foreach ($column in $columns) + +#end + + + + select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/pom.xml new file mode 100644 index 0000000..7436075 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/pom.xml @@ -0,0 +1,108 @@ + + + + com.muyu + ruoyi-modules + 3.6.3 + + 4.0.0 + + ruoyi-modules-job + + + muyu-modules-job定时任务 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + org.quartz-scheduler + quartz + + + com.mchange + c3p0 + + + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/MuYuJobApplication.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/MuYuJobApplication.java new file mode 100644 index 0000000..a25d509 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/MuYuJobApplication.java @@ -0,0 +1,22 @@ +package com.ruoyi.job; + +import com.ruoyi.common.security.annotation.EnableCustomConfig; +import com.ruoyi.common.security.annotation.EnableMyFeignClients; +import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 定时任务 + * + * @author muyu + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class MuYuJobApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuJobApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/ScheduleConfig.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/ScheduleConfig.java new file mode 100644 index 0000000..e2edda4 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/ScheduleConfig.java @@ -0,0 +1,57 @@ +//package com.muyu.job.config; +// +//import java.util.Properties; +//import javax.sql.DataSource; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.quartz.SchedulerFactoryBean; +// +///** +// * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) +// * +// * @author muyu +// */ +//@Configuration +//public class ScheduleConfig +//{ +// @Bean +// public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) +// { +// SchedulerFactoryBean factory = new SchedulerFactoryBean(); +// factory.setDataSource(dataSource); +// +// // quartz参数 +// Properties prop = new Properties(); +// prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); +// prop.put("org.quartz.scheduler.instanceId", "AUTO"); +// // 线程池配置 +// prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); +// prop.put("org.quartz.threadPool.threadCount", "20"); +// prop.put("org.quartz.threadPool.threadPriority", "5"); +// // JobStore配置 +// prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); +// // 集群配置 +// prop.put("org.quartz.jobStore.isClustered", "true"); +// prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); +// prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); +// prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); +// +// // sqlserver 启用 +// // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); +// prop.put("org.quartz.jobStore.misfireThreshold", "12000"); +// prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); +// factory.setQuartzProperties(prop); +// +// factory.setSchedulerName("RuoyiScheduler"); +// // 延时启动 +// factory.setStartupDelay(1); +// factory.setApplicationContextSchedulerContextKey("applicationContextKey"); +// // 可选,QuartzScheduler +// // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 +// factory.setOverwriteExistingJobs(true); +// // 设置自动启动,默认为true +// factory.setAutoStartup(true); +// +// return factory; +// } +//} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobController.java new file mode 100644 index 0000000..b029a42 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobController.java @@ -0,0 +1,149 @@ +package com.ruoyi.job.controller; + +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.exception.job.TaskException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.job.domain.SysJob; +import com.ruoyi.job.service.ISysJobService; +import com.ruoyi.job.util.CronUtils; +import com.ruoyi.job.util.ScheduleUtils; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 调度任务信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/job") +public class SysJobController extends BaseController { + @Autowired + private ISysJobService jobService; + + /** + * 查询定时任务列表 + */ + @RequiresPermissions("monitor:job:list") + @GetMapping("/list") + public Result> list (SysJob sysJob) { + startPage(); + List list = jobService.selectJobList(sysJob); + return getDataTable(list); + } + + /** + * 导出定时任务列表 + */ + @RequiresPermissions("monitor:job:export") + @Log(title = "定时任务", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export (HttpServletResponse response, SysJob sysJob) { + List list = jobService.selectJobList(sysJob); + ExcelUtil util = new ExcelUtil(SysJob.class); + util.exportExcel(response, list, "定时任务"); + } + + /** + * 获取定时任务详细信息 + */ + @RequiresPermissions("monitor:job:query") + @GetMapping(value = "/{jobId}") + public Result getInfo (@PathVariable("jobId") Long jobId) { + return success(jobService.selectJobById(jobId)); + } + + /** + * 新增定时任务 + */ + @RequiresPermissions("monitor:job:add") + @Log(title = "定时任务", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@RequestBody SysJob job) throws SchedulerException, TaskException { + if (!CronUtils.isValid(job.getCronExpression())) { + return error("新增任务'" + job.getJobName() + "'失败,Cron表达式不正确"); + } else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[]{Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS})) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[]{Constants.HTTP, Constants.HTTPS})) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串存在违规"); + } else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不在白名单内"); + } + job.setCreateBy(SecurityUtils.getUsername()); + return toAjax(jobService.insertJob(job)); + } + + /** + * 修改定时任务 + */ + @RequiresPermissions("monitor:job:edit") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@RequestBody SysJob job) throws SchedulerException, TaskException { + if (!CronUtils.isValid(job.getCronExpression())) { + return error("修改任务'" + job.getJobName() + "'失败,Cron表达式不正确"); + } else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[]{Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS})) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[]{Constants.HTTP, Constants.HTTPS})) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)'调用"); + } else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串存在违规"); + } else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不在白名单内"); + } + job.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(jobService.updateJob(job)); + } + + /** + * 定时任务状态修改 + */ + @RequiresPermissions("monitor:job:changeStatus") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public Result changeStatus (@RequestBody SysJob job) throws SchedulerException { + SysJob newJob = jobService.selectJobById(job.getJobId()); + newJob.setStatus(job.getStatus()); + return toAjax(jobService.changeStatus(newJob)); + } + + /** + * 定时任务立即执行一次 + */ + @RequiresPermissions("monitor:job:changeStatus") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping("/run") + public Result run (@RequestBody SysJob job) throws SchedulerException { + boolean result = jobService.run(job); + return result ? success() : error("任务不存在或已过期!"); + } + + /** + * 删除定时任务 + */ + @RequiresPermissions("monitor:job:remove") + @Log(title = "定时任务", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobIds}") + public Result remove (@PathVariable Long[] jobIds) throws SchedulerException, TaskException { + jobService.deleteJobByIds(jobIds); + return success(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobLogController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobLogController.java new file mode 100644 index 0000000..f859b5a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobLogController.java @@ -0,0 +1,81 @@ +package com.ruoyi.job.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.job.domain.SysJobLog; +import com.ruoyi.job.service.ISysJobLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 调度日志操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/job/log") +public class SysJobLogController extends BaseController { + @Autowired + private ISysJobLogService jobLogService; + + /** + * 查询定时任务调度日志列表 + */ + @RequiresPermissions("monitor:job:list") + @GetMapping("/list") + public Result> list (SysJobLog sysJobLog) { + startPage(); + List list = jobLogService.selectJobLogList(sysJobLog); + return getDataTable(list); + } + + /** + * 导出定时任务调度日志列表 + */ + @RequiresPermissions("monitor:job:export") + @Log(title = "任务调度日志", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export (HttpServletResponse response, SysJobLog sysJobLog) { + List list = jobLogService.selectJobLogList(sysJobLog); + ExcelUtil util = new ExcelUtil(SysJobLog.class); + util.exportExcel(response, list, "调度日志"); + } + + /** + * 根据调度编号获取详细信息 + */ + @RequiresPermissions("monitor:job:query") + @GetMapping(value = "/{jobLogId}") + public Result getInfo (@PathVariable Long jobLogId) { + return success(jobLogService.selectJobLogById(jobLogId)); + } + + /** + * 删除定时任务调度日志 + */ + @RequiresPermissions("monitor:job:remove") + @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobLogIds}") + public Result remove (@PathVariable Long[] jobLogIds) { + return toAjax(jobLogService.deleteJobLogByIds(jobLogIds)); + } + + /** + * 清空定时任务调度日志 + */ + @RequiresPermissions("monitor:job:remove") + @Log(title = "调度日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public Result clean () { + jobLogService.cleanJobLog(); + return success(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJob.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJob.java new file mode 100644 index 0000000..5657949 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJob.java @@ -0,0 +1,179 @@ +package com.ruoyi.job.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.constant.ScheduleConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.job.util.CronUtils; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 定时任务调度表 sys_job + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysJob extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 任务ID + */ + @Excel(name = "任务序号", cellType = ColumnType.NUMERIC) + private Long jobId; + + /** + * 任务名称 + */ + @Excel(name = "任务名称") + private String jobName; + + /** + * 任务组名 + */ + @Excel(name = "任务组名") + private String jobGroup; + + /** + * 调用目标字符串 + */ + @Excel(name = "调用目标字符串") + private String invokeTarget; + + /** + * cron执行表达式 + */ + @Excel(name = "执行表达式 ") + private String cronExpression; + + /** + * cron计划策略 + */ + @Excel(name = "计划策略 ", readConverterExp = "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行") + private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT; + + /** + * 是否并发执行(0允许 1禁止) + */ + @Excel(name = "并发执行", readConverterExp = "0=允许,1=禁止") + private String concurrent; + + /** + * 任务状态(0正常 1暂停) + */ + @Excel(name = "任务状态", readConverterExp = "0=正常,1=暂停") + private String status; + + public Long getJobId () { + return jobId; + } + + public void setJobId (Long jobId) { + this.jobId = jobId; + } + + @NotBlank(message = "任务名称不能为空") + @Size(min = 0, max = 64, message = "任务名称不能超过64个字符") + public String getJobName () { + return jobName; + } + + public void setJobName (String jobName) { + this.jobName = jobName; + } + + public String getJobGroup () { + return jobGroup; + } + + public void setJobGroup (String jobGroup) { + this.jobGroup = jobGroup; + } + + @NotBlank(message = "调用目标字符串不能为空") + @Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符") + public String getInvokeTarget () { + return invokeTarget; + } + + public void setInvokeTarget (String invokeTarget) { + this.invokeTarget = invokeTarget; + } + + @NotBlank(message = "Cron执行表达式不能为空") + @Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符") + public String getCronExpression () { + return cronExpression; + } + + public void setCronExpression (String cronExpression) { + this.cronExpression = cronExpression; + } + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + public Date getNextValidTime () { + if (StringUtils.isNotEmpty(cronExpression)) { + return CronUtils.getNextExecution(cronExpression); + } + return null; + } + + public String getMisfirePolicy () { + return misfirePolicy; + } + + public void setMisfirePolicy (String misfirePolicy) { + this.misfirePolicy = misfirePolicy; + } + + public String getConcurrent () { + return concurrent; + } + + public void setConcurrent (String concurrent) { + this.concurrent = concurrent; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("jobId", getJobId()) + .append("jobName", getJobName()) + .append("jobGroup", getJobGroup()) + .append("cronExpression", getCronExpression()) + .append("nextValidTime", getNextValidTime()) + .append("misfirePolicy", getMisfirePolicy()) + .append("concurrent", getConcurrent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJobLog.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJobLog.java new file mode 100644 index 0000000..2239702 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJobLog.java @@ -0,0 +1,165 @@ +package com.ruoyi.job.domain; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 定时任务调度日志表 sys_job_log + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysJobLog extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @Excel(name = "日志序号") + private Long jobLogId; + + /** + * 任务名称 + */ + @Excel(name = "任务名称") + private String jobName; + + /** + * 任务组名 + */ + @Excel(name = "任务组名") + private String jobGroup; + + /** + * 调用目标字符串 + */ + @Excel(name = "调用目标字符串") + private String invokeTarget; + + /** + * 日志信息 + */ + @Excel(name = "日志信息") + private String jobMessage; + + /** + * 执行状态(0正常 1失败) + */ + @Excel(name = "执行状态", readConverterExp = "0=正常,1=失败") + private String status; + + /** + * 异常信息 + */ + @Excel(name = "异常信息") + private String exceptionInfo; + + /** + * 开始时间 + */ + private Date startTime; + + /** + * 停止时间 + */ + private Date stopTime; + + public Long getJobLogId () { + return jobLogId; + } + + public void setJobLogId (Long jobLogId) { + this.jobLogId = jobLogId; + } + + public String getJobName () { + return jobName; + } + + public void setJobName (String jobName) { + this.jobName = jobName; + } + + public String getJobGroup () { + return jobGroup; + } + + public void setJobGroup (String jobGroup) { + this.jobGroup = jobGroup; + } + + public String getInvokeTarget () { + return invokeTarget; + } + + public void setInvokeTarget (String invokeTarget) { + this.invokeTarget = invokeTarget; + } + + public String getJobMessage () { + return jobMessage; + } + + public void setJobMessage (String jobMessage) { + this.jobMessage = jobMessage; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + public String getExceptionInfo () { + return exceptionInfo; + } + + public void setExceptionInfo (String exceptionInfo) { + this.exceptionInfo = exceptionInfo; + } + + public Date getStartTime () { + return startTime; + } + + public void setStartTime (Date startTime) { + this.startTime = startTime; + } + + public Date getStopTime () { + return stopTime; + } + + public void setStopTime (Date stopTime) { + this.stopTime = stopTime; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("jobLogId", getJobLogId()) + .append("jobName", getJobName()) + .append("jobGroup", getJobGroup()) + .append("jobMessage", getJobMessage()) + .append("status", getStatus()) + .append("exceptionInfo", getExceptionInfo()) + .append("startTime", getStartTime()) + .append("stopTime", getStopTime()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobLogMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobLogMapper.java new file mode 100644 index 0000000..d1ccd5c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobLogMapper.java @@ -0,0 +1,70 @@ +package com.ruoyi.job.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.job.domain.SysJobLog; + +import java.util.List; + +/** + * 调度任务日志信息 数据层 + * + * @author muyu + */ +public interface SysJobLogMapper extends BaseMapper { + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * + * @return 调度任务日志集合 + */ + public List selectJobLogList (SysJobLog jobLog); + + /** + * 查询所有调度任务日志 + * + * @return 调度任务日志列表 + */ + public List selectJobLogAll (); + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * + * @return 调度任务日志对象信息 + */ + public SysJobLog selectJobLogById (Long jobLogId); + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + * + * @return 结果 + */ + public int insertJobLog (SysJobLog jobLog); + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的数据ID + * + * @return 结果 + */ + public int deleteJobLogByIds (Long[] logIds); + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + * + * @return 结果 + */ + public int deleteJobLogById (Long jobId); + + /** + * 清空任务日志 + */ + public void cleanJobLog (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobMapper.java new file mode 100644 index 0000000..bdf83ff --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobMapper.java @@ -0,0 +1,74 @@ +package com.ruoyi.job.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.job.domain.SysJob; + +import java.util.List; + +/** + * 调度任务信息 数据层 + * + * @author muyu + */ +public interface SysJobMapper extends BaseMapper { + /** + * 查询调度任务日志集合 + * + * @param job 调度信息 + * + * @return 操作日志集合 + */ + public List selectJobList (SysJob job); + + /** + * 查询所有调度任务 + * + * @return 调度任务列表 + */ + public List selectJobAll (); + + /** + * 通过调度ID查询调度任务信息 + * + * @param jobId 调度ID + * + * @return 角色对象信息 + */ + public SysJob selectJobById (Long jobId); + + /** + * 通过调度ID删除调度任务信息 + * + * @param jobId 调度ID + * + * @return 结果 + */ + public int deleteJobById (Long jobId); + + /** + * 批量删除调度任务信息 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteJobByIds (Long[] ids); + + /** + * 修改调度任务信息 + * + * @param job 调度任务信息 + * + * @return 结果 + */ + public int updateJob (SysJob job); + + /** + * 新增调度任务信息 + * + * @param job 调度任务信息 + * + * @return 结果 + */ + public int insertJob (SysJob job); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobLogService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobLogService.java new file mode 100644 index 0000000..cfb3b41 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobLogService.java @@ -0,0 +1,60 @@ +package com.ruoyi.job.service; + +import com.ruoyi.job.domain.SysJobLog; + +import java.util.List; + +/** + * 定时任务调度日志信息信息 服务层 + * + * @author muyu + */ +public interface ISysJobLogService { + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * + * @return 调度任务日志集合 + */ + public List selectJobLogList (SysJobLog jobLog); + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * + * @return 调度任务日志对象信息 + */ + public SysJobLog selectJobLogById (Long jobLogId); + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + */ + public void addJobLog (SysJobLog jobLog); + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的日志ID + * + * @return 结果 + */ + public int deleteJobLogByIds (Long[] logIds); + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + * + * @return 结果 + */ + public int deleteJobLogById (Long jobId); + + /** + * 清空任务日志 + */ + public void cleanJobLog (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobService.java new file mode 100644 index 0000000..b3de1c5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobService.java @@ -0,0 +1,113 @@ +package com.ruoyi.job.service; + +import com.ruoyi.common.core.exception.job.TaskException; +import com.ruoyi.job.domain.SysJob; +import org.quartz.SchedulerException; + +import java.util.List; + +/** + * 定时任务调度信息信息 服务层 + * + * @author muyu + */ +public interface ISysJobService { + /** + * 获取quartz调度器的计划任务 + * + * @param job 调度信息 + * + * @return 调度任务集合 + */ + public List selectJobList (SysJob job); + + /** + * 通过调度任务ID查询调度信息 + * + * @param jobId 调度任务ID + * + * @return 调度任务对象信息 + */ + public SysJob selectJobById (Long jobId); + + /** + * 暂停任务 + * + * @param job 调度信息 + * + * @return 结果 + */ + public int pauseJob (SysJob job) throws SchedulerException; + + /** + * 恢复任务 + * + * @param job 调度信息 + * + * @return 结果 + */ + public int resumeJob (SysJob job) throws SchedulerException; + + /** + * 删除任务后,所对应的trigger也将被删除 + * + * @param job 调度信息 + * + * @return 结果 + */ + public int deleteJob (SysJob job) throws SchedulerException; + + /** + * 批量删除调度信息 + * + * @param jobIds 需要删除的任务ID + * + * @return 结果 + */ + public void deleteJobByIds (Long[] jobIds) throws SchedulerException; + + /** + * 任务调度状态修改 + * + * @param job 调度信息 + * + * @return 结果 + */ + public int changeStatus (SysJob job) throws SchedulerException; + + /** + * 立即运行任务 + * + * @param job 调度信息 + * + * @return 结果 + */ + public boolean run (SysJob job) throws SchedulerException; + + /** + * 新增任务 + * + * @param job 调度信息 + * + * @return 结果 + */ + public int insertJob (SysJob job) throws SchedulerException, TaskException; + + /** + * 更新任务 + * + * @param job 调度信息 + * + * @return 结果 + */ + public int updateJob (SysJob job) throws SchedulerException, TaskException; + + /** + * 校验cron表达式是否有效 + * + * @param cronExpression 表达式 + * + * @return 结果 + */ + public boolean checkCronExpressionIsValid (String cronExpression); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobLogServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobLogServiceImpl.java new file mode 100644 index 0000000..cf0af1f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobLogServiceImpl.java @@ -0,0 +1,83 @@ +package com.ruoyi.job.service; + +import com.ruoyi.job.domain.SysJobLog; +import com.ruoyi.job.mapper.SysJobLogMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 定时任务调度日志信息 服务层 + * + * @author muyu + */ +@Service +public class SysJobLogServiceImpl implements ISysJobLogService { + @Autowired + private SysJobLogMapper jobLogMapper; + + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * + * @return 调度任务日志集合 + */ + @Override + public List selectJobLogList (SysJobLog jobLog) { + return jobLogMapper.selectJobLogList(jobLog); + } + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * + * @return 调度任务日志对象信息 + */ + @Override + public SysJobLog selectJobLogById (Long jobLogId) { + return jobLogMapper.selectJobLogById(jobLogId); + } + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + */ + @Override + public void addJobLog (SysJobLog jobLog) { + jobLogMapper.insertJobLog(jobLog); + } + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的数据ID + * + * @return 结果 + */ + @Override + public int deleteJobLogByIds (Long[] logIds) { + return jobLogMapper.deleteJobLogByIds(logIds); + } + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + */ + @Override + public int deleteJobLogById (Long jobId) { + return jobLogMapper.deleteJobLogById(jobId); + } + + /** + * 清空任务日志 + */ + @Override + public void cleanJobLog () { + jobLogMapper.cleanJobLog(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobServiceImpl.java new file mode 100644 index 0000000..a057d69 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobServiceImpl.java @@ -0,0 +1,239 @@ +package com.ruoyi.job.service; + +import com.ruoyi.common.core.constant.ScheduleConstants; +import com.ruoyi.common.core.exception.job.TaskException; +import com.ruoyi.job.domain.SysJob; +import com.ruoyi.job.mapper.SysJobMapper; +import com.ruoyi.job.util.CronUtils; +import com.ruoyi.job.util.ScheduleUtils; +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import java.util.List; + +/** + * 定时任务调度信息 服务层 + * + * @author muyu + */ +@Service +public class SysJobServiceImpl implements ISysJobService { + @Autowired + private Scheduler scheduler; + + @Autowired + private SysJobMapper jobMapper; + + /** + * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据) + */ + @PostConstruct + public void init () throws SchedulerException, TaskException { + scheduler.clear(); + List jobList = jobMapper.selectJobAll(); + for (SysJob job : jobList) { + ScheduleUtils.createScheduleJob(scheduler, job); + } + } + + /** + * 获取quartz调度器的计划任务列表 + * + * @param job 调度信息 + * + * @return + */ + @Override + public List selectJobList (SysJob job) { + return jobMapper.selectJobList(job); + } + + /** + * 通过调度任务ID查询调度信息 + * + * @param jobId 调度任务ID + * + * @return 调度任务对象信息 + */ + @Override + public SysJob selectJobById (Long jobId) { + return jobMapper.selectJobById(jobId); + } + + /** + * 暂停任务 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int pauseJob (SysJob job) throws SchedulerException { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 恢复任务 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int resumeJob (SysJob job) throws SchedulerException { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.NORMAL.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) { + scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 删除任务后,所对应的trigger也将被删除 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteJob (SysJob job) throws SchedulerException { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + int rows = jobMapper.deleteJobById(jobId); + if (rows > 0) { + scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 批量删除调度信息 + * + * @param jobIds 需要删除的任务ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteJobByIds (Long[] jobIds) throws SchedulerException { + for (Long jobId : jobIds) { + SysJob job = jobMapper.selectJobById(jobId); + deleteJob(job); + } + } + + /** + * 任务调度状态修改 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int changeStatus (SysJob job) throws SchedulerException { + int rows = 0; + String status = job.getStatus(); + if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) { + rows = resumeJob(job); + } else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) { + rows = pauseJob(job); + } + return rows; + } + + /** + * 立即运行任务 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean run (SysJob job) throws SchedulerException { + boolean result = false; + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + SysJob properties = selectJobById(job.getJobId()); + // 参数 + JobDataMap dataMap = new JobDataMap(); + dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties); + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) { + result = true; + scheduler.triggerJob(jobKey, dataMap); + } + return result; + } + + /** + * 新增任务 + * + * @param job 调度信息 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertJob (SysJob job) throws SchedulerException, TaskException { + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.insertJob(job); + if (rows > 0) { + ScheduleUtils.createScheduleJob(scheduler, job); + } + return rows; + } + + /** + * 更新任务的时间表达式 + * + * @param job 调度信息 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateJob (SysJob job) throws SchedulerException, TaskException { + SysJob properties = selectJobById(job.getJobId()); + int rows = jobMapper.updateJob(job); + if (rows > 0) { + updateSchedulerJob(job, properties.getJobGroup()); + } + return rows; + } + + /** + * 更新任务 + * + * @param job 任务对象 + * @param jobGroup 任务组名 + */ + public void updateSchedulerJob (SysJob job, String jobGroup) throws SchedulerException, TaskException { + Long jobId = job.getJobId(); + // 判断是否存在 + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(jobKey); + } + ScheduleUtils.createScheduleJob(scheduler, job); + } + + /** + * 校验cron表达式是否有效 + * + * @param cronExpression 表达式 + * + * @return 结果 + */ + @Override + public boolean checkCronExpressionIsValid (String cronExpression) { + return CronUtils.isValid(cronExpression); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/MyTask.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/MyTask.java new file mode 100644 index 0000000..b41e80c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/MyTask.java @@ -0,0 +1,24 @@ +package com.ruoyi.job.task; + +import com.ruoyi.common.core.utils.StringUtils; +import org.springframework.stereotype.Component; + +/** + * 定时任务调度测试 + * + * @author muyu + */ +@Component("myTask") +public class MyTask { + public void ryMultipleParams (String s, Boolean b, Long l, Double d, Integer i) { + System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); + } + + public void ryParams (String params) { + System.out.println("执行有参方法:" + params); + } + + public void ryNoParams () { + System.out.println("执行无参方法"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/AbstractQuartzJob.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/AbstractQuartzJob.java new file mode 100644 index 0000000..283dc92 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/AbstractQuartzJob.java @@ -0,0 +1,97 @@ +package com.ruoyi.job.util; + +import com.ruoyi.common.core.constant.ScheduleConstants; +import com.ruoyi.common.core.utils.ExceptionUtil; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.bean.BeanUtils; +import com.ruoyi.job.domain.SysJob; +import com.ruoyi.job.domain.SysJobLog; +import com.ruoyi.job.service.ISysJobLogService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; + +/** + * 抽象quartz调用 + * + * @author muyu + */ +public abstract class AbstractQuartzJob implements Job { + private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class); + + /** + * 线程本地变量 + */ + private static ThreadLocal threadLocal = new ThreadLocal<>(); + + @Override + public void execute (JobExecutionContext context) throws JobExecutionException { + SysJob sysJob = new SysJob(); + BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES)); + try { + before(context, sysJob); + if (sysJob != null) { + doExecute(context, sysJob); + } + after(context, sysJob, null); + } catch (Exception e) { + log.error("任务执行异常 - :", e); + after(context, sysJob, e); + } + } + + /** + * 执行前 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + */ + protected void before (JobExecutionContext context, SysJob sysJob) { + threadLocal.set(new Date()); + } + + /** + * 执行后 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + */ + protected void after (JobExecutionContext context, SysJob sysJob, Exception e) { + Date startTime = threadLocal.get(); + threadLocal.remove(); + + final SysJobLog sysJobLog = new SysJobLog(); + sysJobLog.setJobName(sysJob.getJobName()); + sysJobLog.setJobGroup(sysJob.getJobGroup()); + sysJobLog.setInvokeTarget(sysJob.getInvokeTarget()); + sysJobLog.setStartTime(startTime); + sysJobLog.setStopTime(new Date()); + long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime(); + sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒"); + if (e != null) { + sysJobLog.setStatus("1"); + String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000); + sysJobLog.setExceptionInfo(errorMsg); + } else { + sysJobLog.setStatus("0"); + } + + // 写入数据库当中 + SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); + } + + /** + * 执行方法,由子类重载 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + * + * @throws Exception 执行过程中的异常 + */ + protected abstract void doExecute (JobExecutionContext context, SysJob sysJob) throws Exception; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/CronUtils.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/CronUtils.java new file mode 100644 index 0000000..5716ee9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/CronUtils.java @@ -0,0 +1,56 @@ +package com.ruoyi.job.util; + +import org.quartz.CronExpression; + +import java.text.ParseException; +import java.util.Date; + +/** + * cron表达式工具类 + * + * @author muyu + */ +public class CronUtils { + /** + * 返回一个布尔值代表一个给定的Cron表达式的有效性 + * + * @param cronExpression Cron表达式 + * + * @return boolean 表达式是否有效 + */ + public static boolean isValid (String cronExpression) { + return CronExpression.isValidExpression(cronExpression); + } + + /** + * 返回一个字符串值,表示该消息无效Cron表达式给出有效性 + * + * @param cronExpression Cron表达式 + * + * @return String 无效时返回表达式错误描述,如果有效返回null + */ + public static String getInvalidMessage (String cronExpression) { + try { + new CronExpression(cronExpression); + return null; + } catch (ParseException pe) { + return pe.getMessage(); + } + } + + /** + * 返回下一个执行时间根据给定的Cron表达式 + * + * @param cronExpression Cron表达式 + * + * @return Date 下次Cron表达式执行时间 + */ + public static Date getNextExecution (String cronExpression) { + try { + CronExpression cron = new CronExpression(cronExpression); + return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis())); + } catch (ParseException e) { + throw new IllegalArgumentException(e.getMessage()); + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java new file mode 100644 index 0000000..0f2f029 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java @@ -0,0 +1,165 @@ +package com.ruoyi.job.util; + +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.job.domain.SysJob; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.LinkedList; +import java.util.List; + +/** + * 任务执行工具 + * + * @author muyu + */ +public class JobInvokeUtil { + /** + * 执行方法 + * + * @param sysJob 系统任务 + */ + public static void invokeMethod (SysJob sysJob) throws Exception { + String invokeTarget = sysJob.getInvokeTarget(); + String beanName = getBeanName(invokeTarget); + String methodName = getMethodName(invokeTarget); + List methodParams = getMethodParams(invokeTarget); + + if (!isValidClassName(beanName)) { + Object bean = SpringUtils.getBean(beanName); + invokeMethod(bean, methodName, methodParams); + } else { + Object bean = Class.forName(beanName).getDeclaredConstructor().newInstance(); + invokeMethod(bean, methodName, methodParams); + } + } + + /** + * 调用任务方法 + * + * @param bean 目标对象 + * @param methodName 方法名称 + * @param methodParams 方法参数 + */ + private static void invokeMethod (Object bean, String methodName, List methodParams) + throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, + InvocationTargetException { + if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) { + Method method = bean.getClass().getMethod(methodName, getMethodParamsType(methodParams)); + method.invoke(bean, getMethodParamsValue(methodParams)); + } else { + Method method = bean.getClass().getMethod(methodName); + method.invoke(bean); + } + } + + /** + * 校验是否为为class包名 + * + * @param invokeTarget 名称 + * + * @return true是 false否 + */ + public static boolean isValidClassName (String invokeTarget) { + return StringUtils.countMatches(invokeTarget, ".") > 1; + } + + /** + * 获取bean名称 + * + * @param invokeTarget 目标字符串 + * + * @return bean名称 + */ + public static String getBeanName (String invokeTarget) { + String beanName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringBeforeLast(beanName, "."); + } + + /** + * 获取bean方法 + * + * @param invokeTarget 目标字符串 + * + * @return method方法 + */ + public static String getMethodName (String invokeTarget) { + String methodName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringAfterLast(methodName, "."); + } + + /** + * 获取method方法参数相关列表 + * + * @param invokeTarget 目标字符串 + * + * @return method方法相关参数列表 + */ + public static List getMethodParams (String invokeTarget) { + String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")"); + if (StringUtils.isEmpty(methodStr)) { + return null; + } + String[] methodParams = methodStr.split(",(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)"); + List classs = new LinkedList<>(); + for (int i = 0 ; i < methodParams.length ; i++) { + String str = StringUtils.trimToEmpty(methodParams[i]); + // String字符串类型,以'或"开头 + if (StringUtils.startsWithAny(str, "'", "\"")) { + classs.add(new Object[]{StringUtils.substring(str, 1, str.length() - 1), String.class}); + } + // boolean布尔类型,等于true或者false + else if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str)) { + classs.add(new Object[]{Boolean.valueOf(str), Boolean.class}); + } + // long长整形,以L结尾 + else if (StringUtils.endsWith(str, "L")) { + classs.add(new Object[]{Long.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Long.class}); + } + // double浮点类型,以D结尾 + else if (StringUtils.endsWith(str, "D")) { + classs.add(new Object[]{Double.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Double.class}); + } + // 其他类型归类为整形 + else { + classs.add(new Object[]{Integer.valueOf(str), Integer.class}); + } + } + return classs; + } + + /** + * 获取参数类型 + * + * @param methodParams 参数相关列表 + * + * @return 参数类型列表 + */ + public static Class[] getMethodParamsType (List methodParams) { + Class[] classs = new Class[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) { + classs[index] = (Class) os[1]; + index++; + } + return classs; + } + + /** + * 获取参数值 + * + * @param methodParams 参数相关列表 + * + * @return 参数值列表 + */ + public static Object[] getMethodParamsValue (List methodParams) { + Object[] classs = new Object[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) { + classs[index] = (Object) os[0]; + index++; + } + return classs; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzDisallowConcurrentExecution.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzDisallowConcurrentExecution.java new file mode 100644 index 0000000..1eee365 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzDisallowConcurrentExecution.java @@ -0,0 +1,18 @@ +package com.ruoyi.job.util; + +import com.ruoyi.job.domain.SysJob; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; + +/** + * 定时任务处理(禁止并发执行) + * + * @author muyu + */ +@DisallowConcurrentExecution +public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob { + @Override + protected void doExecute (JobExecutionContext context, SysJob sysJob) throws Exception { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzJobExecution.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzJobExecution.java new file mode 100644 index 0000000..f2562a2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzJobExecution.java @@ -0,0 +1,16 @@ +package com.ruoyi.job.util; + +import com.ruoyi.job.domain.SysJob; +import org.quartz.JobExecutionContext; + +/** + * 定时任务处理(允许并发执行) + * + * @author muyu + */ +public class QuartzJobExecution extends AbstractQuartzJob { + @Override + protected void doExecute (JobExecutionContext context, SysJob sysJob) throws Exception { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ScheduleUtils.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ScheduleUtils.java new file mode 100644 index 0000000..35b7390 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ScheduleUtils.java @@ -0,0 +1,121 @@ +package com.ruoyi.job.util; + +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.ScheduleConstants; +import com.ruoyi.common.core.exception.job.TaskException; +import com.ruoyi.common.core.exception.job.TaskException.Code; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.job.domain.SysJob; +import org.quartz.*; + +/** + * 定时任务工具类 + * + * @author muyu + */ +public class ScheduleUtils { + /** + * 得到quartz任务类 + * + * @param sysJob 执行计划 + * + * @return 具体执行任务类 + */ + private static Class getQuartzJobClass (SysJob sysJob) { + boolean isConcurrent = "0".equals(sysJob.getConcurrent()); + return isConcurrent ? QuartzJobExecution.class : QuartzDisallowConcurrentExecution.class; + } + + /** + * 构建任务触发对象 + */ + public static TriggerKey getTriggerKey (Long jobId, String jobGroup) { + return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 构建任务键对象 + */ + public static JobKey getJobKey (Long jobId, String jobGroup) { + return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 创建定时任务 + */ + public static void createScheduleJob (Scheduler scheduler, SysJob job) throws SchedulerException, TaskException { + Class jobClass = getQuartzJobClass(job); + // 构建job信息 + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); + + // 表达式调度构建器 + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); + cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup)) + .withSchedule(cronScheduleBuilder).build(); + + // 放入参数,运行时的方法可以获取 + jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job); + + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + + // 判断任务是否过期 + if (StringUtils.isNotNull(CronUtils.getNextExecution(job.getCronExpression()))) { + // 执行调度任务 + scheduler.scheduleJob(jobDetail, trigger); + } + + // 暂停任务 + if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue())) { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + } + + /** + * 设置定时任务策略 + */ + public static CronScheduleBuilder handleCronScheduleMisfirePolicy (SysJob job, CronScheduleBuilder cb) + throws TaskException { + switch (job.getMisfirePolicy()) { + case ScheduleConstants.MISFIRE_DEFAULT: + return cb; + case ScheduleConstants.MISFIRE_IGNORE_MISFIRES: + return cb.withMisfireHandlingInstructionIgnoreMisfires(); + case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED: + return cb.withMisfireHandlingInstructionFireAndProceed(); + case ScheduleConstants.MISFIRE_DO_NOTHING: + return cb.withMisfireHandlingInstructionDoNothing(); + default: + throw new TaskException("The task misfire policy '" + job.getMisfirePolicy() + + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR); + } + } + + /** + * 检查包名是否为白名单配置 + * + * @param invokeTarget 目标字符串 + * + * @return 结果 + */ + public static boolean whiteList (String invokeTarget) { + String packageName = StringUtils.substringBefore(invokeTarget, "("); + int count = StringUtils.countMatches(packageName, "."); + if (count > 1) { + return StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR); + } + Object obj = SpringUtils.getBean(StringUtils.split(invokeTarget, ".")[0]); + String beanPackageName = obj.getClass().getPackage().getName(); + return StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_WHITELIST_STR) + && !StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..033e26d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml @@ -0,0 +1,25 @@ +# Tomcat +server: + port: 9203 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-job + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/logback.xml new file mode 100644 index 0000000..3bf6f3d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobLogMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobLogMapper.xml new file mode 100644 index 0000000..1063c75 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobLogMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + select job_log_id, + job_name, + job_group, + invoke_target, + job_message, + status, + exception_info, + create_time + from sys_job_log + + + + + + + + + + delete + from sys_job_log + where job_log_id = #{jobLogId} + + + + delete from sys_job_log where job_log_id in + + #{jobLogId} + + + + + truncate table sys_job_log + + + + insert into sys_job_log( + job_log_id, + job_name, + job_group, + invoke_target, + job_message, + status, + exception_info, + create_time + )values( + #{jobLogId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{jobMessage}, + #{status}, + #{exceptionInfo}, + sysdate() + ) + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobMapper.xml new file mode 100644 index 0000000..1980cec --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobMapper.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + select job_id, + job_name, + job_group, + invoke_target, + cron_expression, + misfire_policy, + concurrent, + status, + create_by, + create_time, + remark + from sys_job + + + + + + + + + + delete + from sys_job + where job_id = #{jobId} + + + + delete from sys_job where job_id in + + #{jobId} + + + + + update sys_job + + job_name = #{jobName}, + job_group = #{jobGroup}, + invoke_target = #{invokeTarget}, + cron_expression = #{cronExpression}, + misfire_policy = #{misfirePolicy}, + concurrent = #{concurrent}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where job_id = #{jobId} + + + + insert into sys_job( + job_id, + job_name, + job_group, + invoke_target, + cron_expression, + misfire_policy, + concurrent, + status, + remark, + create_by, + create_time + )values( + #{jobId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{cronExpression}, + #{misfirePolicy}, + #{concurrent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/pom.xml new file mode 100644 index 0000000..02f75f6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + com.muyu + ruoyi-modules + 3.6.3 + + + ruoyi-modules-product + pom + + + ruoyi-product-cache + + + + 17 + 17 + UTF-8 + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/pom.xml new file mode 100644 index 0000000..9ee467d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.muyu + ruoyi-modules-product + 3.6.3 + + + ruoyi-product-cache + + + 17 + 17 + UTF-8 + + + + + + + com.muyu + muyu-common-cache + + + + + com.muyu + ruoyi-product-common + 3.6.3 + + + \ No newline at end of file diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java new file mode 100644 index 0000000..baeeed6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java @@ -0,0 +1,61 @@ +package com.muyu.product.cache; + +import com.muyu.common.cache.abs.CacheAbs; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.product.domain.ProductInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +/** + * @author DongZl + * @description: 商品缓存 + * @Date 2024-3-27 下午 03:30 + */ +@Component +public class ProjectInfoCache extends CacheAbs { + + @Autowired + private ProjectInfoData projectInfoData; + /** + * key前缀 + * + * @return key前缀 + */ + @Override + public String keyPre () { + return "project:info:"; + } + + /** + * 解码 + * + * @param redisKey 数据库键 + * + * @return ID + */ + @Override + public Long decode (String redisKey) { + return Convert.toLong(redisKey.replace(keyPre(),""), 0L); + } + + /** + * 从数据库获取数据 + * + * @param key ID + * + * @return 缓存对象 + */ + @Override + public ProductInfo getData (Long key) { + return projectInfoData.getData(key); + } + + /** + * 默认值 + */ + @Override + public ProductInfo defaultValue () { + return new ProductInfo(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java new file mode 100644 index 0000000..c33c0ad --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java @@ -0,0 +1,18 @@ +package com.muyu.product.cache; + +import com.ruoyi.product.domain.ProductInfo; + +/** + * @author DongZl + * @description: 缓存数据获取 + * @Date 2024-3-27 下午 03:34 + */ +public interface ProjectInfoData { + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + public ProductInfo getData (Long key); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/pom.xml new file mode 100644 index 0000000..ae1b14c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + com.muyu + ruoyi-modules + 3.6.3 + ../../pom.xml + + + ruoyi-product-common + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-common-core + + + com.muyu + muyu-common-security + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsAttributeInfoGroup.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsAttributeInfoGroup.java new file mode 100644 index 0000000..d481503 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsAttributeInfoGroup.java @@ -0,0 +1,61 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + +/** + * 属性与组中间对象 as_attribute_info_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("as_attribute_info_group") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AsAttributeInfoGroup", description = "属性与组中间") +public class AsAttributeInfoGroup extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 属性 */ + @Excel(name = "属性") + @ApiModelProperty(name = "属性", value = "属性", required = true) + private Long attributeId; + + /** 属性组 */ + @Excel(name = "属性组") + @ApiModelProperty(name = "属性组", value = "属性组", required = true) + private Long attributeGroupId; + + /** + * 添加构造器 + */ + public static AsAttributeInfoGroup saveBuild(Long attributeId, Long attributeGroupId, Supplier createBy){ + return AsAttributeInfoGroup.builder() + .attributeId(attributeId) + .attributeGroupId(attributeGroupId) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttribute.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttribute.java new file mode 100644 index 0000000..0ca8852 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttribute.java @@ -0,0 +1,66 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.product.domain.base.CategoryBase; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + +/** + * 品类属性中间对象 as_category_attribute + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("as_category_attribute") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AsCategoryAttribute", description = "品类属性中间") +public class AsCategoryAttribute extends BaseEntity implements CategoryBase { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 品类编号 */ + @Excel(name = "品类编号") + @ApiModelProperty(name = "品类编号", value = "品类编号", required = true) + private Long categoryId; + + /** 属性编号 */ + @Excel(name = "属性编号") + @ApiModelProperty(name = "属性编号", value = "属性编号", required = true) + private Long attributeId; + + /** + * 添加构造器 + */ + public static AsCategoryAttribute saveBuild(Long attributeId, Long categoryId, Supplier createBy) { + return AsCategoryAttribute.builder() + .categoryId(categoryId) + .attributeId(attributeId) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + @Override + public Long getBaseId() { + return this.attributeId; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttributeGroup.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttributeGroup.java new file mode 100644 index 0000000..bb08796 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryAttributeGroup.java @@ -0,0 +1,66 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.product.domain.base.CategoryBase; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + +/** + * 品类属性组中间对象 as_category_attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("as_category_attribute_group") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AsCategoryAttributeGroup", description = "品类属性组中间") +public class AsCategoryAttributeGroup extends BaseEntity implements CategoryBase { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 品类编号 */ + @Excel(name = "品类编号") + @ApiModelProperty(name = "品类编号", value = "品类编号", required = true) + private Long categoryId; + + /** 属性组编号 */ + @Excel(name = "属性组编号") + @ApiModelProperty(name = "属性组编号", value = "属性组编号", required = true) + private Long attributeGroupId; + + /** + * 添加构造器 + */ + public static AsCategoryAttributeGroup saveBuild(Long attributeGroupId, Long categoryId, Supplier createBy){ + return AsCategoryAttributeGroup.builder() + .categoryId(categoryId) + .attributeGroupId(attributeGroupId) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + @Override + public Long getBaseId() { + return this.attributeGroupId; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryBrand.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryBrand.java new file mode 100644 index 0000000..cf13579 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsCategoryBrand.java @@ -0,0 +1,66 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.product.domain.base.CategoryBase; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + +/** + * 品类品牌中间对象 as_category_brand + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("as_category_brand") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AsCategoryBrand", description = "品类品牌中间") +public class AsCategoryBrand extends BaseEntity implements CategoryBase { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 类目编号 */ + @Excel(name = "类目编号") + @ApiModelProperty(name = "类目编号", value = "类目编号", required = true) + private Long categoryId; + + /** 品牌编号 */ + @Excel(name = "品牌编号") + @ApiModelProperty(name = "品牌编号", value = "品牌编号", required = true) + private Long brandId; + + /** + * 添加构造器 + */ + public static AsCategoryBrand saveBuild(Long brandId, Long categoryId, Supplier createBy){ + return AsCategoryBrand.builder() + .categoryId(categoryId) + .brandId(brandId) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + @Override + public Long getBaseId() { + return this.brandId; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsSpecificationInfoGroup.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsSpecificationInfoGroup.java new file mode 100644 index 0000000..d48caff --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AsSpecificationInfoGroup.java @@ -0,0 +1,67 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.function.Supplier; +import java.util.Date; + +/** + * 规格与组中间对象 as_specification_info_group + * + * @author gtl + * @date 2024-03-08 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("as_specification_info_group") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AsSpecificationInfoGroup", description = "规格与组中间") +public class AsSpecificationInfoGroup extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 规格组 */ + @Excel(name = "规格组") + @ApiModelProperty(name = "规格组", value = "规格组", required = true) + private Long specificationGroupId; + + /** 规格 */ + @Excel(name = "规格") + @ApiModelProperty(name = "规格", value = "规格", required = true) + private Long specificationId; + + /** 规格值 */ + @Excel(name = "规格值") + @ApiModelProperty(name = "规格值", value = "规格值", required = true) + private String value; + + /** + * 添加构造器 + */ + public static AsSpecificationInfoGroup saveBuild(Long specificationGroupId,Long specificationId,String value,Supplier createBy){ + return AsSpecificationInfoGroup.builder() + .specificationGroupId(specificationGroupId) + .specificationId(specificationId) + .value(value) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeGroup.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeGroup.java new file mode 100644 index 0000000..e969880 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeGroup.java @@ -0,0 +1,88 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import com.ruoyi.common.security.utils.SecurityUtils; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.AttributeGroupQueryReq; +import com.ruoyi.product.domain.req.AttributeGroupSaveReq; +import com.ruoyi.product.domain.req.AttributeGroupEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.Date; + +/** + * 属性组对象 attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("attribute_group") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AttributeGroup", description = "属性组") +public class AttributeGroup extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性组编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "属性组编号", value = "属性组编号") + private Long id; + + /** 属性 */ + @Excel(name = "属性") + @ApiModelProperty(name = "属性", value = "属性", required = true) + private String name; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + @ApiModelProperty(name = "${column.columnComment}", value = "${column.columnComment}") + private String status; + + /** + * 查询构造器 + */ + public static AttributeGroup queryBuild( AttributeGroupQueryReq attributeGroupQueryReq){ + return AttributeGroup.builder() + .name(attributeGroupQueryReq.getName()) + .status(attributeGroupQueryReq.getStatus()) + .build(); + } + + /** + * 添加构造器 + */ + public static AttributeGroup saveBuild(AttributeGroupSaveReq attributeGroupSaveReq){ + return AttributeGroup.builder() + .name(attributeGroupSaveReq.getName()) + .status(attributeGroupSaveReq.getStatus()) + .createTime(new Date()) + .createBy(SecurityUtils.getUsername()) + .build(); + } + + /** + * 修改构造器 + */ + public static AttributeGroup editBuild(Long id, AttributeGroupEditReq attributeGroupEditReq){ + return AttributeGroup.builder() + .id(id) + .name(attributeGroupEditReq.getName()) + .status(attributeGroupEditReq.getStatus()) + .updateTime(new Date()) + .updateBy(SecurityUtils.getUsername()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeInfo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeInfo.java new file mode 100644 index 0000000..91af1ed --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/AttributeInfo.java @@ -0,0 +1,84 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.security.utils.SecurityUtils; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.AttributeInfoQueryReq; +import com.ruoyi.product.domain.req.AttributeInfoSaveReq; +import com.ruoyi.product.domain.req.AttributeInfoEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.util.Date; +import java.util.function.Supplier; + +/** + * 属性对象 attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("attribute_info") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "AttributeInfo", description = "属性") +public class AttributeInfo extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "属性编号", value = "属性编号") + private Long id; + + /** 属性名 */ + @Excel(name = "属性名") + @ApiModelProperty(name = "属性名", value = "属性名", required = true) + private String name; + + /** + * 查询构造器 + */ + public static AttributeInfo queryBuild( AttributeInfoQueryReq attributeInfoQueryReq){ + return AttributeInfo.builder() + .name(attributeInfoQueryReq.getName()) + .build(); + } + + /** + * 添加构造器 + */ + public static AttributeInfo saveBuild(AttributeInfoSaveReq attributeInfoSaveReq,Supplier createBy){ + return AttributeInfo.builder() + .name(attributeInfoSaveReq.getName()) + .remark(attributeInfoSaveReq.getRemark()) + .params(attributeInfoSaveReq.getParams()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + /** + * 修改构造器 + */ + public static AttributeInfo editBuild(Long id, AttributeInfoEditReq attributeInfoEditReq, Supplier updateBy){ + return AttributeInfo.builder() + .id(id) + .name(attributeInfoEditReq.getName()) + .remark(attributeInfoEditReq.getRemark()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/BrandInfo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/BrandInfo.java new file mode 100644 index 0000000..dd3430d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/BrandInfo.java @@ -0,0 +1,104 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.BrandInfoQueryReq; +import com.ruoyi.product.domain.req.BrandInfoSaveReq; +import com.ruoyi.product.domain.req.BrandInfoEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.function.Supplier; +import java.util.Date; + +/** + * 品牌对象 brand_info + * + * @author gtl + * @date 2024-03-07 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("brand_info") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "BrandInfo", description = "品牌") +public class BrandInfo extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 品牌编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "品牌编号", value = "品牌编号") + private Long id; + + /** 品牌名称 */ + @Excel(name = "品牌名称") + @ApiModelProperty(name = "品牌名称", value = "品牌名称", required = true) + private String name; + + /** 品牌logo */ + @Excel(name = "品牌logo") + @ApiModelProperty(name = "品牌logo", value = "品牌logo") + private String logo; + + /** 品牌状态 */ + @Excel(name = "品牌状态") + @ApiModelProperty(name = "品牌状态", value = "品牌状态", required = true) + private String status; + + /** 品牌简介 */ + @Excel(name = "品牌简介") + @ApiModelProperty(name = "品牌简介", value = "品牌简介") + private String intro; + + /** + * 查询构造器 + */ + public static BrandInfo queryBuild( BrandInfoQueryReq brandInfoQueryReq){ + return BrandInfo.builder() + .name(brandInfoQueryReq.getName()) + .status(brandInfoQueryReq.getStatus()) + .intro(brandInfoQueryReq.getIntro()) + .build(); + } + + /** + * 添加构造器 + */ + public static BrandInfo saveBuild(BrandInfoSaveReq brandInfoSaveReq,Supplier createBy){ + return BrandInfo.builder() + .name(brandInfoSaveReq.getName()) + .logo(brandInfoSaveReq.getLogo()) + .status(brandInfoSaveReq.getStatus()) + .intro(brandInfoSaveReq.getIntro()) + .remark(brandInfoSaveReq.getRemark()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + /** + * 修改构造器 + */ + public static BrandInfo editBuild(Long id, BrandInfoEditReq brandInfoEditReq, Supplier updateBy){ + return BrandInfo.builder() + .id(id) + .name(brandInfoEditReq.getName()) + .logo(brandInfoEditReq.getLogo()) + .status(brandInfoEditReq.getStatus()) + .intro(brandInfoEditReq.getIntro()) + .remark(brandInfoEditReq.getRemark()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/CategoryInfo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/CategoryInfo.java new file mode 100644 index 0000000..dbe6046 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/CategoryInfo.java @@ -0,0 +1,70 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.base.TreeBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.CategoryQueryReq; +import com.ruoyi.product.domain.req.CategorySaveReq; +import com.ruoyi.product.domain.req.CategoryEditReq; +import com.ruoyi.common.core.web.domain.TreeEntity; + +import java.util.Date; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("category_info") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "Category", description = "品类") +public class CategoryInfo extends TreeBaseEntity { + + private static final long serialVersionUID = 1L; + + /** 品类编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "品类编号", value = "品类编号") + private Long id; + + /** 品类名称 */ + @Excel(name = "品类名称") + @ApiModelProperty(name = "品类名称", value = "品类名称", required = true) + private String name; + + /** 状态 */ + @Excel(name = "状态") + @ApiModelProperty(name = "状态", value = "状态", required = true) + private String status; + + /** 品类简介 */ + @Excel(name = "品类简介") + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + + /** + * 查询构造器 + */ + public static CategoryInfo queryBuild(CategoryQueryReq categoryQueryReq){ + return CategoryInfo.builder() + .name(categoryQueryReq.getName()) + .status(categoryQueryReq.getStatus()) + .intro(categoryQueryReq.getIntro()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductAttributeInfo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductAttributeInfo.java new file mode 100644 index 0000000..01a8838 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductAttributeInfo.java @@ -0,0 +1,104 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.security.utils.SecurityUtils; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.ProductAttributeInfoQueryReq; +import com.ruoyi.product.domain.req.ProductAttributeInfoSaveReq; +import com.ruoyi.product.domain.req.ProductAttributeInfoEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.util.Date; + +/** + * 商品属性对象 product_attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("product_attribute_info") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "ProductAttributeInfo", description = "商品属性") +public class ProductAttributeInfo extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 商品 */ + @Excel(name = "商品") + @ApiModelProperty(name = "商品", value = "商品", required = true) + private Long productId; + + /** 属性组 */ + @Excel(name = "属性组") + @ApiModelProperty(name = "属性组", value = "属性组", required = true) + private Long attributeGroupId; + + /** 属性 */ + @Excel(name = "属性") + @ApiModelProperty(name = "属性", value = "属性", required = true) + private Long attributeId; + + /** 属性值 */ + @Excel(name = "属性值") + @ApiModelProperty(name = "属性值", value = "属性值", required = true) + private String value; + + /** + * 查询构造器 + */ + public static ProductAttributeInfo queryBuild( ProductAttributeInfoQueryReq productAttributeInfoQueryReq){ + return ProductAttributeInfo.builder() + .productId(productAttributeInfoQueryReq.getProductId()) + .attributeGroupId(productAttributeInfoQueryReq.getAttributeGroupId()) + .attributeId(productAttributeInfoQueryReq.getAttributeId()) + .value(productAttributeInfoQueryReq.getValue()) + .build(); + } + + /** + * 添加构造器 + */ + public static ProductAttributeInfo saveBuild(ProductAttributeInfoSaveReq productAttributeInfoSaveReq){ + return ProductAttributeInfo.builder() + .productId(productAttributeInfoSaveReq.getProductId()) + .attributeGroupId(productAttributeInfoSaveReq.getAttributeGroupId()) + .attributeId(productAttributeInfoSaveReq.getAttributeId()) + .value(productAttributeInfoSaveReq.getValue()) + .createTime(new Date()) + .createBy(SecurityUtils.getUsername()) + .build(); + } + + /** + * 修改构造器 + */ + public static ProductAttributeInfo editBuild(Long id, ProductAttributeInfoEditReq productAttributeInfoEditReq){ + return ProductAttributeInfo.builder() + .id(id) + .productId(productAttributeInfoEditReq.getProductId()) + .attributeGroupId(productAttributeInfoEditReq.getAttributeGroupId()) + .attributeId(productAttributeInfoEditReq.getAttributeId()) + .value(productAttributeInfoEditReq.getValue()) + .updateTime(new Date()) + .updateBy(SecurityUtils.getUsername()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductInfo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductInfo.java new file mode 100644 index 0000000..6732011 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductInfo.java @@ -0,0 +1,144 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.security.utils.SecurityUtils; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.ProductInfoQueryReq; +import com.ruoyi.product.domain.req.ProductInfoSaveReq; +import com.ruoyi.product.domain.req.ProductInfoEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.util.Date; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("product_info") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "ProductInfo", description = "商品信息") +public class ProductInfo extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "商品编号", value = "商品编号") + private Long id; + + /** 商品型号 */ + @Excel(name = "商品型号") + @ApiModelProperty(name = "商品型号", value = "商品型号", required = true) + private String name; + + /** 商品品牌 */ + @Excel(name = "商品品牌") + @ApiModelProperty(name = "商品品牌", value = "商品品牌", required = true) + private Long brandId; + + /** 商品描述 */ + @Excel(name = "商品描述") + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + @Excel(name = "主类型") + @ApiModelProperty(name = "主类型", value = "主类型", required = true) + private Long masterType; + + /** 父类型 */ + @Excel(name = "父类型") + @ApiModelProperty(name = "父类型", value = "父类型", required = true) + private Long parentType; + + /** 当前类型 */ + @Excel(name = "当前类型") + @ApiModelProperty(name = "当前类型", value = "当前类型", required = true) + private Long thisType; + + /** 商品封面 */ + @Excel(name = "商品封面") + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + @Excel(name = "商品轮播图") + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + @Excel(name = "是否上架") + @ApiModelProperty(name = "是否上架", value = "是否上架", required = true) + private String isUpShelf; + + /** + * 查询构造器 + */ + public static ProductInfo queryBuild( ProductInfoQueryReq productInfoQueryReq){ + return ProductInfo.builder() + .name(productInfoQueryReq.getName()) + .brandId(productInfoQueryReq.getBrandId()) + .intro(productInfoQueryReq.getIntro()) + .masterType(productInfoQueryReq.getMasterType()) + .parentType(productInfoQueryReq.getParentType()) + .thisType(productInfoQueryReq.getThisType()) + .coverImage(productInfoQueryReq.getCoverImage()) + .carouselImages(productInfoQueryReq.getCarouselImages()) + .isUpShelf(productInfoQueryReq.getIsUpShelf()) + .build(); + } + + /** + * 添加构造器 + */ + public static ProductInfo saveBuild(ProductInfoSaveReq productInfoSaveReq){ + return ProductInfo.builder() + .name(productInfoSaveReq.getName()) + .brandId(productInfoSaveReq.getBrandId()) + .intro(productInfoSaveReq.getIntro()) + .masterType(productInfoSaveReq.getMasterType()) + .parentType(productInfoSaveReq.getParentType()) + .thisType(productInfoSaveReq.getThisType()) + .coverImage(productInfoSaveReq.getCoverImage()) + .carouselImages(productInfoSaveReq.getCarouselImages()) + .isUpShelf(productInfoSaveReq.getIsUpShelf()) + .createTime(new Date()) + .createBy(SecurityUtils.getUsername()) + .build(); + } + + /** + * 修改构造器 + */ + public static ProductInfo editBuild(Long id, ProductInfoEditReq productInfoEditReq){ + return ProductInfo.builder() + .id(id) + .name(productInfoEditReq.getName()) + .brandId(productInfoEditReq.getBrandId()) + .intro(productInfoEditReq.getIntro()) + .masterType(productInfoEditReq.getMasterType()) + .parentType(productInfoEditReq.getParentType()) + .thisType(productInfoEditReq.getThisType()) + .coverImage(productInfoEditReq.getCoverImage()) + .carouselImages(productInfoEditReq.getCarouselImages()) + .isUpShelf(productInfoEditReq.getIsUpShelf()) + .updateTime(new Date()) + .updateBy(SecurityUtils.getUsername()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductSku.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductSku.java new file mode 100644 index 0000000..ac5f1e0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/ProductSku.java @@ -0,0 +1,103 @@ +package com.ruoyi.product.domain; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.function.Supplier; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.ProductSkuQueryReq; +import com.ruoyi.product.domain.req.ProductSkuSaveReq; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品SKU数据对象 product_sku + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("product_sku") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "ProductSku", description = "商品SKU数据") +public class ProductSku extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 商品编号 */ + @Excel(name = "商品编号") + @ApiModelProperty(name = "商品编号", value = "商品编号", required = true) + private Long productId; + + /** 规格组 */ + @Excel(name = "规格组") + @ApiModelProperty(name = "规格组", value = "规格组", required = true) + private Long specificationGroupId; + + /** 商品图片 */ + @Excel(name = "商品图片") + @ApiModelProperty(name = "商品图片", value = "商品图片") + private String image; + + /** 商品单价 */ + @Excel(name = "商品单价") + @ApiModelProperty(name = "商品单价", value = "商品单价", required = true) + private BigDecimal price; + + /** 商品库存 */ + @Excel(name = "商品库存") + @ApiModelProperty(name = "商品库存", value = "商品库存", required = true) + private Long inventory; + + /** 是否可用 */ + @Excel(name = "是否可用") + @ApiModelProperty(name = "是否可用", value = "是否可用", required = true) + private Boolean status; + + /** + * 查询构造器 + */ + public static ProductSku queryBuild( ProductSkuQueryReq productSkuQueryReq){ + return ProductSku.builder() + .productId(productSkuQueryReq.getProductId()) + .specificationGroupId(productSkuQueryReq.getSpecificationGroupId()) + .image(productSkuQueryReq.getImage()) + .price(productSkuQueryReq.getPrice()) + .inventory(productSkuQueryReq.getInventory()) + .status(productSkuQueryReq.getStatus()) + .build(); + } + + /** + * 添加构造器 + */ + public static ProductSku saveBuild(Long productId, Long specificationGroupId, ProductSkuSaveReq productSkuSaveReq, Supplier createBy){ + return ProductSku.builder() + .productId(productId) + .specificationGroupId(specificationGroupId) + .image(productSkuSaveReq.getImage()) + .price(productSkuSaveReq.getPrice()) + .inventory(productSkuSaveReq.getInventory()) + .status(productSkuSaveReq.getStatus()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationGroup.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationGroup.java new file mode 100644 index 0000000..ac25516 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationGroup.java @@ -0,0 +1,55 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.function.Supplier; +import java.util.Date; + +/** + * 规格组对象 specification_group + * + * @author gtl + * @date 2024-03-08 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("specification_group") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "SpecificationGroup", description = "规格组") +public class SpecificationGroup extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 商品编号 */ + @Excel(name = "商品编号") + @ApiModelProperty(name = "商品编号", value = "商品编号", required = true) + private Long productId; + + /** + * 添加构造器 + */ + public static SpecificationGroup saveBuild(Long productId,Supplier createBy){ + return SpecificationGroup.builder() + .productId(productId) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationInfo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationInfo.java new file mode 100644 index 0000000..e60a220 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/SpecificationInfo.java @@ -0,0 +1,66 @@ +package com.ruoyi.product.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.req.SpecificationInfoQueryReq; +import com.ruoyi.product.domain.req.SpecificationInfoSaveReq; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + +/** + * 规格对象 specification_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("specification_info") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "SpecificationInfo", description = "规格") +public class SpecificationInfo extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 规格编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "规格编号", value = "规格编号") + private Long id; + + /** 规格名称 */ + @Excel(name = "规格名称") + @ApiModelProperty(name = "规格名称", value = "规格名称", required = true) + private String name; + + /** + * 查询构造器 + */ + public static SpecificationInfo queryBuild( SpecificationInfoQueryReq specificationInfoQueryReq){ + return SpecificationInfo.builder() + .name(specificationInfoQueryReq.getName()) + .build(); + } + + /** + * 添加构造器 + */ + public static SpecificationInfo saveBuild(SpecificationInfoSaveReq specificationInfoSaveReq, Supplier createBy){ + return SpecificationInfo.builder() + .name(specificationInfoSaveReq.getName()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/CategoryBase.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/CategoryBase.java new file mode 100644 index 0000000..e253dff --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/CategoryBase.java @@ -0,0 +1,13 @@ +package com.ruoyi.product.domain.base; + +import lombok.Data; + +/** + * @ClassName CategoryBase + * @Description 描述 + * @Author 森静若林 + * @Date 2024/3/1 19:30 + */ +public interface CategoryBase { + public Long getBaseId(); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/TreeBaseEntity.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/TreeBaseEntity.java new file mode 100644 index 0000000..89ae0fc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/base/TreeBaseEntity.java @@ -0,0 +1,52 @@ +package com.ruoyi.product.domain.base; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.ArrayList; +import java.util.List; + +/** + * Tree基类 + * + * @author gtl + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class TreeBaseEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 子部门 + */ + @TableField(exist = false) + private List children = new ArrayList<>(); + + public Long getParentId () { + return parentId; + } + + public void setParentId (Long parentId) { + this.parentId = parentId; + } + + public List getChildren () { + return children; + } + + public void setChildren (List children) { + this.children = children; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupEditModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupEditModel.java new file mode 100644 index 0000000..2f41998 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupEditModel.java @@ -0,0 +1,71 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.req.AttributeGroupEditReq; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Date; +import java.util.List; +import java.util.function.Supplier; + +/** + * 属性组对象 attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class AttributeGroupEditModel extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性组编号 */ + + @ApiModelProperty(name = "属性组编号", value = "属性组编号") + private Long id; + + /** 属性 */ + + @ApiModelProperty(name = "属性", value = "属性", required = true) + private String name; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态") + private String status; + + /** 属性编号数组 */ + + @ApiModelProperty(name = "属性编号数组", value = "属性编号数组") + private List attributeIdList; + + public static AttributeGroupEditModel editModelBuild(Long id, AttributeGroupEditReq attributeGroupEditReq) { + return AttributeGroupEditModel.builder() + .id(id) + .name(attributeGroupEditReq.getName()) + .status(attributeGroupEditReq.getStatus()) + .attributeIdList(attributeGroupEditReq.getAttributeIdList()) + .remark(attributeGroupEditReq.getRemark()) + .build(); + } + + public static AttributeGroup buildAttributeGroup(AttributeGroupEditModel attributeGroupSaveModel, Supplier updateBy) { + return AttributeGroup.builder() + .id(attributeGroupSaveModel.getId()) + .name(attributeGroupSaveModel.getName()) + .status(attributeGroupSaveModel.getStatus()) + .remark(attributeGroupSaveModel.getRemark()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupSaveModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupSaveModel.java new file mode 100644 index 0000000..a49cf0c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeGroupSaveModel.java @@ -0,0 +1,69 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.req.AttributeGroupSaveReq; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.util.Date; +import java.util.List; +import java.util.function.Supplier; + +/** + * 属性组对象 attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class AttributeGroupSaveModel extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性组编号 */ + + @ApiModelProperty(name = "属性组编号", value = "属性组编号") + private Long id; + + /** 属性 */ + + @ApiModelProperty(name = "属性", value = "属性", required = true) + private String name; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态") + private String status; + + /** 属性编号数组 */ + + @ApiModelProperty(name = "属性编号数组", value = "属性编号数组") + private List attributeIdList; + + public static AttributeGroupSaveModel saveModelBuild(AttributeGroupSaveReq attributeGroupSaveReq) { + return AttributeGroupSaveModel.builder() + .name(attributeGroupSaveReq.getName()) + .status(attributeGroupSaveReq.getStatus()) + .attributeIdList(attributeGroupSaveReq.getAttributeIdList()) + .remark(attributeGroupSaveReq.getRemark()) + .build(); + } + + public static AttributeGroup buildAttributeGroup(AttributeGroupSaveModel attributeGroupSaveModel, Supplier createBy) { + return AttributeGroup.builder() + .name(attributeGroupSaveModel.getName()) + .status(attributeGroupSaveModel.getStatus()) + .remark(attributeGroupSaveModel.getRemark()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeValueSaveModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeValueSaveModel.java new file mode 100644 index 0000000..558489a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/AttributeValueSaveModel.java @@ -0,0 +1,41 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.AttributeInfo; +import com.ruoyi.product.domain.ProductAttributeInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author gtl + * @description: 共有属性 + * @Date 2024-3-6 下午 02:30 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class AttributeValueSaveModel extends BaseEntity { + + /** + * 属性编号 + */ + private Long id; + + /** + * 属性值 + */ + private String value; + + public ProductAttributeInfo buildProductAttribute(Long productId) { + return ProductAttributeInfo.builder() + .productId(productId) + .attributeId(this.id) + .value(this.value) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoEditModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoEditModel.java new file mode 100644 index 0000000..532657f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoEditModel.java @@ -0,0 +1,101 @@ +package com.ruoyi.product.domain.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.TreeEntity; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.CategoryInfo; +import com.ruoyi.product.domain.req.CategoryEditReq; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.Date; +import java.util.List; +import java.util.function.Supplier; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "CategoryInfoEditModel", description = "品类") +public class CategoryInfoEditModel extends TreeEntity { + + private static final long serialVersionUID = 1L; + + /** 品类编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "品类编号", value = "品类编号") + private Long id; + + /** 品类名称 */ + @Excel(name = "品类名称") + @ApiModelProperty(name = "品类名称", value = "品类名称", required = true) + private String name; + + /** 状态 */ + @Excel(name = "状态") + @ApiModelProperty(name = "状态", value = "状态", required = true) + private String status; + + /** 品类简介 */ + @Excel(name = "品类简介") + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + + /** 属性集合 */ + + @ApiModelProperty(name = "属性集合", value = "属性集合") + private List attributeIdList; + + /** + * 属性组集合 + */ + @ApiModelProperty(name = "属性组集合", value = "属性组集合") + private List attributeGroupIdList; + + /** + * 品牌集合 + */ + @ApiModelProperty(name = "品牌集合", value = "品牌集合") + private List brandInfoIdList; + + /** + * 修改构造器 + */ + public static CategoryInfoEditModel editModelBuild(Long id, CategoryEditReq categoryEditReq) { + return CategoryInfoEditModel.builder() + .id(id) + .name(categoryEditReq.getName()) + .parentId(categoryEditReq.getParentId()) + .status(categoryEditReq.getStatus()) + .intro(categoryEditReq.getIntro()) + .attributeIdList(categoryEditReq.getAttributeIdList()) + .attributeGroupIdList(categoryEditReq.getAttributeGroupIdList()) + .brandInfoIdList(categoryEditReq.getBrandInfoIdList()) + .build(); + } + + public CategoryInfo buildCategoryInfo(CategoryInfoEditModel categoryInfoEditModel, Supplier updateBy) { + return CategoryInfo.builder() + .id(categoryInfoEditModel.getId()) + .name(categoryInfoEditModel.getName()) + .parentId(categoryInfoEditModel.getParentId()) + .status(categoryInfoEditModel.getStatus()) + .intro(categoryInfoEditModel.getIntro()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoSaveModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoSaveModel.java new file mode 100644 index 0000000..16fdcbb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/CategoryInfoSaveModel.java @@ -0,0 +1,92 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.TreeEntity; +import com.ruoyi.product.domain.CategoryInfo; +import com.ruoyi.product.domain.req.CategorySaveReq; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.Date; +import java.util.List; +import java.util.function.Supplier; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "CategoryInfoSaveModel", description = "品类") +public class CategoryInfoSaveModel extends TreeEntity { + + private static final long serialVersionUID = 1L; + + /** 品类编号 */ + + @ApiModelProperty(name = "品类编号", value = "品类编号") + private Long id; + + /** 品类名称 */ + + @ApiModelProperty(name = "品类名称", value = "品类名称", required = true) + private String name; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态", required = true) + private String status; + + /** 品类简介 */ + + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + + /** 属性集合 */ + + @ApiModelProperty(name = "属性集合", value = "属性集合") + private List attributeIdList; + + /** + * 属性组集合 + */ + @ApiModelProperty(name = "属性组集合", value = "属性组集合") + private List attributeGroupIdList; + + /** + * 品牌集合 + */ + @ApiModelProperty(name = "品牌集合", value = "品牌集合") + private List brandInfoIdList; + + public static CategoryInfoSaveModel saveModelBuild(CategorySaveReq categorySaveReq) { + return CategoryInfoSaveModel.builder() + .name(categorySaveReq.getName()) + .parentId(categorySaveReq.getParentId()) + .status(categorySaveReq.getStatus()) + .intro(categorySaveReq.getIntro()) + .attributeIdList(categorySaveReq.getAttributeIdList()) + .attributeGroupIdList(categorySaveReq.getAttributeGroupIdList()) + .brandInfoIdList(categorySaveReq.getBrandInfoIdList()) + .remark(categorySaveReq.getRemark()) + .build(); + } + + public CategoryInfo buildCategoryInfo(CategoryInfoSaveModel categoryInfoSaveModel, Supplier createBy) { + return CategoryInfo.builder() + .name(categoryInfoSaveModel.getName()) + .parentId(categoryInfoSaveModel.getParentId()) + .status(categoryInfoSaveModel.getStatus()) + .intro(categoryInfoSaveModel.getIntro()) + .remark(categoryInfoSaveModel.getRemark()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoEditModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoEditModel.java new file mode 100644 index 0000000..a62ec9a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoEditModel.java @@ -0,0 +1,120 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.ProductInfo; +import com.ruoyi.product.domain.req.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.Date; +import java.util.List; +import java.util.function.Supplier; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductInfoEditModel", description = "商品信息") +public class ProductInfoEditModel extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + @ApiModelProperty(name = "商品编号", value = "商品编号", required = true) + private Long id; + + /** 商品型号 */ + @ApiModelProperty(name = "商品型号", value = "商品型号", required = true) + private String name; + + /** 商品品牌 */ + @ApiModelProperty(name = "商品品牌", value = "商品品牌", required = true) + private Long brandId; + + /** 商品描述 */ + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + @ApiModelProperty(name = "主类型", value = "主类型", required = true) + private Long masterType; + + /** 父类型 */ + @ApiModelProperty(name = "父类型", value = "父类型", required = true) + private Long parentType; + + /** 当前类型 */ + @ApiModelProperty(name = "当前类型", value = "当前类型", required = true) + private Long thisType; + + /** 商品封面 */ + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + @ApiModelProperty(name = "是否上架", value = "是否上架", required = true) + private String isUpShelf; + + /** 属性值集合 */ + + @ApiModelProperty(name = "属性值集合", value = "属性值集合") + private List attributeValueModelList; + + /** 规格集合 */ + + @ApiModelProperty(name = "规格集合", value = "规格集合") + private List specificationList; + + /** 商品sku集合 */ + + @ApiModelProperty(name = "商品sku集合", value = "商品sku集合") + private List productSkuList; + + public static ProductInfoEditModel buildEditModel(Long id,ProductInfoEditReq productInfoEditReq) { + return ProductInfoEditModel.builder() + .id(id) + .name(productInfoEditReq.getName()) + .brandId(productInfoEditReq.getBrandId()) + .intro(productInfoEditReq.getIntro()) + .masterType(productInfoEditReq.getMasterType()) + .parentType(productInfoEditReq.getParentType()) + .thisType(productInfoEditReq.getThisType()) + .coverImage(productInfoEditReq.getCoverImage()) + .carouselImages(productInfoEditReq.getCarouselImages()) + .isUpShelf(productInfoEditReq.getIsUpShelf()) + .attributeValueModelList(productInfoEditReq.getAttributeValueModelList()) + .specificationList(productInfoEditReq.getSpecificationList()) + .productSkuList(productInfoEditReq.getProductSkuList()) + .build(); + } + + public ProductInfo buildProductInfo(ProductInfoEditModel productInfoSaveModel, Supplier updateBy) { + return ProductInfo.builder() + .id(productInfoSaveModel.getId()) + .name(productInfoSaveModel.getName()) + .brandId(productInfoSaveModel.getBrandId()) + .intro(productInfoSaveModel.getIntro()) + .masterType(productInfoSaveModel.getMasterType()) + .parentType(productInfoSaveModel.getParentType()) + .thisType(productInfoSaveModel.getThisType()) + .coverImage(productInfoSaveModel.getCoverImage()) + .carouselImages(productInfoSaveModel.getCarouselImages()) + .isUpShelf(productInfoSaveModel.getIsUpShelf()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoSaveModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoSaveModel.java new file mode 100644 index 0000000..0a3624a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductInfoSaveModel.java @@ -0,0 +1,132 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.ProductInfo; +import com.ruoyi.product.domain.req.ProductInfoSaveReq; +import com.ruoyi.product.domain.req.ProductSkuSaveReq; +import com.ruoyi.product.domain.req.SpecificationInfoSaveReq; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.Date; +import java.util.List; +import java.util.function.Supplier; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductInfoSaveModel", description = "商品信息") +public class ProductInfoSaveModel extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + + @ApiModelProperty(name = "商品编号", value = "商品编号") + private Long id; + + /** 商品型号 */ + + @ApiModelProperty(name = "商品型号", value = "商品型号", required = true) + private String name; + + /** 商品品牌 */ + + @ApiModelProperty(name = "商品品牌", value = "商品品牌", required = true) + private Long brandId; + + /** 商品描述 */ + + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + + @ApiModelProperty(name = "主类型", value = "主类型", required = true) + private Long masterType; + + /** 父类型 */ + + @ApiModelProperty(name = "父类型", value = "父类型", required = true) + private Long parentType; + + /** 当前类型 */ + + @ApiModelProperty(name = "当前类型", value = "当前类型", required = true) + private Long thisType; + + /** 商品封面 */ + + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + + @ApiModelProperty(name = "是否上架", value = "是否上架", required = true) + private String isUpShelf; + + /** 属性值集合 */ + + @ApiModelProperty(name = "属性值集合", value = "属性值集合") + private List attributeValueSaveModelList; + + /** 规格集合 */ + + @ApiModelProperty(name = "规格集合", value = "规格集合") + private List specificationList; + + /** 商品sku集合 */ + + @ApiModelProperty(name = "商品sku集合", value = "商品sku集合") + private List productSkuList; + + public static ProductInfoSaveModel buildSaveModel(ProductInfoSaveReq productInfoSaveReq) { + return ProductInfoSaveModel.builder() + .name(productInfoSaveReq.getName()) + .brandId(productInfoSaveReq.getBrandId()) + .intro(productInfoSaveReq.getIntro()) + .masterType(productInfoSaveReq.getMasterType()) + .parentType(productInfoSaveReq.getParentType()) + .thisType(productInfoSaveReq.getThisType()) + .coverImage(productInfoSaveReq.getCoverImage()) + .carouselImages(productInfoSaveReq.getCarouselImages()) + .isUpShelf(productInfoSaveReq.getIsUpShelf()) + .attributeValueSaveModelList(productInfoSaveReq.getAttributeValueModelList()) + .specificationList(productInfoSaveReq.getSpecificationList()) + .productSkuList(productInfoSaveReq.getProductSkuList()) + .remark(productInfoSaveReq.getRemark()) + .build(); + } + + public ProductInfo buildProductInfo(ProductInfoSaveModel productInfoSaveModel, Supplier createBy) { + return ProductInfo.builder() + .name(productInfoSaveModel.getName()) + .brandId(productInfoSaveModel.getBrandId()) + .intro(productInfoSaveModel.getIntro()) + .masterType(productInfoSaveModel.getMasterType()) + .parentType(productInfoSaveModel.getParentType()) + .thisType(productInfoSaveModel.getThisType()) + .coverImage(productInfoSaveModel.getCoverImage()) + .carouselImages(productInfoSaveModel.getCarouselImages()) + .isUpShelf(productInfoSaveModel.getIsUpShelf()) + .remark(productInfoSaveModel.getRemark()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductSkuSaveModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductSkuSaveModel.java new file mode 100644 index 0000000..9569e07 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/ProductSkuSaveModel.java @@ -0,0 +1,57 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.math.BigDecimal; + +/** + * 商品SKU数据对象 product_sku + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class ProductSkuSaveModel extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + + @ApiModelProperty(name = "商品编号", value = "商品编号", required = true) + private Long productId; + + /** 规格组 */ + + @ApiModelProperty(name = "规格组", value = "规格组", required = true) + private Long specificationGroupId; + + /** 商品图片 */ + + @ApiModelProperty(name = "商品图片", value = "商品图片") + private String image; + + /** 商品单价 */ + + @ApiModelProperty(name = "商品单价", value = "商品单价", required = true) + private BigDecimal price; + + /** 商品库存 */ + + @ApiModelProperty(name = "商品库存", value = "商品库存", required = true) + private Long inventory; + + /** 是否可用 */ + + @ApiModelProperty(name = "是否可用", value = "是否可用", required = true) + private String status; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeGroupModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeGroupModel.java new file mode 100644 index 0000000..d36af7e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeGroupModel.java @@ -0,0 +1,41 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.AttributeInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.List; + +/** + * @author gtl + * @description: 共有属性组 + * @Date 2024-3-6 下午 02:29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class TemplateAttributeGroupModel extends BaseEntity { + + /** + * 组名称 + */ + private String groupName; + + /** + * 属性组下属性集合 + */ + private List attributeList; + + public static TemplateAttributeGroupModel buildTemplateModel(AttributeGroup attributeGroup, List list) { + return TemplateAttributeGroupModel.builder() + .groupName(attributeGroup.getName()) + .attributeList(list) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeModel.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeModel.java new file mode 100644 index 0000000..d0afe05 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/model/TemplateAttributeModel.java @@ -0,0 +1,41 @@ +package com.ruoyi.product.domain.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.AttributeInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.function.Function; + +/** + * @author gtl + * @description: 共有属性 + * @Date 2024-3-6 下午 02:30 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class TemplateAttributeModel extends BaseEntity { + + /** + * 主键 + */ + private Long id; + + /** + * 属性名称 + */ + private String name; + + public static TemplateAttributeModel buildTemplateModel(AttributeInfo attributeInfo) { + return TemplateAttributeModel.builder() + .id(attributeInfo.getId()) + .name(attributeInfo.getName()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupEditReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupEditReq.java new file mode 100644 index 0000000..55e78fe --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupEditReq.java @@ -0,0 +1,41 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.util.List; + +/** + * 属性组对象 attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "AttributeGroupEditReq", description = "属性组") +public class AttributeGroupEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性 */ + @ApiModelProperty(name = "属性", value = "属性", required = true) + private String name; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态") + private String status; + + /** 属性编号数组 */ + + @ApiModelProperty(name = "属性编号数组", value = "属性编号数组") + private List attributeIdList; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupQueryReq.java new file mode 100644 index 0000000..a439e0d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupQueryReq.java @@ -0,0 +1,34 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 属性组对象 attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "AttributeGroupQueryReq", description = "属性组") +public class AttributeGroupQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性 */ + @ApiModelProperty(name = "属性", value = "属性") + private String name; + + /** 状态 */ + @ApiModelProperty(name = "状态", value = "状态") + private String status; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupSaveReq.java new file mode 100644 index 0000000..b282d0b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeGroupSaveReq.java @@ -0,0 +1,48 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +import java.util.List; + +/** + * 属性组对象 attribute_group + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "AttributeGroupSaveReq", description = "属性组") +public class AttributeGroupSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性组编号 */ + + @ApiModelProperty(name = "属性组编号", value = "属性组编号") + private Long id; + + /** 属性 */ + + @ApiModelProperty(name = "属性", value = "属性", required = true) + private String name; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态") + private String status; + + /** 属性编号数组 */ + + @ApiModelProperty(name = "属性编号数组", value = "属性编号数组") + private List attributeIdList; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoEditReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoEditReq.java new file mode 100644 index 0000000..9c3d827 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoEditReq.java @@ -0,0 +1,30 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 属性对象 attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "AttributeInfoEditReq", description = "属性") +public class AttributeInfoEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性名 */ + @ApiModelProperty(name = "属性名", value = "属性名", required = true) + private String name; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoQueryReq.java new file mode 100644 index 0000000..05b7d0c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoQueryReq.java @@ -0,0 +1,30 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 属性对象 attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "AttributeInfoQueryReq", description = "属性") +public class AttributeInfoQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性名 */ + @ApiModelProperty(name = "属性名", value = "属性名") + private String name; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoSaveReq.java new file mode 100644 index 0000000..7db371f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/AttributeInfoSaveReq.java @@ -0,0 +1,36 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 属性对象 attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "AttributeInfoSaveReq", description = "属性") +public class AttributeInfoSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性编号 */ + + @ApiModelProperty(name = "属性编号", value = "属性编号") + private Long id; + + /** 属性名 */ + + @ApiModelProperty(name = "属性名", value = "属性名", required = true) + private String name; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoEditReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoEditReq.java new file mode 100644 index 0000000..bd33299 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoEditReq.java @@ -0,0 +1,42 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 品牌对象 brand_info + * + * @author gtl + * @date 2024-03-07 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "BrandInfoEditReq", description = "品牌") +public class BrandInfoEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 品牌名称 */ + @ApiModelProperty(name = "品牌名称", value = "品牌名称", required = true) + private String name; + + /** 品牌logo */ + @ApiModelProperty(name = "品牌logo", value = "品牌logo") + private String logo; + + /** 品牌状态 */ + @ApiModelProperty(name = "品牌状态", value = "品牌状态", required = true) + private String status; + + /** 品牌简介 */ + @ApiModelProperty(name = "品牌简介", value = "品牌简介") + private String intro; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoQueryReq.java new file mode 100644 index 0000000..ab33cba --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoQueryReq.java @@ -0,0 +1,38 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 品牌对象 brand_info + * + * @author gtl + * @date 2024-03-07 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "BrandInfoQueryReq", description = "品牌") +public class BrandInfoQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 品牌名称 */ + @ApiModelProperty(name = "品牌名称", value = "品牌名称") + private String name; + + /** 品牌状态 */ + @ApiModelProperty(name = "品牌状态", value = "品牌状态") + private String status; + + /** 品牌简介 */ + @ApiModelProperty(name = "品牌简介", value = "品牌简介") + private String intro; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoSaveReq.java new file mode 100644 index 0000000..1c1066b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/BrandInfoSaveReq.java @@ -0,0 +1,51 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 品牌对象 brand_info + * + * @author gtl + * @date 2024-03-07 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "BrandInfoSaveReq", description = "品牌") +public class BrandInfoSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 品牌编号 */ + + @ApiModelProperty(name = "品牌编号", value = "品牌编号") + private Long id; + + /** 品牌名称 */ + + @ApiModelProperty(name = "品牌名称", value = "品牌名称", required = true) + private String name; + + /** 品牌logo */ + + @ApiModelProperty(name = "品牌logo", value = "品牌logo") + private String logo; + + /** 品牌状态 */ + + @ApiModelProperty(name = "品牌状态", value = "品牌状态", required = true) + private String status; + + /** 品牌简介 */ + + @ApiModelProperty(name = "品牌简介", value = "品牌简介") + private String intro; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryEditReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryEditReq.java new file mode 100644 index 0000000..4a5b160 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryEditReq.java @@ -0,0 +1,56 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.TreeEntity; + +import java.util.List; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "CategoryEditReq", description = "品类") +public class CategoryEditReq extends TreeEntity { + + private static final long serialVersionUID = 1L; + + /** 品类名称 */ + @ApiModelProperty(name = "品类名称", value = "品类名称", required = true) + private String name; + + /** 状态 */ + @ApiModelProperty(name = "状态", value = "状态", required = true) + private String status; + + /** 品类简介 */ + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + + /** 属性集合 */ + + @ApiModelProperty(name = "属性集合", value = "属性集合") + private List attributeIdList; + + /** + * 属性组集合 + */ + @ApiModelProperty(name = "属性组集合", value = "属性组集合") + private List attributeGroupIdList; + + /** + * 品牌集合 + */ + @ApiModelProperty(name = "品牌集合", value = "品牌集合") + private List brandInfoIdList; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryQueryReq.java new file mode 100644 index 0000000..ce9ddc5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategoryQueryReq.java @@ -0,0 +1,38 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.TreeEntity; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "CategoryQueryReq", description = "品类") +public class CategoryQueryReq extends TreeEntity { + + private static final long serialVersionUID = 1L; + + /** 品类名称 */ + @ApiModelProperty(name = "品类名称", value = "品类名称") + private String name; + + /** 状态 */ + @ApiModelProperty(name = "状态", value = "状态") + private String status; + + /** 品类简介 */ + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategorySaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategorySaveReq.java new file mode 100644 index 0000000..a06558d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/CategorySaveReq.java @@ -0,0 +1,64 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.TreeEntity; + +import java.util.List; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "CategorySaveReq", description = "品类") +public class CategorySaveReq extends TreeEntity { + + private static final long serialVersionUID = 1L; + + /** 品类编号 */ + + @ApiModelProperty(name = "品类编号", value = "品类编号") + private Long id; + + /** 品类名称 */ + + @ApiModelProperty(name = "品类名称", value = "品类名称", required = true) + private String name; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态", required = true) + private String status; + + /** 品类简介 */ + + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + + /** 属性集合 */ + + @ApiModelProperty(name = "属性集合", value = "属性集合") + private List attributeIdList; + + /** + * 属性组集合 + */ + @ApiModelProperty(name = "属性组集合", value = "属性组集合") + private List attributeGroupIdList; + + /** + * 品牌集合 + */ + @ApiModelProperty(name = "品牌集合", value = "品牌集合") + private List brandInfoIdList; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoEditReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoEditReq.java new file mode 100644 index 0000000..a7b8d7b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoEditReq.java @@ -0,0 +1,42 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品属性对象 product_attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductAttributeInfoEditReq", description = "商品属性") +public class ProductAttributeInfoEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品 */ + @ApiModelProperty(name = "商品", value = "商品", required = true) + private Long productId; + + /** 属性组 */ + @ApiModelProperty(name = "属性组", value = "属性组", required = true) + private Long attributeGroupId; + + /** 属性 */ + @ApiModelProperty(name = "属性", value = "属性", required = true) + private Long attributeId; + + /** 属性值 */ + @ApiModelProperty(name = "属性值", value = "属性值", required = true) + private String value; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoQueryReq.java new file mode 100644 index 0000000..877b0fb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoQueryReq.java @@ -0,0 +1,42 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品属性对象 product_attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductAttributeInfoQueryReq", description = "商品属性") +public class ProductAttributeInfoQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品 */ + @ApiModelProperty(name = "商品", value = "商品") + private Long productId; + + /** 属性组 */ + @ApiModelProperty(name = "属性组", value = "属性组") + private Long attributeGroupId; + + /** 属性 */ + @ApiModelProperty(name = "属性", value = "属性") + private Long attributeId; + + /** 属性值 */ + @ApiModelProperty(name = "属性值", value = "属性值") + private String value; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoSaveReq.java new file mode 100644 index 0000000..dfc51ac --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductAttributeInfoSaveReq.java @@ -0,0 +1,51 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品属性对象 product_attribute_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductAttributeInfoSaveReq", description = "商品属性") +public class ProductAttributeInfoSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 商品 */ + + @ApiModelProperty(name = "商品", value = "商品", required = true) + private Long productId; + + /** 属性组 */ + + @ApiModelProperty(name = "属性组", value = "属性组", required = true) + private Long attributeGroupId; + + /** 属性 */ + + @ApiModelProperty(name = "属性", value = "属性", required = true) + private Long attributeId; + + /** 属性值 */ + + @ApiModelProperty(name = "属性值", value = "属性值", required = true) + private String value; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoEditReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoEditReq.java new file mode 100644 index 0000000..ce3f9a0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoEditReq.java @@ -0,0 +1,77 @@ +package com.ruoyi.product.domain.req; + +import com.ruoyi.product.domain.model.AttributeValueSaveModel; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.List; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductInfoEditReq", description = "商品信息") +public class ProductInfoEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品型号 */ + @ApiModelProperty(name = "商品型号", value = "商品型号", required = true) + private String name; + + /** 商品品牌 */ + @ApiModelProperty(name = "商品品牌", value = "商品品牌", required = true) + private Long brandId; + + /** 商品描述 */ + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + @ApiModelProperty(name = "主类型", value = "主类型", required = true) + private Long masterType; + + /** 父类型 */ + @ApiModelProperty(name = "父类型", value = "父类型", required = true) + private Long parentType; + + /** 当前类型 */ + @ApiModelProperty(name = "当前类型", value = "当前类型", required = true) + private Long thisType; + + /** 商品封面 */ + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + @ApiModelProperty(name = "是否上架", value = "是否上架", required = true) + private String isUpShelf; + + /** 属性值集合 */ + + @ApiModelProperty(name = "属性值集合", value = "属性值集合") + private List attributeValueModelList; + + /** 规格集合 */ + + @ApiModelProperty(name = "规格集合", value = "规格集合") + private List specificationList; + + /** 商品sku集合 */ + + @ApiModelProperty(name = "商品sku集合", value = "商品sku集合") + private List productSkuList; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoQueryReq.java new file mode 100644 index 0000000..8f4237f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoQueryReq.java @@ -0,0 +1,62 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductInfoQueryReq", description = "商品信息") +public class ProductInfoQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品型号 */ + @ApiModelProperty(name = "商品型号", value = "商品型号") + private String name; + + /** 商品品牌 */ + @ApiModelProperty(name = "商品品牌", value = "商品品牌") + private Long brandId; + + /** 商品描述 */ + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + @ApiModelProperty(name = "主类型", value = "主类型") + private Long masterType; + + /** 父类型 */ + @ApiModelProperty(name = "父类型", value = "父类型") + private Long parentType; + + /** 当前类型 */ + @ApiModelProperty(name = "当前类型", value = "当前类型") + private Long thisType; + + /** 商品封面 */ + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + @ApiModelProperty(name = "是否上架", value = "是否上架") + private String isUpShelf; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoSaveReq.java new file mode 100644 index 0000000..bd1fc61 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductInfoSaveReq.java @@ -0,0 +1,92 @@ +package com.ruoyi.product.domain.req; + +import com.ruoyi.product.domain.model.AttributeValueSaveModel; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.List; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-03-9 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductInfoSaveReq", description = "商品信息") +public class ProductInfoSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + + @ApiModelProperty(name = "商品编号", value = "商品编号") + private Long id; + + /** 商品型号 */ + + @ApiModelProperty(name = "商品型号", value = "商品型号", required = true) + private String name; + + /** 商品品牌 */ + + @ApiModelProperty(name = "商品品牌", value = "商品品牌", required = true) + private Long brandId; + + /** 商品描述 */ + + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + + @ApiModelProperty(name = "主类型", value = "主类型", required = true) + private Long masterType; + + /** 父类型 */ + + @ApiModelProperty(name = "父类型", value = "父类型", required = true) + private Long parentType; + + /** 当前类型 */ + + @ApiModelProperty(name = "当前类型", value = "当前类型", required = true) + private Long thisType; + + /** 商品封面 */ + + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + + @ApiModelProperty(name = "是否上架", value = "是否上架", required = true) + private String isUpShelf; + + /** 属性值集合 */ + + @ApiModelProperty(name = "属性值集合", value = "属性值集合") + private List attributeValueModelList; + + /** 规格集合 */ + + @ApiModelProperty(name = "规格集合", value = "规格集合") + private List specificationList; + + /** 商品sku集合 */ + + @ApiModelProperty(name = "商品sku集合", value = "商品sku集合") + private List productSkuList; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuQueryReq.java new file mode 100644 index 0000000..379ba1d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuQueryReq.java @@ -0,0 +1,51 @@ +package com.ruoyi.product.domain.req; + +import java.math.BigDecimal; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品SKU数据对象 product_sku + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductSkuQueryReq", description = "商品SKU数据") +public class ProductSkuQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + @ApiModelProperty(name = "商品编号", value = "商品编号") + private Long productId; + + /** 规格组 */ + @ApiModelProperty(name = "规格组", value = "规格组") + private Long specificationGroupId; + + /** 商品图片 */ + @ApiModelProperty(name = "商品图片", value = "商品图片") + private String image; + + /** 商品单价 */ + @ApiModelProperty(name = "商品单价", value = "商品单价") + private BigDecimal price; + + /** 商品库存 */ + @ApiModelProperty(name = "商品库存", value = "商品库存") + private Long inventory; + + /** 是否可用 */ + @ApiModelProperty(name = "是否可用", value = "是否可用") + private Boolean status; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuSaveReq.java new file mode 100644 index 0000000..4ab2f58 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/ProductSkuSaveReq.java @@ -0,0 +1,47 @@ +package com.ruoyi.product.domain.req; + +import java.math.BigDecimal; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 商品SKU数据对象 product_sku + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductSkuSaveReq", description = "商品SKU数据") +public class ProductSkuSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品图片 */ + + @ApiModelProperty(name = "商品图片", value = "商品图片") + private String image; + + /** 商品单价 */ + + @ApiModelProperty(name = "商品单价", value = "商品单价", required = true) + private BigDecimal price; + + /** 商品库存 */ + + @ApiModelProperty(name = "商品库存", value = "商品库存", required = true) + private Long inventory; + + /** 是否可用 */ + + @ApiModelProperty(name = "是否可用", value = "是否可用", required = true) + private Boolean status; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoQueryReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoQueryReq.java new file mode 100644 index 0000000..02cfc99 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoQueryReq.java @@ -0,0 +1,30 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 规格对象 specification_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "SpecificationInfoQueryReq", description = "规格") +public class SpecificationInfoQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 规格名称 */ + @ApiModelProperty(name = "规格名称", value = "规格名称") + private String name; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoSaveReq.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoSaveReq.java new file mode 100644 index 0000000..8dbdf79 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/req/SpecificationInfoSaveReq.java @@ -0,0 +1,36 @@ +package com.ruoyi.product.domain.req; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.List; + +/** + * 规格对象 specification_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "SpecificationInfoSaveReq", description = "规格") +public class SpecificationInfoSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 规格名称 */ + + @ApiModelProperty(name = "规格名称", value = "规格名称", required = true) + private String name; + + /** 规格值集合 */ + + @ApiModelProperty(name = "规格值集合", value = "规格值集合", required = true) + private List valueList; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Attribute.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Attribute.java new file mode 100644 index 0000000..6761e2e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Attribute.java @@ -0,0 +1,32 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.product.domain.AttributeInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @ClassName Attribute + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/24 10:28 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class Attribute { + private Long attributeId; + private String name; + private String value; + + public Attribute attributeBuild(AttributeInfo attributeInfo,String value){ + return Attribute.builder() + .attributeId(attributeInfo.getId()) + .name(attributeInfo.getName()) + .value(value) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupInfoResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupInfoResp.java new file mode 100644 index 0000000..2553d2c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupInfoResp.java @@ -0,0 +1,53 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.AttributeInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; +import java.util.function.Function; + +/** + * @author DongZl + * @description: 属性组列表对象 + * @Date 2024-2-28 下午 04:15 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class AttributeGroupInfoResp extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性组编号 */ + private Long id; + + /** 组名称 */ + private String name; + + /** 状态 */ + private String status; + + /** + * 属性对象集合 + */ + private List attributeIdList; + + public static AttributeGroupInfoResp groupBuild (AttributeGroup attributeGroup, List attributeInfos) { + return AttributeGroupInfoResp.builder() + .id(attributeGroup.getId()) + .name(attributeGroup.getName()) + .status(attributeGroup.getStatus()) + .attributeIdList(attributeInfos.stream().map(AttributeInfo::getId).toList()) + .remark(attributeGroup.getRemark()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupPageResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupPageResp.java new file mode 100644 index 0000000..16e2880 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/AttributeGroupPageResp.java @@ -0,0 +1,50 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.AttributeInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.List; + +/** + * @author gtl + * @description: 属性组列表对象 + * @Date 2024-2-28 下午 04:15 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class AttributeGroupPageResp extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 属性组编号 */ + private Long id; + + /** 组名称 */ + private String name; + + /** 状态 */ + private String status; + + /** + * 属性对象集合 + */ + private List attributeInfoList; + + public static AttributeGroupPageResp groupBuild (AttributeGroup attributeGroup, List attributeInfos) { + return AttributeGroupPageResp.builder() + .id(attributeGroup.getId()) + .name(attributeGroup.getName()) + .status(attributeGroup.getStatus()) + .attributeInfoList(attributeInfos) + .remark(attributeGroup.getRemark()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CarouselImage.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CarouselImage.java new file mode 100644 index 0000000..1f742a0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CarouselImage.java @@ -0,0 +1,29 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.product.domain.ProductSku; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @ClassName CarouselImage + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/25 14:24 + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class CarouselImage { + private Long id; + private String image; + + public CarouselImage carouselImageBuild(ProductSku productSku){ + return CarouselImage.builder() + .image(productSku.getImage()) + .id(productSku.getSpecificationGroupId()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryCommonDataResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryCommonDataResp.java new file mode 100644 index 0000000..4f2e32e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryCommonDataResp.java @@ -0,0 +1,44 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.model.TemplateAttributeGroupModel; +import com.ruoyi.product.domain.model.TemplateAttributeModel; +import lombok.*; +import lombok.experimental.SuperBuilder; +import java.util.List; + +/** + * @author gtl + * @description: 商品类别公共元素 + * @Date 2024-3-6 下午 02:25 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class CategoryCommonDataResp extends BaseEntity { + + /** + * 共有属性组 + */ + private List templateAttributeGroupList; + + /** + * 共有属性 + */ + private List templateAttributeList; + + /** + * 自有属性(所有未包含属性) + */ + private List attributeList; + + public static CategoryCommonDataResp buildResp(List templateAttributeGroupList,List templateAttributeList,List attributeList){ + return CategoryCommonDataResp.builder() + .templateAttributeGroupList(templateAttributeGroupList) + .templateAttributeList(templateAttributeList) + .attributeList(attributeList) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryInfoResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryInfoResp.java new file mode 100644 index 0000000..11ae258 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryInfoResp.java @@ -0,0 +1,85 @@ +package com.ruoyi.product.domain.resp; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.product.domain.CategoryInfo; +import com.ruoyi.product.domain.base.TreeBaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.List; + +/** + * 品类对象 category + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class CategoryInfoResp extends TreeBaseEntity { + + private static final long serialVersionUID = 1L; + + /** 品类编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "品类编号", value = "品类编号") + private Long id; + + /** 品类名称 */ + @Excel(name = "品类名称") + @ApiModelProperty(name = "品类名称", value = "品类名称", required = true) + private String name; + + /** 状态 */ + @Excel(name = "状态") + @ApiModelProperty(name = "状态", value = "状态", required = true) + private String status; + + /** 品类简介 */ + @Excel(name = "品类简介") + @ApiModelProperty(name = "品类简介", value = "品类简介") + private String intro; + + /** 属性集合 */ + + @ApiModelProperty(name = "属性集合", value = "属性集合") + private List attributeIdList; + + /** + * 属性组集合 + */ + @ApiModelProperty(name = "属性组集合", value = "属性组集合") + private List attributeGroupIdList; + + /** + * 品牌集合 + */ + @ApiModelProperty(name = "品牌集合", value = "品牌集合") + private List brandInfoIdList; + + /** + * 构造器 + */ + public static CategoryInfoResp buildResp(CategoryInfo categoryInfo,List attributeIdList,List attributeGroupIdList,List brandInfoIdList){ + return CategoryInfoResp.builder() + .id(categoryInfo.getId()) + .name(categoryInfo.getName()) + .parentId(categoryInfo.getParentId()) + .attributeIdList(attributeIdList) + .attributeGroupIdList(attributeGroupIdList) + .brandInfoIdList(brandInfoIdList) + .status(categoryInfo.getStatus()) + .intro(categoryInfo.getIntro()) + .remark(categoryInfo.getRemark()) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryParentCommonDataResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryParentCommonDataResp.java new file mode 100644 index 0000000..87060e8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/CategoryParentCommonDataResp.java @@ -0,0 +1,38 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.AttributeInfo; +import com.ruoyi.product.domain.BrandInfo; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.util.List; + +/** + * @author DongZl + * @description: 类别父通用元素 + * @Date 2024-3-1 上午 11:02 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CategoryParentCommonDataResp { + + /** + * 属性集合 + */ + private List attributeInfoList; + + /** + * 属性组集合 + */ + private List attributeGroupList; + + /** + * 品牌集合 + */ + private List brandInfoList; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Product.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Product.java new file mode 100644 index 0000000..5ee15d7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Product.java @@ -0,0 +1,35 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.product.domain.ProductInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @ClassName Product + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/24 10:27 + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class Product { + private Long id; + private String name; + private String intro; + private String image; + private String price; + + public Product productBuild(ProductInfo productInfoResp, String price){ + return Product.builder() + .id(productInfoResp.getId()) + .intro(productInfoResp.getIntro()) + .name(productInfoResp.getName()) + .image(productInfoResp.getCoverImage()) + .price(price) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductDetailResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductDetailResp.java new file mode 100644 index 0000000..0780e6c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductDetailResp.java @@ -0,0 +1,35 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @ClassName ProductDetailResp + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/24 9:59 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class ProductDetailResp extends BaseEntity { + private Product product; + + private List attributeList; + + private List specifications; + + private List ruleList; + + private List breadcrumbList; + private List carouselImages; + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductInfoResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductInfoResp.java new file mode 100644 index 0000000..b58dfd0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/ProductInfoResp.java @@ -0,0 +1,113 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.product.domain.ProductAttributeInfo; +import com.ruoyi.product.domain.ProductInfo; +import com.ruoyi.product.domain.ProductSku; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import java.util.List; + +/** + * 商品信息对象 product_info + * + * @author gtl + * @date 2024-03-9 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "ProductInfoResp", description = "商品信息") +public class ProductInfoResp extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 商品编号 */ + + @ApiModelProperty(name = "商品编号", value = "商品编号") + private Long id; + + /** 商品型号 */ + + @ApiModelProperty(name = "商品型号", value = "商品型号", required = true) + private String name; + + /** 商品品牌 */ + + @ApiModelProperty(name = "商品品牌", value = "商品品牌", required = true) + private Long brandId; + + /** 商品描述 */ + + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String intro; + + /** 主类型 */ + + @ApiModelProperty(name = "主类型", value = "主类型", required = true) + private Long masterType; + + /** 父类型 */ + + @ApiModelProperty(name = "父类型", value = "父类型", required = true) + private Long parentType; + + /** 当前类型 */ + + @ApiModelProperty(name = "当前类型", value = "当前类型", required = true) + private Long thisType; + + /** 商品封面 */ + + @ApiModelProperty(name = "商品封面", value = "商品封面") + private String coverImage; + + /** 商品轮播图 */ + + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 是否上架 */ + + @ApiModelProperty(name = "是否上架", value = "是否上架", required = true) + private String isUpShelf; + + /** 属性值集合 */ + + @ApiModelProperty(name = "属性值集合", value = "属性值集合") + private List attributeValueList; + + /** 规格集合 */ + + @ApiModelProperty(name = "规格集合", value = "规格集合") + private List specificationList; + + /** 商品sku集合 */ + + @ApiModelProperty(name = "商品sku集合", value = "商品sku集合") + private List productSkuList; + + public static ProductInfoResp buildResp(ProductInfo productInfo, List productAttributeInfoList, List specificationList, List productSkuList) { + return ProductInfoResp.builder() + .id(productInfo.getId()) + .name(productInfo.getName()) + .brandId(productInfo.getBrandId()) + .intro(productInfo.getIntro()) + .masterType(productInfo.getMasterType()) + .parentType(productInfo.getParentType()) + .thisType(productInfo.getThisType()) + .coverImage(productInfo.getCoverImage()) + .carouselImages(productInfo.getCarouselImages()) + .isUpShelf(productInfo.getIsUpShelf()) + .attributeValueList(productAttributeInfoList) + .specificationList(specificationList) + .productSkuList(productSkuList) + .remark(productInfo.getRemark()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Rule.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Rule.java new file mode 100644 index 0000000..f4d02d7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Rule.java @@ -0,0 +1,35 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.product.domain.resp.ProductDetailResp; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @ClassName Rule + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/24 10:29 + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class Rule { + private Long id; + private String radio; + private String ruleName; + private List valueList; + + public Rule ruleBuild(Long id,String ruleName,List valueList){ + return Rule.builder() + .id(id) + .ruleName(ruleName) + .valueList(valueList) + .build(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/RuleValue.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/RuleValue.java new file mode 100644 index 0000000..8291051 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/RuleValue.java @@ -0,0 +1,18 @@ +package com.ruoyi.product.domain.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ClassName RuleValue + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/24 10:31 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RuleValue { + private String value; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Specification.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Specification.java new file mode 100644 index 0000000..764a543 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/Specification.java @@ -0,0 +1,36 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.product.domain.ProductSku; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.math.BigDecimal; +import java.util.function.Supplier; + +/** + * @ClassName Specification + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/24 10:28 + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class Specification { + private Long id; + private String name; + private BigDecimal price; + private Long inventory; + + public Specification specificationBuild(String name, ProductSku productSku){ + return Specification.builder() + .id(productSku.getSpecificationGroupId()) + .inventory(productSku.getInventory()) + .name(name) + .price(productSku.getPrice()) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/SpecificationInfoResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/SpecificationInfoResp.java new file mode 100644 index 0000000..d7e525a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-common/src/main/java/com/ruoyi/product/domain/resp/SpecificationInfoResp.java @@ -0,0 +1,44 @@ +package com.ruoyi.product.domain.resp; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * 规格对象 specification_info + * + * @author gtl + * @date 2024-02-29 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "SpecificationInfoResp", description = "规格") +public class SpecificationInfoResp extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 规格名称 */ + + @ApiModelProperty(name = "规格名称", value = "规格名称", required = true) + private String name; + + /** 规格值集合 */ + + @ApiModelProperty(name = "规格值集合", value = "规格值集合", required = true) + private List valueList; + + public static SpecificationInfoResp buildResp(String name, List list) { + return SpecificationInfoResp.builder() + .name(name) + .valueList(list) + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-remote/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-remote/pom.xml new file mode 100644 index 0000000..f79cf63 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-remote/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + com.muyu + ruoyi-modules + 3.6.3 + ../../pom.xml + + + ruoyi-product-remote + + + 17 + 17 + UTF-8 + + + + + com.muyu + ruoyi-product-common + 1.0-SNAPSHOT + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/pom.xml new file mode 100644 index 0000000..b8e4100 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/pom.xml @@ -0,0 +1,121 @@ + + + 4.0.0 + + com.muyu + ruoyi-modules + 3.6.3 + ../../pom.xml + + + ruoyi-product-server + + + 17 + 17 + UTF-8 + + + + + com.muyu + ruoyi-product-cache + + + + + com.muyu + ruoyi-product-common + 1.0-SNAPSHOT + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-datasource + + + + + com.muyu + muyu-common-datascope + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/MuYuProductApplication.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/MuYuProductApplication.java new file mode 100644 index 0000000..28a2d99 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/MuYuProductApplication.java @@ -0,0 +1,22 @@ +package com.ruoyi.product; + +import com.ruoyi.common.security.annotation.EnableCustomConfig; +import com.ruoyi.common.security.annotation.EnableMyFeignClients; +import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 系统模块 + * + * @author muyu + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class MuYuProductApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuProductApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/Test.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/Test.java new file mode 100644 index 0000000..a01d7ef --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/Test.java @@ -0,0 +1,51 @@ +package com.ruoyi.product; + +import lombok.SneakyThrows; + +import java.util.concurrent.CompletableFuture; + +/** + * @ClassName Test + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/3/28 17:02 + */ +public class Test { + public static void main(String[] args) { + thenRunAsync(); + } + + @SneakyThrows + public static void thenRunAsync(){ + CompletableFuture cf1 = CompletableFuture.supplyAsync(() -> { + System.out.println(Thread.currentThread() + "cf1 do ...."); + cf1(); + return 1; + }); + CompletableFuture cf2 = cf1.thenRunAsync(() -> { + System.out.println(Thread.currentThread() + "cf2 do ...."); + cf2(); + }); + + System.out.println("cf1结果:"+cf1.get()); + System.out.println("cf2结果:"+cf2.get()); + } + + public static void cf1(){ + try { + Thread.sleep(100); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public static void cf2(){ + try { + Thread.sleep(100); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/cache/impl/ProjectInfoDataImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/cache/impl/ProjectInfoDataImpl.java new file mode 100644 index 0000000..90d2378 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/cache/impl/ProjectInfoDataImpl.java @@ -0,0 +1,29 @@ +package com.ruoyi.product.cache.impl; + +import com.muyu.product.cache.ProjectInfoData; +import com.ruoyi.product.domain.ProductInfo; +import com.ruoyi.product.service.ProductInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author DongZl + * @description: 缓存数据获取 + * @Date 2024-3-27 下午 03:37 + */ +@Service +public class ProjectInfoDataImpl implements ProjectInfoData { + + @Autowired + private ProductInfoService productInfoService; + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + @Override + public ProductInfo getData (Long key) { + return productInfoService.getById(key); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeGroupController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeGroupController.java new file mode 100644 index 0000000..17fb010 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeGroupController.java @@ -0,0 +1,115 @@ +package com.ruoyi.product.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.product.domain.model.AttributeGroupEditModel; +import com.ruoyi.product.domain.model.AttributeGroupSaveModel; +import com.ruoyi.product.domain.resp.AttributeGroupInfoResp; +import com.ruoyi.product.domain.resp.AttributeGroupPageResp; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.domain.req.AttributeGroupQueryReq; +import com.ruoyi.product.domain.req.AttributeGroupSaveReq; +import com.ruoyi.product.domain.req.AttributeGroupEditReq; +import com.ruoyi.product.service.AttributeGroupService; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 属性组Controller + * + * @author gtl + * @date 2024-02-29 + */ +@Api(tags = "属性组") +@RestController +@RequestMapping("/attributeGroup") +public class AttributeGroupController extends BaseController { + @Autowired + private AttributeGroupService attributeGroupService; + + /** + * 查询属性组列表,分页 + */ + @ApiOperation("获取属性组列表") + @RequiresPermissions("product:attributeGroup:list") + @GetMapping("/list") + public Result> page(AttributeGroupQueryReq attributeGroupQueryReq) { + if(null==attributeGroupQueryReq.getParams().get("isPage")){ + startPage(); + } + return Result.success(attributeGroupService.page(AttributeGroup.queryBuild(attributeGroupQueryReq))); + } + + /** + * 导出属性组列表 + */ + @ApiOperation("导出属性组列表") + @RequiresPermissions("product:attributeGroup:export") + @Log(title = "属性组", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, AttributeGroup attributeGroup) { + List list = attributeGroupService.list(attributeGroup); + ExcelUtil util = new ExcelUtil(AttributeGroup.class); + util.exportExcel(response, list, "属性组数据"); + } + + /** + * 获取属性组详细信息 + */ + @ApiOperation("获取属性组详细信息") + @RequiresPermissions("product:attributeGroup:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(attributeGroupService.getInfoById(id)); + } + + /** + * 新增属性组 + */ + @RequiresPermissions("product:attributeGroup:add") + @Log(title = "属性组", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增属性组") + public Result add(@RequestBody AttributeGroupSaveReq attributeGroupSaveReq) { + return toAjax(attributeGroupService.save(AttributeGroupSaveModel.saveModelBuild(attributeGroupSaveReq))); + } + + /** + * 修改属性组 + */ + @RequiresPermissions("product:attributeGroup:edit") + @Log(title = "属性组", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改属性组") + public Result edit(@PathVariable Long id, @RequestBody AttributeGroupEditReq attributeGroupEditReq) { + return toAjax(attributeGroupService.updateById(AttributeGroupEditModel.editModelBuild(id,attributeGroupEditReq))); + } + + /** + * 删除属性组 + */ + @RequiresPermissions("product:attributeGroup:remove") + @Log(title = "属性组", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除属性组") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(attributeGroupService.removeBatch(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeInfoController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeInfoController.java new file mode 100644 index 0000000..10fc188 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/AttributeInfoController.java @@ -0,0 +1,113 @@ +package com.ruoyi.product.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.security.utils.SecurityUtils; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.AttributeInfo; +import com.ruoyi.product.domain.req.AttributeInfoQueryReq; +import com.ruoyi.product.domain.req.AttributeInfoSaveReq; +import com.ruoyi.product.domain.req.AttributeInfoEditReq; +import com.ruoyi.product.service.AttributeInfoService; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 属性Controller + * + * @author gtl + * @date 2024-02-29 + */ +@Api(tags = "属性") +@RestController +@RequestMapping("/attributeInfo") +public class AttributeInfoController extends BaseController { + @Autowired + private AttributeInfoService attributeInfoService; + + /** + * 查询属性列表,带分页 + */ + @ApiOperation("获取属性列表") + @RequiresPermissions("product:attributeInfo:list") + @GetMapping("/list") + public Result> list(AttributeInfoQueryReq attributeInfoQueryReq) { + if(null==attributeInfoQueryReq.getParams().get("isPage")){ + startPage(); + } + List list = attributeInfoService.list(AttributeInfo.queryBuild(attributeInfoQueryReq)); + return getDataTable(list); + } + + /** + * 导出属性列表 + */ + @ApiOperation("导出属性列表") + @RequiresPermissions("product:attributeInfo:export") + @Log(title = "属性", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, AttributeInfo attributeInfo) { + List list = attributeInfoService.list(attributeInfo); + ExcelUtil util = new ExcelUtil(AttributeInfo.class); + util.exportExcel(response, list, "属性数据"); + } + + /** + * 获取属性详细信息 + */ + @ApiOperation("获取属性详细信息") + @RequiresPermissions("product:attributeInfo:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(attributeInfoService.getById(id)); + } + + /** + * 新增属性 + */ + @RequiresPermissions("product:attributeInfo:add") + @Log(title = "属性", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增属性") + public Result add(@RequestBody AttributeInfoSaveReq attributeInfoSaveReq) { + return attributeInfoService.saveAttribute(AttributeInfo.saveBuild(attributeInfoSaveReq, SecurityUtils::getUsername)); + } + + /** + * 修改属性 + */ + @RequiresPermissions("product:attributeInfo:edit") + @Log(title = "属性", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改属性") + public Result edit(@PathVariable Long id, @RequestBody AttributeInfoEditReq attributeInfoEditReq) { + return toAjax(attributeInfoService.updateById(AttributeInfo.editBuild(id,attributeInfoEditReq,SecurityUtils::getUsername))); + } + + /** + * 删除属性 + */ + @RequiresPermissions("product:attributeInfo:remove") + @Log(title = "属性", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除属性") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(attributeInfoService.removeBatchByIds(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/BrandInfoController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/BrandInfoController.java new file mode 100644 index 0000000..6735ff1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/BrandInfoController.java @@ -0,0 +1,113 @@ +package com.ruoyi.product.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.security.utils.SecurityUtils; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.BrandInfo; +import com.ruoyi.product.domain.req.BrandInfoQueryReq; +import com.ruoyi.product.domain.req.BrandInfoSaveReq; +import com.ruoyi.product.domain.req.BrandInfoEditReq; +import com.ruoyi.product.service.BrandInfoService; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 品牌Controller + * + * @author gtl + * @date 2024-03-07 + */ +@Api(tags = "品牌") +@RestController +@RequestMapping("/brand") +public class BrandInfoController extends BaseController { + @Autowired + private BrandInfoService brandInfoService; + + /** + * 查询品牌列表 + */ + @ApiOperation("获取品牌列表") + @RequiresPermissions("product:info:list") + @GetMapping("/list") + public Result> list(BrandInfoQueryReq brandInfoQueryReq) { + if(null==brandInfoQueryReq.getParams().get("isPage")){ + startPage(); + } + List list = brandInfoService.list(BrandInfo.queryBuild(brandInfoQueryReq)); + return getDataTable(list); + } + + /** + * 导出品牌列表 + */ + @ApiOperation("导出品牌列表") + @RequiresPermissions("product:info:export") + @Log(title = "品牌", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BrandInfo brandInfo) { + List list = brandInfoService.list(brandInfo); + ExcelUtil util = new ExcelUtil(BrandInfo.class); + util.exportExcel(response, list, "品牌数据"); + } + + /** + * 获取品牌详细信息 + */ + @ApiOperation("获取品牌详细信息") + @RequiresPermissions("product:info:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(brandInfoService.getById(id)); + } + + /** + * 新增品牌 + */ + @RequiresPermissions("product:info:add") + @Log(title = "品牌", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增品牌") + public Result add(@RequestBody BrandInfoSaveReq brandInfoSaveReq) { + return toAjax(brandInfoService.save(BrandInfo.saveBuild(brandInfoSaveReq, SecurityUtils::getUsername))); + } + + /** + * 修改品牌 + */ + @RequiresPermissions("product:info:edit") + @Log(title = "品牌", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改品牌") + public Result edit(@PathVariable Long id, @RequestBody BrandInfoEditReq brandInfoEditReq) { + return toAjax(brandInfoService.updateById(BrandInfo.editBuild(id,brandInfoEditReq, SecurityUtils::getUsername))); + } + + /** + * 删除品牌 + */ + @RequiresPermissions("product:info:remove") + @Log(title = "品牌", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除品牌") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(brandInfoService.removeBatchByIds(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/CategoryController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/CategoryController.java new file mode 100644 index 0000000..1ff1207 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/CategoryController.java @@ -0,0 +1,134 @@ +package com.ruoyi.product.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.product.domain.model.CategoryInfoEditModel; +import com.ruoyi.product.domain.model.CategoryInfoSaveModel; +import com.ruoyi.product.domain.resp.CategoryCommonDataResp; +import com.ruoyi.product.domain.resp.CategoryInfoResp; +import com.ruoyi.product.domain.resp.CategoryParentCommonDataResp; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.CategoryInfo; +import com.ruoyi.product.domain.req.CategorySaveReq; +import com.ruoyi.product.domain.req.CategoryEditReq; +import com.ruoyi.product.service.CategoryService; + +/** + * 品类Controller + * + * @author gtl + * @date 2024-02-29 + */ +@Api(tags = "品类") +@RestController +@RequestMapping("/category") +public class CategoryController extends BaseController { + @Autowired + private CategoryService categoryService; + + /** + * 查询品类列表 + */ + @ApiOperation("获取品类列表") + @RequiresPermissions("product:category:list") + @GetMapping("/list") + public Result> list(CategoryInfo category) { + List list = categoryService.list(category); + return Result.success(list); + } + + /** + * 导出品类列表 + */ + @ApiOperation("导出品类列表") + @RequiresPermissions("product:category:export") + @Log(title = "品类", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, CategoryInfo category) { + List list = categoryService.list(category); + ExcelUtil util = new ExcelUtil(CategoryInfo.class); + util.exportExcel(response, list, "品类数据"); + } + + /** + * 获取品类详细信息 + */ + @ApiOperation("获取品类详细信息") + @RequiresPermissions("product:category:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(categoryService.getCategoryInfoById(id)); + } + + /** + * 新增品类 + */ + @RequiresPermissions("product:category:add") + @Log(title = "品类", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增品类") + public Result add(@RequestBody CategorySaveReq categorySaveReq) { + return toAjax(categoryService.save(CategoryInfoSaveModel.saveModelBuild(categorySaveReq))); + } + + /** + * 修改品类 + */ + @RequiresPermissions("product:category:edit") + @Log(title = "品类", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改品类") + public Result edit(@PathVariable Long id, @RequestBody CategoryEditReq categoryEditReq) { + return toAjax(categoryService.updateById(CategoryInfoEditModel.editModelBuild(id,categoryEditReq))); + } + + /** + * 删除品类 + */ + @RequiresPermissions("product:category:remove") + @Log(title = "品类", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除品类") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(categoryService.removeBatch(ids)); + } + + /** + * 获取父类品类的详细信息 + */ + @ApiOperation("获取品类详细信息") + @RequiresPermissions("product:category:query") + @GetMapping(value = "/parentCommonData/{categoryId}") + @ApiImplicitParam(name = "categoryId", value = "categoryId", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class,example = "1") + public Result getParentCommonData(@PathVariable("categoryId") Long categoryId) { + return Result.success(categoryService.getParentCommonDataByCategoryId(categoryId)); + } + + /** + * 获取品类信息共有属性数据 + */ + @ApiOperation("获取品类信息共有属性数据") + @RequiresPermissions("product:category:query") + @GetMapping(value = "/commonData/{cateGoryId}") + @ApiImplicitParam(name = "cateGoryId", value = "cateGoryId", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getTemplateAttributeByCateGoryId(@PathVariable("cateGoryId") Long cateGoryId) { + return Result.success(categoryService.getTemplateAttributeByCateGoryId(cateGoryId)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductAttributeInfoController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductAttributeInfoController.java new file mode 100644 index 0000000..ca463f1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductAttributeInfoController.java @@ -0,0 +1,110 @@ +package com.ruoyi.product.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.ProductAttributeInfo; +import com.ruoyi.product.domain.req.ProductAttributeInfoQueryReq; +import com.ruoyi.product.domain.req.ProductAttributeInfoSaveReq; +import com.ruoyi.product.domain.req.ProductAttributeInfoEditReq; +import com.ruoyi.product.service.ProductAttributeInfoService; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 商品属性Controller + * + * @author gtl + * @date 2024-02-29 + */ +@Api(tags = "商品属性") +@RestController +@RequestMapping("/productAttributeInfo") +public class ProductAttributeInfoController extends BaseController { + @Autowired + private ProductAttributeInfoService productAttributeInfoService; + + /** + * 查询商品属性列表 + */ + @ApiOperation("获取商品属性列表") + @RequiresPermissions("product:productAttributeInfo:list") + @GetMapping("/list") + public Result> list(ProductAttributeInfoQueryReq productAttributeInfoQueryReq) { + startPage(); + List list = productAttributeInfoService.list(ProductAttributeInfo.queryBuild(productAttributeInfoQueryReq)); + return getDataTable(list); + } + + /** + * 导出商品属性列表 + */ + @ApiOperation("导出商品属性列表") + @RequiresPermissions("product:productAttributeInfo:export") + @Log(title = "商品属性", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ProductAttributeInfo productAttributeInfo) { + List list = productAttributeInfoService.list(productAttributeInfo); + ExcelUtil util = new ExcelUtil(ProductAttributeInfo.class); + util.exportExcel(response, list, "商品属性数据"); + } + + /** + * 获取商品属性详细信息 + */ + @ApiOperation("获取商品属性详细信息") + @RequiresPermissions("product:productAttributeInfo:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(productAttributeInfoService.getById(id)); + } + + /** + * 新增商品属性 + */ + @RequiresPermissions("product:productAttributeInfo:add") + @Log(title = "商品属性", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增商品属性") + public Result add(@RequestBody ProductAttributeInfoSaveReq productAttributeInfoSaveReq) { + return toAjax(productAttributeInfoService.save(ProductAttributeInfo.saveBuild(productAttributeInfoSaveReq))); + } + + /** + * 修改商品属性 + */ + @RequiresPermissions("product:productAttributeInfo:edit") + @Log(title = "商品属性", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改商品属性") + public Result edit(@PathVariable Long id, @RequestBody ProductAttributeInfoEditReq productAttributeInfoEditReq) { + return toAjax(productAttributeInfoService.updateById(ProductAttributeInfo.editBuild(id,productAttributeInfoEditReq))); + } + + /** + * 删除商品属性 + */ + @RequiresPermissions("product:productAttributeInfo:remove") + @Log(title = "商品属性", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除商品属性") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(productAttributeInfoService.removeBatchByIds(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductInfoController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductInfoController.java new file mode 100644 index 0000000..f830a47 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductInfoController.java @@ -0,0 +1,161 @@ +package com.ruoyi.product.controller; + +import java.util.Date; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + + +import com.muyu.product.cache.ProjectInfoCache; +import com.ruoyi.product.domain.model.ProductInfoEditModel; +import com.ruoyi.product.domain.model.ProductInfoSaveModel; +import com.ruoyi.product.domain.resp.Product; +import com.ruoyi.product.domain.resp.ProductDetailResp; +import com.ruoyi.product.domain.resp.ProductInfoResp; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.ProductInfo; +import com.ruoyi.product.domain.req.ProductInfoQueryReq; +import com.ruoyi.product.domain.req.ProductInfoSaveReq; +import com.ruoyi.product.domain.req.ProductInfoEditReq; +import com.ruoyi.product.service.ProductInfoService; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 商品信息Controller + * + * @author gtl + * @date 2024-02-29 + */ +@Api(tags = "商品信息") +@RestController +@RequestMapping("/productInfo") +public class ProductInfoController extends BaseController { + @Autowired + private ProductInfoService productInfoService; + + @Autowired + private ProjectInfoCache projectInfoCache; +// +// + + @ApiOperation("获取商品信息详细信息") + @GetMapping("/GetProjectInfo/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getProjectInfo(@PathVariable("id") Long id) { + ProjectInfoCache projectInfoCache = new ProjectInfoCache(); + return Result.success(projectInfoCache.get(id)); + } + + /** + * 查询商品信息列表 + */ + @ApiOperation("获取商品信息列表") + @RequiresPermissions("product:productInfo:list") + @GetMapping("/list") + public Result> list(ProductInfoQueryReq productInfoQueryReq) { + startPage(); + List list = productInfoService.list(ProductInfo.queryBuild(productInfoQueryReq)); + return getDataTable(list); + } + + /** + * 导出商品信息列表 + */ + @ApiOperation("导出商品信息列表") + @RequiresPermissions("product:productInfo:export") + @Log(title = "商品信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ProductInfo productInfo) { + List list = productInfoService.list(productInfo); + ExcelUtil util = new ExcelUtil(ProductInfo.class); + util.exportExcel(response, list, "商品信息数据"); + } + + /** + * 获取商品信息详细信息 + */ + @ApiOperation("获取商品信息详细信息") + @RequiresPermissions("product:productInfo:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(productInfoService.getInfoById(id)); + } + + /** + * 获取商品详情 + * @param id + * @return + */ + @ApiOperation("获取商品详情") +// @RequiresPermissions("product:productInfo:query") + @GetMapping(value = "/GetProductDetail/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getProductDetail(@PathVariable("id") Long id) { + long sta = new Date().getTime(); + ProductDetailResp productDetail = productInfoService.getProductDetail(id); + long end = new Date().getTime(); + System.out.println("===耗时:"+(end-sta)+"s"); + return Result.success(productDetail); + } + + + @ApiOperation("获取商品列表") +// @RequiresPermissions("product:productInfo:query") + @GetMapping(value = "/GetProductList") + public Result> getProductList() { + long sta = new Date().getTime(); + List productList = productInfoService.getProductList(); + long end = new Date().getTime(); + System.out.println("===耗时:"+(end-sta)+"s"); + return Result.success(productList); + } + + /** + * 新增商品信息 + */ + @RequiresPermissions("product:productInfo:add") + @Log(title = "商品信息", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增商品信息") + public Result add(@RequestBody ProductInfoSaveReq productInfoSaveReq) { + return toAjax(productInfoService.saveProductInfo(ProductInfoSaveModel.buildSaveModel(productInfoSaveReq))); + } + + /** + * 修改商品信息 + */ + @RequiresPermissions("product:productInfo:edit") + @Log(title = "商品信息", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改商品信息") + public Result edit(@PathVariable Long id, @RequestBody ProductInfoEditReq productInfoEditReq) { + return toAjax(productInfoService.updateProductInfoById(ProductInfoEditModel.buildEditModel(id,productInfoEditReq))); + } + + /** + * 删除商品信息 + */ + @RequiresPermissions("product:productInfo:remove") + @Log(title = "商品信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除商品信息") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(productInfoService.removeBatchProductByIds(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductSkuController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductSkuController.java new file mode 100644 index 0000000..57ee14c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/controller/ProductSkuController.java @@ -0,0 +1,84 @@ +package com.ruoyi.product.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.product.domain.ProductSku; +import com.ruoyi.product.domain.req.ProductSkuQueryReq; +import com.ruoyi.product.service.ProductSkuService; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 商品SKU数据Controller + * + * @author gtl + * @date 2024-02-29 + */ +@Api(tags = "商品SKU数据") +@RestController +@RequestMapping("/productSku") +public class ProductSkuController extends BaseController { + @Autowired + private ProductSkuService productSkuService; + + /** + * 查询商品SKU数据列表 + */ + @ApiOperation("获取商品SKU数据列表") + @RequiresPermissions("product:productSku:list") + @GetMapping("/list") + public Result> list(ProductSkuQueryReq productSkuQueryReq) { + startPage(); + List list = productSkuService.list(ProductSku.queryBuild(productSkuQueryReq)); + return getDataTable(list); + } + + /** + * 导出商品SKU数据列表 + */ + @ApiOperation("导出商品SKU数据列表") + @RequiresPermissions("product:productSku:export") + @Log(title = "商品SKU数据", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ProductSku productSku) { + List list = productSkuService.list(productSku); + ExcelUtil util = new ExcelUtil(ProductSku.class); + util.exportExcel(response, list, "商品SKU数据数据"); + } + + /** + * 获取商品SKU数据详细信息 + */ + @ApiOperation("获取商品SKU数据详细信息") + @RequiresPermissions("product:productSku:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(productSkuService.getById(id)); + } + + /** + * 删除商品SKU数据 + */ + @RequiresPermissions("product:productSku:remove") + @Log(title = "商品SKU数据", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除商品SKU数据") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(productSkuService.removeBatchByIds(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsAttributeInfoGroupMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsAttributeInfoGroupMapper.java new file mode 100644 index 0000000..0db213e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsAttributeInfoGroupMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AsAttributeInfoGroup; + +/** + * 属性与组中间Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsAttributeInfoGroupMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeGroupMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeGroupMapper.java new file mode 100644 index 0000000..09ec05e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeGroupMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AsCategoryAttributeGroup; + +/** + * 品类属性组中间Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsCategoryAttributeGroupMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeMapper.java new file mode 100644 index 0000000..0e6f78b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryAttributeMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AsCategoryAttribute; + +/** + * 品类属性中间Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsCategoryAttributeMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryBrandMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryBrandMapper.java new file mode 100644 index 0000000..9bb447e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsCategoryBrandMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AsCategoryBrand; + +/** + * 品类品牌中间Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsCategoryBrandMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsSpecificationInfoGroupMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsSpecificationInfoGroupMapper.java new file mode 100644 index 0000000..faa59d0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AsSpecificationInfoGroupMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AsSpecificationInfoGroup; + +/** + * 规格与组中间Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsSpecificationInfoGroupMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeGroupMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeGroupMapper.java new file mode 100644 index 0000000..a5abaae --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeGroupMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AttributeGroup; + +/** + * 属性组Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AttributeGroupMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeInfoMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeInfoMapper.java new file mode 100644 index 0000000..fa1c95a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/AttributeInfoMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.AttributeInfo; + +/** + * 属性Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AttributeInfoMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/BrandInfoMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/BrandInfoMapper.java new file mode 100644 index 0000000..eff211a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/BrandInfoMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.BrandInfo; + +/** + * 品牌Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface BrandInfoMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/CategoryMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/CategoryMapper.java new file mode 100644 index 0000000..e126e50 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/CategoryMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.CategoryInfo; + +/** + * 品类Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface CategoryMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductAttributeInfoMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductAttributeInfoMapper.java new file mode 100644 index 0000000..1d99f43 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductAttributeInfoMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.ProductAttributeInfo; + +/** + * 商品属性Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface ProductAttributeInfoMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductInfoMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductInfoMapper.java new file mode 100644 index 0000000..565e064 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductInfoMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.ProductInfo; + +/** + * 商品信息Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface ProductInfoMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductSkuMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductSkuMapper.java new file mode 100644 index 0000000..c662990 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/ProductSkuMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.ProductSku; + +/** + * 商品SKU数据Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface ProductSkuMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationGroupMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationGroupMapper.java new file mode 100644 index 0000000..2433cdb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationGroupMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.SpecificationGroup; + +/** + * 规格组Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface SpecificationGroupMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationInfoMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationInfoMapper.java new file mode 100644 index 0000000..c1d4d02 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/mapper/SpecificationInfoMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.product.domain.SpecificationInfo; + +/** + * 规格Mapper接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface SpecificationInfoMapper extends BaseMapper { + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsAttributeInfoGroupService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsAttributeInfoGroupService.java new file mode 100644 index 0000000..561b7b0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsAttributeInfoGroupService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.AsAttributeInfoGroup; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 属性与组中间Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsAttributeInfoGroupService extends IService { + /** + * 查询属性与组中间列表 + * + * @param asAttributeInfoGroup 属性与组中间 + * @return 属性与组中间集合 + */ + public List list(AsAttributeInfoGroup asAttributeInfoGroup); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeGroupService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeGroupService.java new file mode 100644 index 0000000..3d74c22 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeGroupService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.AsCategoryAttributeGroup; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 品类属性组中间Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsCategoryAttributeGroupService extends IService { + /** + * 查询品类属性组中间列表 + * + * @param asCategoryAttributeGroup 品类属性组中间 + * @return 品类属性组中间集合 + */ + public List list(AsCategoryAttributeGroup asCategoryAttributeGroup); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeService.java new file mode 100644 index 0000000..aee547e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryAttributeService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.AsCategoryAttribute; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 品类属性中间Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsCategoryAttributeService extends IService { + /** + * 查询品类属性中间列表 + * + * @param asCategoryAttribute 品类属性中间 + * @return 品类属性中间集合 + */ + public List list(AsCategoryAttribute asCategoryAttribute); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryBrandService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryBrandService.java new file mode 100644 index 0000000..26f87dd --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsCategoryBrandService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.AsCategoryBrand; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 品类品牌中间Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AsCategoryBrandService extends IService { + /** + * 查询品类品牌中间列表 + * + * @param asCategoryBrand 品类品牌中间 + * @return 品类品牌中间集合 + */ + public List list(AsCategoryBrand asCategoryBrand); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsSpecificationInfoGroupService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsSpecificationInfoGroupService.java new file mode 100644 index 0000000..4584e57 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AsSpecificationInfoGroupService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.AsSpecificationInfoGroup; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 规格与组中间Service接口 + * + * @author gtl + * @date 2024-03-08 + */ +public interface AsSpecificationInfoGroupService extends IService { + /** + * 查询规格与组中间列表 + * + * @param asSpecificationInfoGroup 规格与组中间 + * @return 规格与组中间集合 + */ + public List list(AsSpecificationInfoGroup asSpecificationInfoGroup); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeGroupService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeGroupService.java new file mode 100644 index 0000000..0f0cc8a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeGroupService.java @@ -0,0 +1,36 @@ +package com.ruoyi.product.service; + +import java.util.List; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.product.domain.AttributeGroup; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.product.domain.model.AttributeGroupEditModel; +import com.ruoyi.product.domain.model.AttributeGroupSaveModel; +import com.ruoyi.product.domain.resp.AttributeGroupInfoResp; +import com.ruoyi.product.domain.resp.AttributeGroupPageResp; + +/** + * 属性组Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AttributeGroupService extends IService { + /** + * 查询属性组列表 + * + * @param attributeGroup 属性组 + * @return 属性组集合 + */ + public List list(AttributeGroup attributeGroup); + public TableDataInfo page(AttributeGroup attributeGroup); + boolean save(AttributeGroupSaveModel attributeGroupSaveModel); + + boolean updateById(AttributeGroupEditModel attributeGroupEditModel); + + boolean removeBatch(List ids); + + AttributeGroupInfoResp getInfoById(Long id); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeInfoService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeInfoService.java new file mode 100644 index 0000000..c4ae7e9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/AttributeInfoService.java @@ -0,0 +1,25 @@ +package com.ruoyi.product.service; + +import java.util.List; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.product.domain.AttributeInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 属性Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface AttributeInfoService extends IService { + /** + * 查询属性列表 + * + * @param attributeInfo 属性 + * @return 属性集合 + */ + public List list(AttributeInfo attributeInfo); + + Result saveAttribute(AttributeInfo attributeInfo); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/BrandInfoService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/BrandInfoService.java new file mode 100644 index 0000000..6139e2d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/BrandInfoService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.BrandInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 品牌Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface BrandInfoService extends IService { + /** + * 查询品牌列表 + * + * @param brand 品牌 + * @return 品牌集合 + */ + public List list(BrandInfo brand); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/CategoryService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/CategoryService.java new file mode 100644 index 0000000..167ddbb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/CategoryService.java @@ -0,0 +1,74 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.CategoryInfo; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.product.domain.model.CategoryInfoEditModel; +import com.ruoyi.product.domain.model.CategoryInfoSaveModel; +import com.ruoyi.product.domain.resp.CategoryCommonDataResp; +import com.ruoyi.product.domain.resp.CategoryInfoResp; +import com.ruoyi.product.domain.resp.CategoryParentCommonDataResp; + +/** + * 品类Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface CategoryService extends IService { + /** + * 查询品类列表 + * + * @param category 品类 + * @return 品类集合 + */ + public List list(CategoryInfo category); + + /** + * 保存品类信息 + * + * @param categoryInfoSaveModel 品类保存模型 + * @return 是否添加成功 + */ + public boolean save(CategoryInfoSaveModel categoryInfoSaveModel); + + /** + * 查询父类品类公共数据 + * + * @param categoryId 品类编号 + * @return 公共数据集合 + */ + CategoryParentCommonDataResp getParentCommonDataByCategoryId(Long categoryId); + + /** + * 修改品类信息 + * + * @param categoryInfoEditModel 品类修改模型 + * @return 是否 + */ + boolean updateById(CategoryInfoEditModel categoryInfoEditModel); + + /** + * 批量删除品类 + * + * @param ids 品类编号集合 + * @return 是否 + */ + boolean removeBatch(List ids); + + /** + * 通过id获取品类数据 + * + * @param id 品类编号 + * @return 品类信息 + */ + CategoryInfoResp getCategoryInfoById(Long id); + + /** + * 通过品类ID获取品类共有属性 + * + * @param cateGoryId 品类编号 + * @return 品类共有属性 + */ + CategoryCommonDataResp getTemplateAttributeByCateGoryId(Long cateGoryId); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductAttributeInfoService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductAttributeInfoService.java new file mode 100644 index 0000000..6b613cc --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductAttributeInfoService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.ProductAttributeInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 商品属性Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface ProductAttributeInfoService extends IService { + /** + * 查询商品属性列表 + * + * @param productAttributeInfo 商品属性 + * @return 商品属性集合 + */ + public List list(ProductAttributeInfo productAttributeInfo); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductInfoService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductInfoService.java new file mode 100644 index 0000000..96f3b95 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductInfoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.ProductInfo; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.product.domain.model.ProductInfoEditModel; +import com.ruoyi.product.domain.model.ProductInfoSaveModel; +import com.ruoyi.product.domain.resp.Product; +import com.ruoyi.product.domain.resp.ProductDetailResp; +import com.ruoyi.product.domain.resp.ProductInfoResp; + +/** + * 商品信息Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface ProductInfoService extends IService { + /** + * 查询商品信息列表 + * + * @param productInfo 商品信息 + * @return 商品信息集合 + */ + List list(ProductInfo productInfo); + + /** + * 存储商品信息 + * + * @param productInfoSaveModel 商品存储数据 + * @return 是否 + */ + boolean saveProductInfo(ProductInfoSaveModel productInfoSaveModel); + + /** + * 批量删除商品信息 + * + * @param ids 商品id集合 + * @return 是否 + */ + boolean removeBatchProductByIds(List ids); + + /** + * 通过id获取商品信息 + * + * @param id 商品id + * @return 商品信息 + */ + ProductInfoResp getInfoById(Long id); + + /** + * 通过id修改商品信息 + * + * @param productInfoEditModel 商品修改数据 + * @return 是否 + */ + boolean updateProductInfoById(ProductInfoEditModel productInfoEditModel); + + ProductDetailResp getProductDetail(Long id); + + List getProductList(); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductSkuService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductSkuService.java new file mode 100644 index 0000000..a09a2b3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/ProductSkuService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.ProductSku; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 商品SKU数据Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface ProductSkuService extends IService { + /** + * 查询商品SKU数据列表 + * + * @param productSku 商品SKU数据 + * @return 商品SKU数据集合 + */ + public List list(ProductSku productSku); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationGroupService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationGroupService.java new file mode 100644 index 0000000..3533301 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationGroupService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.SpecificationGroup; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 规格组Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface SpecificationGroupService extends IService { + /** + * 查询规格组列表 + * + * @param specificationGroup 规格组 + * @return 规格组集合 + */ + public List list(SpecificationGroup specificationGroup); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationInfoService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationInfoService.java new file mode 100644 index 0000000..b5d7d52 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/SpecificationInfoService.java @@ -0,0 +1,22 @@ +package com.ruoyi.product.service; + +import java.util.List; +import com.ruoyi.product.domain.SpecificationInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 规格Service接口 + * + * @author gtl + * @date 2024-02-29 + */ +public interface SpecificationInfoService extends IService { + /** + * 查询规格列表 + * + * @param specificationInfo 规格 + * @return 规格集合 + */ + public List list(SpecificationInfo specificationInfo); + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsAttributeInfoGroupServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsAttributeInfoGroupServiceImpl.java new file mode 100644 index 0000000..2e253c7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsAttributeInfoGroupServiceImpl.java @@ -0,0 +1,48 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AsAttributeInfoGroupMapper; +import com.ruoyi.product.domain.AsAttributeInfoGroup; +import com.ruoyi.product.service.AsAttributeInfoGroupService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 属性与组中间Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class AsAttributeInfoGroupServiceImpl extends ServiceImpl implements AsAttributeInfoGroupService { + + /** + * 查询属性与组中间列表 + * + * @param asAttributeInfoGroup 属性与组中间 + * @return 属性与组中间 + */ + @Override + public List list(AsAttributeInfoGroup asAttributeInfoGroup) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(asAttributeInfoGroup.getAttributeId())){ + queryWrapper.eq(AsAttributeInfoGroup::getAttributeId, asAttributeInfoGroup.getAttributeId()); + } + + if (ObjUtils.notNull(asAttributeInfoGroup.getAttributeGroupId())){ + queryWrapper.eq(AsAttributeInfoGroup::getAttributeGroupId, asAttributeInfoGroup.getAttributeGroupId()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeGroupServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeGroupServiceImpl.java new file mode 100644 index 0000000..2091b7c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeGroupServiceImpl.java @@ -0,0 +1,48 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AsCategoryAttributeGroupMapper; +import com.ruoyi.product.domain.AsCategoryAttributeGroup; +import com.ruoyi.product.service.AsCategoryAttributeGroupService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 品类属性组中间Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class AsCategoryAttributeGroupServiceImpl extends ServiceImpl implements AsCategoryAttributeGroupService { + + /** + * 查询品类属性组中间列表 + * + * @param asCategoryAttributeGroup 品类属性组中间 + * @return 品类属性组中间 + */ + @Override + public List list(AsCategoryAttributeGroup asCategoryAttributeGroup) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(asCategoryAttributeGroup.getCategoryId())){ + queryWrapper.eq(AsCategoryAttributeGroup::getCategoryId, asCategoryAttributeGroup.getCategoryId()); + } + + if (ObjUtils.notNull(asCategoryAttributeGroup.getAttributeGroupId())){ + queryWrapper.eq(AsCategoryAttributeGroup::getAttributeGroupId, asCategoryAttributeGroup.getAttributeGroupId()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeServiceImpl.java new file mode 100644 index 0000000..3863cef --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryAttributeServiceImpl.java @@ -0,0 +1,48 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AsCategoryAttributeMapper; +import com.ruoyi.product.domain.AsCategoryAttribute; +import com.ruoyi.product.service.AsCategoryAttributeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 品类属性中间Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class AsCategoryAttributeServiceImpl extends ServiceImpl implements AsCategoryAttributeService { + + /** + * 查询品类属性中间列表 + * + * @param asCategoryAttribute 品类属性中间 + * @return 品类属性中间 + */ + @Override + public List list(AsCategoryAttribute asCategoryAttribute) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(asCategoryAttribute.getCategoryId())){ + queryWrapper.eq(AsCategoryAttribute::getCategoryId, asCategoryAttribute.getCategoryId()); + } + + if (ObjUtils.notNull(asCategoryAttribute.getAttributeId())){ + queryWrapper.eq(AsCategoryAttribute::getAttributeId, asCategoryAttribute.getAttributeId()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryBrandServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryBrandServiceImpl.java new file mode 100644 index 0000000..a239041 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsCategoryBrandServiceImpl.java @@ -0,0 +1,48 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AsCategoryBrandMapper; +import com.ruoyi.product.domain.AsCategoryBrand; +import com.ruoyi.product.service.AsCategoryBrandService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 品类品牌中间Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class AsCategoryBrandServiceImpl extends ServiceImpl implements AsCategoryBrandService { + + /** + * 查询品类品牌中间列表 + * + * @param asCategoryBrand 品类品牌中间 + * @return 品类品牌中间 + */ + @Override + public List list(AsCategoryBrand asCategoryBrand) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(asCategoryBrand.getCategoryId())){ + queryWrapper.eq(AsCategoryBrand::getCategoryId, asCategoryBrand.getCategoryId()); + } + + if (ObjUtils.notNull(asCategoryBrand.getBrandId())){ + queryWrapper.eq(AsCategoryBrand::getBrandId, asCategoryBrand.getBrandId()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsSpecificationInfoGroupServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsSpecificationInfoGroupServiceImpl.java new file mode 100644 index 0000000..8608e43 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AsSpecificationInfoGroupServiceImpl.java @@ -0,0 +1,52 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AsSpecificationInfoGroupMapper; +import com.ruoyi.product.domain.AsSpecificationInfoGroup; +import com.ruoyi.product.service.AsSpecificationInfoGroupService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 规格与组中间Service业务层处理 + * + * @author gtl + * @date 2024-03-08 + */ +@Slf4j +@Service +public class AsSpecificationInfoGroupServiceImpl extends ServiceImpl implements AsSpecificationInfoGroupService { + + /** + * 查询规格与组中间列表 + * + * @param asSpecificationInfoGroup 规格与组中间 + * @return 规格与组中间 + */ + @Override + public List list(AsSpecificationInfoGroup asSpecificationInfoGroup) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(asSpecificationInfoGroup.getSpecificationGroupId())){ + queryWrapper.eq(AsSpecificationInfoGroup::getSpecificationGroupId, asSpecificationInfoGroup.getSpecificationGroupId()); + } + + if (ObjUtils.notNull(asSpecificationInfoGroup.getSpecificationId())){ + queryWrapper.eq(AsSpecificationInfoGroup::getSpecificationId, asSpecificationInfoGroup.getSpecificationId()); + } + + if (ObjUtils.notNull(asSpecificationInfoGroup.getValue())){ + queryWrapper.eq(AsSpecificationInfoGroup::getValue, asSpecificationInfoGroup.getValue()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeGroupServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeGroupServiceImpl.java new file mode 100644 index 0000000..03ca12c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeGroupServiceImpl.java @@ -0,0 +1,164 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.utils.ObjUtils; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.AsAttributeInfoGroup; +import com.ruoyi.product.domain.model.AttributeGroupEditModel; +import com.ruoyi.product.domain.model.AttributeGroupSaveModel; +import com.ruoyi.product.domain.resp.AttributeGroupInfoResp; +import com.ruoyi.product.domain.resp.AttributeGroupPageResp; +import com.ruoyi.product.mapper.AsAttributeInfoGroupMapper; +import com.ruoyi.product.mapper.AttributeInfoMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AttributeGroupMapper; +import com.ruoyi.product.domain.AttributeGroup; +import com.ruoyi.product.service.AttributeGroupService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; + +/** + * 属性组Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class AttributeGroupServiceImpl extends ServiceImpl implements AttributeGroupService { + + @Autowired + private AsAttributeInfoGroupMapper asAttributeInfoGroupMapper; + + @Autowired + private AttributeInfoMapper attributeInfoMapper; + /** + * 查询属性组列表 + * + * @param attributeGroup 属性组 + * @return 属性组 + */ + @Override + public List list(AttributeGroup attributeGroup) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(attributeGroup.getName())){ + queryWrapper.like(AttributeGroup::getName, attributeGroup.getName()); + } + + if (ObjUtils.notNull(attributeGroup.getStatus())){ + queryWrapper.eq(AttributeGroup::getStatus, attributeGroup.getStatus()); + } + + + return list(queryWrapper); + } + + /** + * 分页查询属性组列表 + * + * @param group 查询数据 + * @return 属性组数据 + */ + @Override + public TableDataInfo page(AttributeGroup group) { + List respList = this.list(group).stream().map(attributeGroup -> + AttributeGroupPageResp.groupBuild(attributeGroup, + asAttributeInfoGroupMapper.selectList(new LambdaQueryWrapper() + .eq(AsAttributeInfoGroup::getAttributeGroupId, attributeGroup.getId())).stream().map( + asAttributeInfoGroup -> attributeInfoMapper.selectById(asAttributeInfoGroup.getAttributeId()) + ).toList())).toList(); + PageInfo pageInfo = new PageInfo<>(respList); + return TableDataInfo.builder() + .total(pageInfo.getTotal()) + .rows(pageInfo.getList()) + .build(); + } + + /** + * 添加属性组 + * + * @param attributeGroupSaveModel 属性组添加模型 + * @return 是否 + */ + @Override + @Transactional + public boolean save(AttributeGroupSaveModel attributeGroupSaveModel) { + Assert.isTrue(ObjUtils.notNull(attributeGroupSaveModel),"属性组添加数据不能为空"); + //创建属性组对象并保存数据 + AttributeGroup attributeGroup = AttributeGroupSaveModel.buildAttributeGroup(attributeGroupSaveModel, SecurityUtils::getUsername); + boolean save = this.save(attributeGroup); + //处理中间表数据 + attributeGroupSaveModel.getAttributeIdList() + .stream().map(aLong -> AsAttributeInfoGroup.saveBuild(aLong,attributeGroup.getId(),SecurityUtils::getUsername)).toList() + .forEach(asAttributeInfoGroupMapper::insert); + return save; + } + + /** + * 修改属性组 + * + * @param attributeGroupEditModel 属性组修改模型 + * @return 是否 + */ + @Override + @Transactional + public boolean updateById(AttributeGroupEditModel attributeGroupEditModel) { + Assert.isTrue(ObjUtils.notNull(attributeGroupEditModel),"属性组修改数据不能为空"); + //修改属性组 + AttributeGroup attributeGroup = AttributeGroupEditModel.buildAttributeGroup(attributeGroupEditModel,SecurityUtils::getUsername); + boolean update = this.updateById(attributeGroup); + //处理中间表 + asAttributeInfoGroupMapper.delete(new LambdaQueryWrapper().eq(AsAttributeInfoGroup::getAttributeGroupId,attributeGroupEditModel.getId())); + attributeGroupEditModel.getAttributeIdList() + .stream().map(aLong -> AsAttributeInfoGroup.saveBuild(aLong,attributeGroup.getId(),SecurityUtils::getUsername)).toList() + .forEach(asAttributeInfoGroupMapper::insert); + return update; + } + + /** + * 通过编号批量删除属性组 + * + * @param ids 属性组编号集合 + * @return 是否 + */ + @Override + @Transactional + public boolean removeBatch(List ids) { + Assert.isTrue(ids != null && !ids.isEmpty(),"属性组ids不能为空"); + //删除属性组表 + boolean removed = this.removeBatchByIds(ids); + //处理中间表 + ids.forEach(id->asAttributeInfoGroupMapper.delete(new LambdaQueryWrapper() + .eq(AsAttributeInfoGroup::getAttributeGroupId,id))); + return removed; + } + + /** + * 通过id查询属性组数据 + * + * @param id 属性组编号 + * @return 属性组数据 + */ + @Override + public AttributeGroupInfoResp getInfoById(Long id) { + Assert.isTrue(ObjUtils.notNull(id),"属性组id不能为空"); + //获取属性组 + AttributeGroup attributeGroup = getById(id); + //向集合中添加中间表数据 + return AttributeGroupInfoResp.groupBuild(attributeGroup, + asAttributeInfoGroupMapper.selectList(new LambdaQueryWrapper() + .eq(AsAttributeInfoGroup::getAttributeGroupId, attributeGroup.getId())).stream().map( + asAttributeInfoGroup -> attributeInfoMapper.selectById(asAttributeInfoGroup.getAttributeId()) + ).toList()); + } + + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeInfoServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeInfoServiceImpl.java new file mode 100644 index 0000000..8dca9aa --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/AttributeInfoServiceImpl.java @@ -0,0 +1,50 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.AttributeInfoMapper; +import com.ruoyi.product.domain.AttributeInfo; +import com.ruoyi.product.service.AttributeInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 属性Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class AttributeInfoServiceImpl extends ServiceImpl implements AttributeInfoService { + + /** + * 查询属性列表 + * + * @param attributeInfo 属性 + * @return 属性 + */ + @Override + public List list(AttributeInfo attributeInfo) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + if (ObjUtils.notNull(attributeInfo.getName())){ + queryWrapper.like(AttributeInfo::getName, attributeInfo.getName()); + } + + return list(queryWrapper); + } + + @Override + public Result saveAttribute(AttributeInfo attributeInfo) { + //判断属性名是否存在 + List list = this.list(new LambdaQueryWrapper().eq(AttributeInfo::getName, attributeInfo.getName())); + if(list.isEmpty()){ + return this.save(attributeInfo)?Result.success(null!=attributeInfo.getParams().get("isReturn")?attributeInfo.getId():null):Result.error("操作失败"); + } + return Result.error("该属性已存在"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/BrandInfoServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/BrandInfoServiceImpl.java new file mode 100644 index 0000000..a3eeaee --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/BrandInfoServiceImpl.java @@ -0,0 +1,52 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.BrandInfoMapper; +import com.ruoyi.product.domain.BrandInfo; +import com.ruoyi.product.service.BrandInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 品牌Service业务层处理 + * + * @author gtl + * @date 2024-03-07 + */ +@Slf4j +@Service +public class BrandInfoServiceImpl extends ServiceImpl implements BrandInfoService { + + /** + * 查询品牌列表 + * + * @param brandInfo 品牌 + * @return 品牌 + */ + @Override + public List list(BrandInfo brandInfo) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(brandInfo.getName())){ + queryWrapper.like(BrandInfo::getName, brandInfo.getName()); + } + + if (ObjUtils.notNull(brandInfo.getStatus())){ + queryWrapper.eq(BrandInfo::getStatus, brandInfo.getStatus()); + } + + if (ObjUtils.notNull(brandInfo.getIntro())){ + queryWrapper.eq(BrandInfo::getIntro, brandInfo.getIntro()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/CategoryServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/CategoryServiceImpl.java new file mode 100644 index 0000000..2fc18d6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/CategoryServiceImpl.java @@ -0,0 +1,385 @@ +package com.ruoyi.product.service.impl; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.utils.ObjUtils; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.*; +import com.ruoyi.product.domain.base.CategoryBase; +import com.ruoyi.product.domain.model.CategoryInfoEditModel; +import com.ruoyi.product.domain.model.CategoryInfoSaveModel; +import com.ruoyi.product.domain.model.TemplateAttributeGroupModel; +import com.ruoyi.product.domain.model.TemplateAttributeModel; +import com.ruoyi.product.domain.resp.CategoryCommonDataResp; +import com.ruoyi.product.domain.resp.CategoryInfoResp; +import com.ruoyi.product.domain.resp.CategoryParentCommonDataResp; +import com.ruoyi.product.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.CategoryMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; + + +/** + * 品类Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class CategoryServiceImpl extends ServiceImpl implements CategoryService { + + @Autowired + private AsCategoryAttributeGroupService asCategoryAttributeGroupService; + + @Autowired + private AttributeGroupService attributeGroupService; + + @Autowired + private AsCategoryAttributeService asCategoryAttributeService; + + @Autowired + private AttributeInfoService attributeInfoService; + + @Autowired + private AsCategoryBrandService asCategoryBrandService; + + @Autowired + private BrandInfoService brandService; + + @Autowired + private AsAttributeInfoGroupService asAttributeInfoGroupService; + + @Autowired + private RedisTemplate redisTemplate; + + /** + * 查询品类列表 + * + * @param category 品类 + * @return 品类 + */ + @Override + public List list(CategoryInfo category) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + if (ObjUtils.notNull(category.getName())){ + queryWrapper.like(CategoryInfo::getName, category.getName()); + } + + if (ObjUtils.notNull(category.getParentId())){ + queryWrapper.eq(CategoryInfo::getParentId, category.getParentId()); + } + + if (ObjUtils.notNull(category.getStatus())){ + queryWrapper.eq(CategoryInfo::getStatus, category.getStatus()); + } + + if (ObjUtils.notNull(category.getIntro())){ + queryWrapper.eq(CategoryInfo::getIntro, category.getIntro()); + } + + return list(queryWrapper); + } + + /** + * 添加品类 + * + * @param categoryInfoSaveModel 品类添加模型 + * @return 是否 + */ + @Override + @Transactional + public boolean save(CategoryInfoSaveModel categoryInfoSaveModel) { + Assert.isTrue(ObjUtils.notNull(categoryInfoSaveModel),"品类新增数据不能为空"); + //存储品类信息(必要) + CategoryInfo categoryInfo=categoryInfoSaveModel.buildCategoryInfo(categoryInfoSaveModel, SecurityUtils::getUsername); + boolean save = this.save(categoryInfo); + //添加中间表(非必要) + List attributeIdList = categoryInfoSaveModel.getAttributeIdList(); + if(!attributeIdList.isEmpty()){ + //属性 + attributeIdList.stream() + .map(aLong -> AsCategoryAttribute.saveBuild(aLong,categoryInfo.getId(),SecurityUtils::getUsername)).toList() + .forEach(asCategoryAttributeService::save); + } + List attributeGroupIdList = categoryInfoSaveModel.getAttributeGroupIdList(); + if(!attributeGroupIdList.isEmpty()){ + //属性组 + attributeGroupIdList.stream() + .map(aLong -> AsCategoryAttributeGroup.saveBuild(aLong,categoryInfo.getId(),SecurityUtils::getUsername)).toList() + .forEach(asCategoryAttributeGroupService::save); + } + List brandInfoIdList = categoryInfoSaveModel.getBrandInfoIdList(); + if(!brandInfoIdList.isEmpty()){ + //品牌 + brandInfoIdList.stream() + .map(aLong -> AsCategoryBrand.saveBuild(aLong,categoryInfo.getId(),SecurityUtils::getUsername)).toList() + .forEach(asCategoryBrandService::save); + } + return save; + } + + /** + * 修改品类信息 + * + * @param categoryInfoEditModel 品类修改模型 + * @return 是否 + */ + @Override + @Transactional + public boolean updateById(CategoryInfoEditModel categoryInfoEditModel) { + Assert.isTrue(ObjUtils.notNull(categoryInfoEditModel),"品类修改数据不能为空"); + //修改品类表 + CategoryInfo categoryInfo=categoryInfoEditModel.buildCategoryInfo(categoryInfoEditModel,SecurityUtils::getUsername); + boolean updated = this.updateById(categoryInfo); + //处理中间表 + //删除 + asCategoryAttributeService.list(new LambdaQueryWrapper().eq(AsCategoryAttribute::getCategoryId,categoryInfo.getId())) + .stream().map(AsCategoryAttribute::getId).toList().forEach(asCategoryAttributeService::removeById); + + asCategoryAttributeGroupService.list(new LambdaQueryWrapper().eq(AsCategoryAttributeGroup::getCategoryId,categoryInfo.getId())) + .stream().map(AsCategoryAttributeGroup::getId).toList().forEach(asCategoryAttributeGroupService::removeById); + + asCategoryBrandService.list(new LambdaQueryWrapper().eq(AsCategoryBrand::getCategoryId,categoryInfo.getId())) + .stream().map(AsCategoryBrand::getId).toList().forEach(asCategoryBrandService::removeById); + //新增 + List attributeIdList = categoryInfoEditModel.getAttributeIdList(); + if(!attributeIdList.isEmpty()){ + attributeIdList.stream() + .map(aLong -> AsCategoryAttribute.saveBuild(aLong,categoryInfo.getId(),SecurityUtils::getUsername)).toList() + .forEach(asCategoryAttributeService::save); + } + List attributeGroupIdList = categoryInfoEditModel.getAttributeGroupIdList(); + if(!attributeGroupIdList.isEmpty()){ + attributeGroupIdList.stream() + .map(aLong -> AsCategoryAttributeGroup.saveBuild(aLong,categoryInfo.getId(),SecurityUtils::getUsername)).toList() + .forEach(asCategoryAttributeGroupService::save); + } + List brandInfoIdList = categoryInfoEditModel.getBrandInfoIdList(); + if(!brandInfoIdList.isEmpty()){ + brandInfoIdList.stream() + .map(aLong -> AsCategoryBrand.saveBuild(aLong,categoryInfo.getId(),SecurityUtils::getUsername)).toList() + .forEach(asCategoryBrandService::save); + } + //处理缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryId:"+categoryInfo.getId()))){ + redisTemplate.delete("categoryId:"+categoryInfo.getId()); + } + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryParentData:"+categoryInfo.getId()))){ + redisTemplate.delete("categoryParentData:"+categoryInfo.getId()); + } + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryCommonData:"+categoryInfo.getId()))){ + redisTemplate.delete("categoryCommonData:"+categoryInfo.getId()); + } + return updated; + } + + /** + * 批量删除品类 + * + * @param ids 品类编号集合 + * @return 是否 + */ + @Override + @Transactional + public boolean removeBatch(List ids) { + Assert.isTrue(ids!=null&&!ids.isEmpty(),"品类ids不能为空"); + //批量删除品类表 + boolean removed = this.removeBatchByIds(ids); + //处理中间表 + ids.forEach(id->{ + //删除 + asCategoryAttributeService.list(new LambdaQueryWrapper().eq(AsCategoryAttribute::getCategoryId,id)) + .stream().map(AsCategoryAttribute::getId).toList().forEach(asCategoryAttributeService::removeById); + + asCategoryAttributeGroupService.list(new LambdaQueryWrapper().eq(AsCategoryAttributeGroup::getCategoryId,id)) + .stream().map(AsCategoryAttributeGroup::getId).toList().forEach(asCategoryAttributeGroupService::removeById); + + asCategoryBrandService.list(new LambdaQueryWrapper().eq(AsCategoryBrand::getCategoryId,id)) + .stream().map(AsCategoryBrand::getId).toList().forEach(asCategoryBrandService::removeById); + }); + //处理缓存 + ids.forEach(id->{ + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryId:"+id))){ + redisTemplate.delete("categoryId:"+id); + } + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryParentData:"+id))){ + redisTemplate.delete("categoryParentData:"+id); + } + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryCommonData:"+id))){ + redisTemplate.delete("categoryCommonData:"+id); + } + }); + //处理枝叶 + ids.forEach(id->{ + //判断是否有子结点 + List list = this.list(new LambdaQueryWrapper().eq(CategoryInfo::getParentId, id)); + //如果有 + if(!list.isEmpty()){ + //递归调用自身 + removeBatch(list.stream().map(CategoryInfo::getId).toList()); + } + }); + return removed; + } + + /** + * 通过id获取品类数据 + * + * @param id 品类编号 + * @return 品类信息 + */ + @Override + public CategoryInfoResp getCategoryInfoById(Long id) { + Assert.isTrue(id!=null,"品类id不能为空"); + //如果有缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryId:"+id))){ + return JSON.parseObject(redisTemplate.opsForValue().get("categoryId:"+id),CategoryInfoResp.class); + } + //获取品类表数据 + CategoryInfo categoryInfo = this.getById(id); + //处理中间表 + List attributeIdList = asCategoryAttributeService.list(new LambdaQueryWrapper() + .eq(AsCategoryAttribute::getCategoryId, categoryInfo.getId())).stream().map(AsCategoryAttribute::getAttributeId).toList(); + + List attributeGroupIdList = asCategoryAttributeGroupService.list(new LambdaQueryWrapper() + .eq(AsCategoryAttributeGroup::getCategoryId,categoryInfo.getId())).stream().map(AsCategoryAttributeGroup::getAttributeGroupId).toList(); + + List brandInfoIdList= asCategoryBrandService.list(new LambdaQueryWrapper() + .eq(AsCategoryBrand::getCategoryId,categoryInfo.getId())).stream().map(AsCategoryBrand::getBrandId).toList(); + //最后结果 + CategoryInfoResp categoryInfoResp = CategoryInfoResp.buildResp(categoryInfo, attributeIdList, attributeGroupIdList, brandInfoIdList); + //存入缓存 + redisTemplate.opsForValue().set("categoryId:"+id,JSON.toJSONString(categoryInfoResp)); + return categoryInfoResp; + } + + //递归获取自身到祖级的公共数据 + public List getCommon(Long categoryId, IService riService,IService tiService){ + //生明一个空集合 + List list=new ArrayList<>(); + //获取中间表数据 + List rList = riService.list(new QueryWrapper().eq("category_id", categoryId)); + //处理中间表数据 + if(!rList.isEmpty()){ + //获取对应的主键集合 + List longList = rList.stream().map(r -> { + if (r instanceof CategoryBase categoryBase) { + return categoryBase.getBaseId(); + } + return null; + }).toList(); + //添加数据 + list.addAll(tiService.listByIds(longList)); + } + CategoryInfo categoryInfo = this.getById(categoryId); + //是否还有父结点 + if(categoryInfo.getParentId()!=0){ + //递归找父结点(会有重复数据) + list.addAll(getCommon(categoryInfo.getParentId(),riService,tiService)); + } + return list; + } + + /** + * 查询父类品类公共数据 + * + * @param categoryId 父类品类编号 + * @return 父类品类公共数据 + */ + @Override + public CategoryParentCommonDataResp getParentCommonDataByCategoryId(Long categoryId) { + //断言,条件不成立抛出异常 + Assert.isTrue(categoryId!=null,"品类id不能为空"); + //如果有缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryParentData:" + categoryId))){ + return JSON.parseObject(redisTemplate.opsForValue().get("categoryParentData:" + categoryId), CategoryParentCommonDataResp.class); + } + //从数据库获取数据并去重 + CategoryParentCommonDataResp parentCommonDataResp = CategoryParentCommonDataResp.builder() + .attributeGroupList(this.getCommon(categoryId, asCategoryAttributeGroupService, attributeGroupService).stream().distinct().toList()) + .attributeInfoList(this.getCommon(categoryId, asCategoryAttributeService, attributeInfoService).stream().distinct().toList()) + .brandInfoList(this.getCommon(categoryId, asCategoryBrandService, brandService).stream().distinct().toList()) + .build(); + //存入缓存 + redisTemplate.opsForValue().set("categoryParentData:"+categoryId,JSON.toJSONString(parentCommonDataResp)); + return parentCommonDataResp; + } + + /** + * 通过品类ID获取品类共有属性 + * + * @param cateGoryId 品类编号 + * @return 品类共有属性 + */ + @Override + public CategoryCommonDataResp getTemplateAttributeByCateGoryId (Long cateGoryId) { + Assert.isTrue(ObjUtils.notNull(cateGoryId),"品类编号不能为空"); + //如果有缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("categoryCommonData:"+cateGoryId))){ + return JSON.parseObject(redisTemplate.opsForValue().get("categoryCommonData:"+cateGoryId), CategoryCommonDataResp.class); + } + //申明一个存储品类编号的空集合 + List list=new ArrayList<>(); + //获取品类及其父级id集合 + getCategoryIdList(cateGoryId, list); + //申明一个属性去重检查空集合 + HashSet hashSet = new HashSet<>(); + //属性组数据 + List templateAttributeGroupModelList = Optional.ofNullable(asCategoryAttributeGroupService.list(new LambdaQueryWrapper().in(AsCategoryAttributeGroup::getCategoryId,list))) + .orElse(new ArrayList<>()) + .stream().map(AsCategoryAttributeGroup::getAttributeGroupId).toList() + .stream().distinct().map(attributeGroupService::getById).toList() + .stream().map(attributeGroup -> + TemplateAttributeGroupModel.buildTemplateModel(attributeGroup,asAttributeInfoGroupService.list(new LambdaQueryWrapper().eq(AsAttributeInfoGroup::getAttributeGroupId,attributeGroup.getId())) + .stream().map(asAttributeInfoGroup -> { + Long attributeId = asAttributeInfoGroup.getAttributeId(); + hashSet.add(attributeId); + return attributeId; + }).toList() + .stream().map(attributeInfoService::getById).toList() + .stream().map(TemplateAttributeModel::buildTemplateModel).toList()) + ).toList(); + //属性数据 + List templateAttributeModelList = Optional.ofNullable(asCategoryAttributeService.list(new LambdaQueryWrapper().eq(AsCategoryAttribute::getCategoryId,cateGoryId))).orElse(new ArrayList<>()) + .stream().map(AsCategoryAttribute::getAttributeId).toList() + .stream().map(attributeInfoService::getById).toList() + .stream().filter(attributeInfo -> !hashSet.contains(attributeInfo.getId())) + .map(attributeInfo -> {hashSet.add(attributeInfo.getId());return TemplateAttributeModel.buildTemplateModel(attributeInfo);}).toList(); + //自有属性数据 + List attributeModelList = attributeInfoService.list().stream().filter(attributeInfo -> !hashSet.contains(attributeInfo.getId())) + .map(TemplateAttributeModel::buildTemplateModel).toList(); + + CategoryCommonDataResp categoryCommonDataResp = CategoryCommonDataResp.buildResp(templateAttributeGroupModelList, templateAttributeModelList, attributeModelList); + //存入Redis + redisTemplate.opsForValue().set("categoryCommonData:"+cateGoryId,JSON.toJSONString(categoryCommonDataResp)); + return categoryCommonDataResp; + } + + //递归查找品类编号集合 + public void getCategoryIdList(Long categoryId,List list){ + CategoryInfo categoryInfo = this.getById(categoryId); + //如果有效,更改list集合内容 + if(ObjUtils.notNull(categoryId)){ + //添加当前品类编号 + list.add(categoryId); + Long parentId = categoryInfo.getParentId(); + //调用自身 + if(parentId!=0){ + getCategoryIdList(parentId,list); + } + } + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductAttributeInfoServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductAttributeInfoServiceImpl.java new file mode 100644 index 0000000..6a7a934 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductAttributeInfoServiceImpl.java @@ -0,0 +1,56 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.ProductAttributeInfoMapper; +import com.ruoyi.product.domain.ProductAttributeInfo; +import com.ruoyi.product.service.ProductAttributeInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 商品属性Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class ProductAttributeInfoServiceImpl extends ServiceImpl implements ProductAttributeInfoService { + + /** + * 查询商品属性列表 + * + * @param productAttributeInfo 商品属性 + * @return 商品属性 + */ + @Override + public List list(ProductAttributeInfo productAttributeInfo) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(productAttributeInfo.getProductId())){ + queryWrapper.eq(ProductAttributeInfo::getProductId, productAttributeInfo.getProductId()); + } + + if (ObjUtils.notNull(productAttributeInfo.getAttributeGroupId())){ + queryWrapper.eq(ProductAttributeInfo::getAttributeGroupId, productAttributeInfo.getAttributeGroupId()); + } + + if (ObjUtils.notNull(productAttributeInfo.getAttributeId())){ + queryWrapper.eq(ProductAttributeInfo::getAttributeId, productAttributeInfo.getAttributeId()); + } + + if (ObjUtils.notNull(productAttributeInfo.getValue())){ + queryWrapper.eq(ProductAttributeInfo::getValue, productAttributeInfo.getValue()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductInfoServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductInfoServiceImpl.java new file mode 100644 index 0000000..31fb2c3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductInfoServiceImpl.java @@ -0,0 +1,485 @@ +package com.ruoyi.product.service.impl; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.core.utils.ObjUtils; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.product.domain.*; +import com.ruoyi.product.domain.model.ProductInfoEditModel; +import com.ruoyi.product.domain.model.ProductInfoSaveModel; +import com.ruoyi.product.domain.req.ProductSkuSaveReq; +import com.ruoyi.product.domain.resp.*; +import com.ruoyi.product.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.ProductInfoMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; + +/** + * 商品信息Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class ProductInfoServiceImpl extends ServiceImpl implements ProductInfoService { + + @Autowired + private ProductAttributeInfoService productAttributeInfoService; + + @Autowired + private SpecificationInfoService specificationInfoService; + + @Autowired + private SpecificationGroupService specificationGroupService; + + @Autowired + private AsSpecificationInfoGroupService asSpecificationInfoGroupService; + + @Autowired + private ProductSkuService productSkuService; + + @Autowired + private RedisTemplate redisTemplate; + + + @Autowired + private CategoryService categoryService; + @Autowired + private AttributeInfoService attributeInfoService; + + + + /** + * 查询商品信息列表 + * + * @param productInfo 商品信息 + * @return 商品信息 + */ + @Override + public List list(ProductInfo productInfo) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(productInfo.getName())){ + queryWrapper.like(ProductInfo::getName, productInfo.getName()); + } + + if (ObjUtils.notNull(productInfo.getBrandId())){ + queryWrapper.eq(ProductInfo::getBrandId, productInfo.getBrandId()); + } + + if (ObjUtils.notNull(productInfo.getIntro())){ + queryWrapper.eq(ProductInfo::getIntro, productInfo.getIntro()); + } + + if (ObjUtils.notNull(productInfo.getMasterType())){ + queryWrapper.eq(ProductInfo::getMasterType, productInfo.getMasterType()); + } + + if (ObjUtils.notNull(productInfo.getParentType())){ + queryWrapper.eq(ProductInfo::getParentType, productInfo.getParentType()); + } + + if (ObjUtils.notNull(productInfo.getThisType())){ + queryWrapper.eq(ProductInfo::getThisType, productInfo.getThisType()); + } + + if (ObjUtils.notNull(productInfo.getCoverImage())){ + queryWrapper.eq(ProductInfo::getCoverImage, productInfo.getCoverImage()); + } + + if (ObjUtils.notNull(productInfo.getCarouselImages())){ + queryWrapper.eq(ProductInfo::getCarouselImages, productInfo.getCarouselImages()); + } + + if (ObjUtils.notNull(productInfo.getIsUpShelf())){ + queryWrapper.eq(ProductInfo::getIsUpShelf, productInfo.getIsUpShelf()); + } + + + + return list(queryWrapper); + } + + //规格组集合 + private List> groupList; + + /** + * 存储商品信息 + * + * @param productInfoSaveModel 商品存储数据 + * @return 是否 + */ + @Override + @Transactional + public boolean saveProductInfo(ProductInfoSaveModel productInfoSaveModel) { + Assert.isTrue(ObjUtils.notNull(productInfoSaveModel),"商品添加数据不能为空"); + //添加商品表 + ProductInfo productInfo = productInfoSaveModel.buildProductInfo(productInfoSaveModel, SecurityUtils::getUsername); + boolean save = this.save(productInfo); + //处理商品属性 + Optional.ofNullable(productInfoSaveModel.getAttributeValueSaveModelList()).orElse(new ArrayList<>()) + .forEach(attributeValueSaveModel->productAttributeInfoService.save(attributeValueSaveModel.buildProductAttribute(productInfo.getId()))); + //处理商品规格 + List> valueArrayList=new ArrayList<>(); + Optional.ofNullable(productInfoSaveModel.getSpecificationList()).orElse(new ArrayList<>()) + .forEach(specificationInfoSaveReq -> { + //添加规格 + SpecificationInfo specificationInfo = SpecificationInfo.saveBuild(specificationInfoSaveReq, SecurityUtils::getUsername); + specificationInfoService.save(specificationInfo); + LinkedHashMap map = new LinkedHashMap<>(); + specificationInfoSaveReq.getValueList().forEach(value->{ + map.put(value,specificationInfo.getId()); + }); + valueArrayList.add(map); + }); + if(!valueArrayList.isEmpty()){ + groupList=new ArrayList<>(); + permute(new LinkedHashMap<>(),valueArrayList); + List skuList = productInfoSaveModel.getProductSkuList(); + for (int i = 0; i < groupList.size(); i++) { + //添加规格组 + SpecificationGroup specificationGroup = SpecificationGroup.saveBuild(productInfo.getId(), SecurityUtils::getUsername); + specificationGroupService.save(specificationGroup); + groupList.get(i).forEach((value,specificationId)->{ + //添加规格与组中间表 + asSpecificationInfoGroupService.save(AsSpecificationInfoGroup.saveBuild(specificationGroup.getId(),specificationId,value,SecurityUtils::getUsername)); + }); + //处理sku数据 + productSkuService.save(ProductSku.saveBuild(productInfo.getId(),specificationGroup.getId(),skuList.get(i),SecurityUtils::getUsername)); + } + } + return save; + } + + //递归排列规格数据 + public void permute(Map map,List> valueArrayList){ + if(valueArrayList.isEmpty()){ + groupList.add(map); + }else { + //获取第一个元素 + Map longStringMap = valueArrayList.get(0); + //排除第一个元素 + List> arrayList=valueArrayList.subList(1, valueArrayList.size()); + longStringMap.forEach((k,v)->{ + LinkedHashMap newMap = new LinkedHashMap<>(map); + newMap.put(k,v); + permute(newMap,arrayList); + }); + } + + } + + /** + * 批量删除商品信息 + * + * @param ids 商品id集合 + * @return 是否 + */ + @Override + @Transactional + public boolean removeBatchProductByIds(List ids) { + Assert.isTrue(!ids.isEmpty(),"商品ids不能为空"); + //删除商品表 + boolean removed = this.removeBatchByIds(ids); + //处理中间表 + ids.forEach(id->{ + //删除属性 + productAttributeInfoService.remove(new LambdaQueryWrapper().eq(ProductAttributeInfo::getProductId,id)); + //删除规格 + HashSet specificationIdSet = new HashSet<>(); + specificationGroupService.list(new LambdaQueryWrapper().eq(SpecificationGroup::getProductId, id)) + .stream().map(SpecificationGroup::getId).toList() + .forEach(specificationGroupId->{ + //删除规格组 + specificationGroupService.removeById(specificationGroupId); + //找中间表 + List asSpecificationInfoGroups = asSpecificationInfoGroupService.list(new LambdaQueryWrapper().eq(AsSpecificationInfoGroup::getSpecificationGroupId, specificationGroupId)); + //将中间表中的规格id找出添加进set集合 + specificationIdSet.addAll(asSpecificationInfoGroups.stream().map(AsSpecificationInfoGroup::getSpecificationId).toList()); + //删除中间表 + asSpecificationInfoGroupService.removeBatchByIds(asSpecificationInfoGroups.stream().map(AsSpecificationInfoGroup::getId).toList()); + }); + //删除规格 + specificationInfoService.removeBatchByIds(specificationIdSet); + //删除sku + productSkuService.remove(new LambdaQueryWrapper().eq(ProductSku::getProductId,id)); + //删除缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("productInfo:"+id))){ + redisTemplate.delete("productInfo:"+id); + } + }); + return removed; + } + + /** + * 通过id获取商品信息 + * + * @param id 商品id + * @return 商品信息 + */ + @Override + public ProductInfoResp getInfoById(Long id) { + Assert.isTrue(ObjUtils.notNull(id),"商品id不能为空"); + //如果有缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("productInfo:"+id))){ + return JSON.parseObject(redisTemplate.opsForValue().get("productInfo:" + id),ProductInfoResp.class); + } + //获取商品信息 + ProductInfo productInfo = this.getById(id); + //获取属性 + List productAttributeInfoList = productAttributeInfoService.list(new LambdaQueryWrapper().eq(ProductAttributeInfo::getProductId, id)); + //获取规格 + List asSpecificationInfoGroups = asSpecificationInfoGroupService.list( + new LambdaQueryWrapper().in(AsSpecificationInfoGroup::getSpecificationGroupId, + specificationGroupService.list(new LambdaQueryWrapper().eq(SpecificationGroup::getProductId, id)) + .stream().map(SpecificationGroup::getId).toList()) + ); + List specificationList = new ArrayList<>(); + asSpecificationInfoGroups.stream().map(AsSpecificationInfoGroup::getSpecificationId).distinct().toList() + .forEach(specificationId->{ + specificationList.add(SpecificationInfoResp.buildResp(specificationInfoService.getById(specificationId).getName(), + asSpecificationInfoGroups.stream().filter(asSpecificationInfoGroup -> asSpecificationInfoGroup.getSpecificationId().equals(specificationId)).toList() + .stream().map(AsSpecificationInfoGroup::getValue).distinct().toList())); + }); + //获取sku + List productSkuList = productSkuService.list(new LambdaQueryWrapper().eq(ProductSku::getProductId, id)); + ProductInfoResp productInfoResp = ProductInfoResp.buildResp(productInfo, productAttributeInfoList, specificationList, productSkuList); + //存入Redis + redisTemplate.opsForValue().set("productInfo:"+id, JSON.toJSONString(productInfoResp)); + return productInfoResp; + } + + /** + * 通过id修改商品信息 + * + * @param productInfoEditModel 商品修改数据 + * @return 是否 + */ + @Override + @Transactional + public boolean updateProductInfoById(ProductInfoEditModel productInfoEditModel) { + Assert.isTrue(ObjUtils.notNull(productInfoEditModel),"商品修改数据不能为空"); + //修改商品信息 + boolean updated = this.updateById(productInfoEditModel.buildProductInfo(productInfoEditModel, SecurityUtils::getUsername)); + //先删除中间表 + //删除属性 + productAttributeInfoService.remove(new LambdaQueryWrapper().eq(ProductAttributeInfo::getProductId,productInfoEditModel.getId())); + //删除规格 + HashSet specificationIdSet = new HashSet<>(); + specificationGroupService.list(new LambdaQueryWrapper().eq(SpecificationGroup::getProductId, productInfoEditModel.getId())) + .stream().map(SpecificationGroup::getId).toList() + .forEach(specificationGroupId->{ + //删除规格组 + specificationGroupService.removeById(specificationGroupId); + //找中间表 + List asSpecificationInfoGroups = asSpecificationInfoGroupService.list(new LambdaQueryWrapper().eq(AsSpecificationInfoGroup::getSpecificationGroupId, specificationGroupId)); + //将中间表中的规格id找出添加进set集合 + specificationIdSet.addAll(asSpecificationInfoGroups.stream().map(AsSpecificationInfoGroup::getSpecificationId).toList()); + //删除中间表 + asSpecificationInfoGroupService.removeBatchByIds(asSpecificationInfoGroups.stream().map(AsSpecificationInfoGroup::getId).toList()); + }); + //删除规格 + specificationInfoService.removeBatchByIds(specificationIdSet); + //删除sku + productSkuService.remove(new LambdaQueryWrapper().eq(ProductSku::getProductId,productInfoEditModel.getId())); + //添加中间表 + //处理商品属性 + Optional.ofNullable(productInfoEditModel.getAttributeValueModelList()).orElse(new ArrayList<>()) + .forEach(attributeValueSaveModel->productAttributeInfoService.save(attributeValueSaveModel.buildProductAttribute(productInfoEditModel.getId()))); + //处理商品规格 + List> valueArrayList=new ArrayList<>(); + Optional.ofNullable(productInfoEditModel.getSpecificationList()).orElse(new ArrayList<>()) + .forEach(specificationInfoSaveReq -> { + //添加规格 + SpecificationInfo specificationInfo = SpecificationInfo.saveBuild(specificationInfoSaveReq, SecurityUtils::getUsername); + specificationInfoService.save(specificationInfo); + LinkedHashMap map = new LinkedHashMap<>(); + specificationInfoSaveReq.getValueList().forEach(value->{ + map.put(value,specificationInfo.getId()); + }); + valueArrayList.add(map); + }); + if(!valueArrayList.isEmpty()) { + groupList = new ArrayList<>(); + permute(new LinkedHashMap<>(), valueArrayList); + List skuList = productInfoEditModel.getProductSkuList(); + for (int i = 0; i < groupList.size(); i++) { + //添加规格组 + SpecificationGroup specificationGroup = SpecificationGroup.saveBuild(productInfoEditModel.getId(), SecurityUtils::getUsername); + specificationGroupService.save(specificationGroup); + groupList.get(i).forEach((value, specificationId) -> { + //添加规格与组中间表 + asSpecificationInfoGroupService.save(AsSpecificationInfoGroup.saveBuild(specificationGroup.getId(), specificationId, value, SecurityUtils::getUsername)); + }); + //处理sku数据 + productSkuService.save(ProductSku.saveBuild(productInfoEditModel.getId(), specificationGroup.getId(), skuList.get(i), SecurityUtils::getUsername)); + } + } + //删除缓存 + if(Boolean.TRUE.equals(redisTemplate.hasKey("productInfo:"+productInfoEditModel.getId()))){ + redisTemplate.delete("productInfo:"+productInfoEditModel.getId()); + } + return updated; + } + + //获取商品属性 + private List getProductAttributes(Long productId) { + List productAttributeInfolist = productAttributeInfoService.list(ProductAttributeInfo.builder().productId(productId).build()); + List attributeIds = productAttributeInfolist.stream() + .map(productAttributeInfo -> productAttributeInfo.getAttributeId()) + .toList(); + List attributeInfoList = attributeInfoService.listByIds(attributeIds); + List attributeList = attributeInfoList.stream() + .map(attributeInfo -> { + Attribute attribute = new Attribute(); + for (ProductAttributeInfo productAttributeInfo : productAttributeInfolist) { + if (productAttributeInfo.getAttributeId() == attributeInfo.getId()) { + attribute.setAttributeId(attributeInfo.getId()); + attribute.setName(attributeInfo.getName()); + attribute.setValue(productAttributeInfo.getValue()); + } + } + return attribute; + }) + .toList(); + return attributeList; + } + + //获取面包屑 + public List getBreadcrumbList(ProductInfo productInfo){ + List longs = new ArrayList<>(); + longs.add(productInfo.getMasterType()); + longs.add(productInfo.getParentType()); + longs.add(productInfo.getThisType()); + List categoryInfos = categoryService.listByIds(longs); + List breadcrumbList = new ArrayList<>(categoryInfos.stream() + .map(categoryInfo -> categoryInfo.getName()) + .toList()); + breadcrumbList.add(productInfo.getName()); + return breadcrumbList; + } + + //获取规格信息方法 + public List getSpecificationList(Long id,List proSkuList,List asSpecificationInfoGroupList){ + List specificationList = proSkuList.stream() + .map(productSku -> { + String s = ""; + for (AsSpecificationInfoGroup asSpecificationInfoGroup : asSpecificationInfoGroupList) { + if (asSpecificationInfoGroup.getSpecificationGroupId() == productSku.getSpecificationGroupId()) { + s += "-" + asSpecificationInfoGroup.getValue(); + } + } + s = s.substring(1); + return new Specification().specificationBuild(s,productSku); + }).toList(); + + return specificationList; + } + + //获取规格属性方法 + public List getRuleList(List specificationInfoList,List asSpecificationInfoGroupList){ + List ruleList = specificationInfoList.stream() + .map(specificationInfo -> { + List ruleValues = asSpecificationInfoGroupList.stream() + .map(asSpecificationInfoGroup -> { + RuleValue ruleValue = new RuleValue(); + if (asSpecificationInfoGroup.getSpecificationId() == specificationInfo.getId()) { + ruleValue.setValue(asSpecificationInfoGroup.getValue()); + } + return ruleValue; + }) + .distinct() + .filter(ruleValue -> ruleValue.getValue() != null) + .toList(); + return new Rule().ruleBuild(specificationInfo.getId(),specificationInfo.getName(),ruleValues); + }) + .toList(); + return ruleList; + } + + @Override + public ProductDetailResp getProductDetail(Long id) { + //商品信息 && 面包屑 + ProductInfo productInfo = this.getById(id); + List breadcrumbList = this.getBreadcrumbList(productInfo); + + //商品属性 + List attributeList = this.getProductAttributes(id); + + //获取规格 + LambdaQueryWrapper specificationGroupLambdaQueryWrapper = new LambdaQueryWrapper<>(); + specificationGroupLambdaQueryWrapper.eq(SpecificationGroup::getProductId,id); + List specificationGroupIds = specificationGroupService.list(specificationGroupLambdaQueryWrapper).stream() + .map(specificationGroup -> specificationGroup.getId()) + .toList(); + LambdaQueryWrapper asSpecificationInfoGroupLambdaQueryWrapper = new LambdaQueryWrapper<>(); + asSpecificationInfoGroupLambdaQueryWrapper.in(AsSpecificationInfoGroup::getSpecificationGroupId,specificationGroupIds); + List asSpecificationInfoGroupList = asSpecificationInfoGroupService.list(asSpecificationInfoGroupLambdaQueryWrapper); + List proSkuList = productSkuService.list(ProductSku.builder().productId(id).build()); + List specificationIds = asSpecificationInfoGroupList.stream() + .map(asSpecificationInfoGroup -> asSpecificationInfoGroup.getSpecificationId()) + .distinct() + .toList(); + List specificationInfoList = specificationInfoService.listByIds(specificationIds); + + //获取规格属性 + List specificationList = this.getSpecificationList(id, proSkuList, asSpecificationInfoGroupList); + List ruleList = this.getRuleList(specificationInfoList, asSpecificationInfoGroupList); + + //获取价格区间 + List bigDecimals = proSkuList.stream() + .map(productSku -> productSku.getPrice()) + .sorted() + .toList(); + String price = bigDecimals.get(0)+"-"+bigDecimals.get(bigDecimals.size()-1); + //获取图片 + List carouselImages = proSkuList.stream() + .map(productSku -> { + return new CarouselImage().carouselImageBuild(productSku); + }) + .toList(); + + + return ProductDetailResp.builder() + .product(new Product().productBuild(productInfo,price)) + .attributeList(attributeList) + .ruleList(ruleList) + .carouselImages(carouselImages) + .breadcrumbList(breadcrumbList) + .specifications(specificationList) + .build(); + } + + @Override + public List getProductList() { + List list = this.list(); + List longs = list.stream() + .map(ProductInfo::getId) + .toList(); + LambdaQueryWrapper productSkuLambdaQueryWrapper = new LambdaQueryWrapper<>(); + productSkuLambdaQueryWrapper.in(ProductSku::getProductId,longs); + List productSkus = productSkuService.list(productSkuLambdaQueryWrapper); + List products = list.stream() + .map(productInfo -> { + List bigDecimals = productSkus.stream() + .filter(ProductSku -> ProductSku.getProductId() == productInfo.getId()) + .toList().stream().map(ProductSku::getPrice).sorted().toList(); + String s = ""; + s = bigDecimals.get(0) + "-" + bigDecimals.get(bigDecimals.size() - 1); + return new Product().productBuild(productInfo, s); + }).toList(); + return products; + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductSkuServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductSkuServiceImpl.java new file mode 100644 index 0000000..4e35af1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/ProductSkuServiceImpl.java @@ -0,0 +1,64 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.ProductSkuMapper; +import com.ruoyi.product.domain.ProductSku; +import com.ruoyi.product.service.ProductSkuService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 商品SKU数据Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class ProductSkuServiceImpl extends ServiceImpl implements ProductSkuService { + + /** + * 查询商品SKU数据列表 + * + * @param productSku 商品SKU数据 + * @return 商品SKU数据 + */ + @Override + public List list(ProductSku productSku) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(productSku.getProductId())){ + queryWrapper.eq(ProductSku::getProductId, productSku.getProductId()); + } + + if (ObjUtils.notNull(productSku.getSpecificationGroupId())){ + queryWrapper.eq(ProductSku::getSpecificationGroupId, productSku.getSpecificationGroupId()); + } + + if (ObjUtils.notNull(productSku.getImage())){ + queryWrapper.eq(ProductSku::getImage, productSku.getImage()); + } + + if (ObjUtils.notNull(productSku.getPrice())){ + queryWrapper.eq(ProductSku::getPrice, productSku.getPrice()); + } + + if (ObjUtils.notNull(productSku.getInventory())){ + queryWrapper.eq(ProductSku::getInventory, productSku.getInventory()); + } + + if (ObjUtils.notNull(productSku.getStatus())){ + queryWrapper.eq(ProductSku::getStatus, productSku.getStatus()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationGroupServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationGroupServiceImpl.java new file mode 100644 index 0000000..0c7822d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationGroupServiceImpl.java @@ -0,0 +1,41 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.SpecificationGroupMapper; +import com.ruoyi.product.domain.SpecificationGroup; +import com.ruoyi.product.service.SpecificationGroupService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 规格组Service业务层处理 + * + * @author gtl + * @date 2024-03-08 + */ +@Slf4j +@Service +public class SpecificationGroupServiceImpl extends ServiceImpl implements SpecificationGroupService { + + /** + * 查询规格组列表 + * + * @param specificationGroup 规格组 + * @return 规格组 + */ + @Override + public List list(SpecificationGroup specificationGroup) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(specificationGroup.getProductId())){ + queryWrapper.eq(SpecificationGroup::getProductId, specificationGroup.getProductId()); + } + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationInfoServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationInfoServiceImpl.java new file mode 100644 index 0000000..5f41fb1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/service/impl/SpecificationInfoServiceImpl.java @@ -0,0 +1,44 @@ +package com.ruoyi.product.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.ruoyi.product.mapper.SpecificationInfoMapper; +import com.ruoyi.product.domain.SpecificationInfo; +import com.ruoyi.product.service.SpecificationInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 规格Service业务层处理 + * + * @author gtl + * @date 2024-02-29 + */ +@Slf4j +@Service +public class SpecificationInfoServiceImpl extends ServiceImpl implements SpecificationInfoService { + + /** + * 查询规格列表 + * + * @param specificationInfo 规格 + * @return 规格 + */ + @Override + public List list(SpecificationInfo specificationInfo) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(specificationInfo.getName())){ + queryWrapper.like(SpecificationInfo::getName, specificationInfo.getName()); + } + + + + + + return list(queryWrapper); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/test b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/test new file mode 100644 index 0000000..1691842 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/java/com/ruoyi/product/test @@ -0,0 +1,40 @@ +{ + productInfo:{ + productName: "", + carouselImages: "", + image: "" + }, + categoryList: [ + "主品类","父级品类","商品品类" + ], + ruleInfoList: [ + { + rule + } + ], + skuList:[ + { + sku: "", + stock: null, + price: null, + image: "" + } + ], + attributeGroupList: [ + { + attributeGroupName: "", + attributeList: [ + { + attributeName: "", + value: "" + } + ] + } + ], + attributeList: [ + { + attributeName: "", + value: "" + } + ] +} \ No newline at end of file diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..a060c55 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/bootstrap.yml @@ -0,0 +1,28 @@ +# Tomcat +server: + port: 9302 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-product + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.ruoyi.product.mapper: DEBUG diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/logback.xml new file mode 100644 index 0000000..69fb68b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-product/ruoyi-product-server/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/pom.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/pom.xml new file mode 100644 index 0000000..564c410 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/pom.xml @@ -0,0 +1,108 @@ + + + + com.muyu + ruoyi-modules + 3.6.3 + + 4.0.0 + + ruoyi-modules-system + + + muyu-modules-system系统模块 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-datasource + + + + + com.muyu + muyu-common-datascope + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/MuYuSystemApplication.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/MuYuSystemApplication.java new file mode 100644 index 0000000..3a32d99 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/MuYuSystemApplication.java @@ -0,0 +1,22 @@ +package com.ruoyi.system; + +import com.ruoyi.common.security.annotation.EnableCustomConfig; +import com.ruoyi.common.security.annotation.EnableMyFeignClients; +import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 系统模块 + * + * @author muyu + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class MuYuSystemApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuSystemApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/MyBookController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/MyBookController.java new file mode 100644 index 0000000..d222816 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/MyBookController.java @@ -0,0 +1,104 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.system.domain.MyBook; +import com.ruoyi.system.service.IMyBookService; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * 图书管理Controller + * + * @author ruoyi + * @date 2024-02-26 + */ +@RestController +@RequestMapping("/book") +public class MyBookController extends BaseController +{ + @Autowired + private IMyBookService myBookService; + + /** + * 查询图书管理列表 + */ + @RequiresPermissions("system:book:list") + @GetMapping("/list") + public Result> list(MyBook myBook) + { + startPage(); + List list = myBookService.selectMyBookList(myBook); + return getDataTable(list); + } + + /** + * 导出图书管理列表 + */ + @RequiresPermissions("system:book:export") + @Log(title = "图书管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, MyBook myBook) + { + List list = myBookService.selectMyBookList(myBook); + ExcelUtil util = new ExcelUtil(MyBook.class); + util.exportExcel(response, list, "图书管理数据"); + } + + /** + * 获取图书管理详细信息 + */ + @RequiresPermissions("system:book:query") + @GetMapping(value = "/{id}") + public Result getInfo(@PathVariable("id") Long id) + { + return success(myBookService.selectMyBookById(id)); + } + + /** + * 新增图书管理 + */ + @RequiresPermissions("system:book:add") + @Log(title = "图书管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add(@RequestBody MyBook myBook) + { + return toAjax(myBookService.insertMyBook(myBook)); + } + + /** + * 修改图书管理 + */ + @RequiresPermissions("system:book:edit") + @Log(title = "图书管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit(@RequestBody MyBook myBook) + { + return toAjax(myBookService.updateMyBook(myBook)); + } + + /** + * 删除图书管理 + */ + @RequiresPermissions("system:book:remove") + @Log(title = "图书管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public Result remove(@PathVariable Long[] ids) + { + return toAjax(myBookService.deleteMyBookByIds(ids)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java new file mode 100644 index 0000000..fa91b65 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java @@ -0,0 +1,118 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.service.SysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.List; + +/** + * 参数配置 信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/config") +public class SysConfigController extends BaseController { + + @Autowired + private SysConfigService configService; + + /** + * 获取参数配置列表 + */ + @RequiresPermissions("system:config:list") + @GetMapping("/list") + public Result> list (SysConfig config) { + startPage(); + List list = configService.pageQuery(config); + return getDataTable(list); + } + + @Log(title = "参数管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:config:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysConfig config) { + List list = configService.pageQuery(config); + ExcelUtil util = new ExcelUtil(SysConfig.class); + util.exportExcel(response, list, "参数数据"); + } + + /** + * 根据参数编号获取详细信息 + */ + @GetMapping(value = "/{configId}") + public Result getInfo (@PathVariable Long configId) { + return success(configService.getById(configId)); + } + + /** + * 根据参数键名查询参数值 + */ + @GetMapping(value = "/configKey/{configKey}") + public Result getConfigKey (@PathVariable String configKey) { + return success(configService.selectConfigByKey(configKey)); + } + + /** + * 新增参数配置 + */ + @RequiresPermissions("system:config:add") + @Log(title = "参数管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysConfig config) { + if (!configService.checkConfigKeyUnique(config)) { + return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setCreateBy(SecurityUtils.getUsername()); + return toAjax(configService.save(config)); + } + + /** + * 修改参数配置 + */ + @RequiresPermissions("system:config:edit") + @Log(title = "参数管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysConfig config) { + if (!configService.checkConfigKeyUnique(config)) { + return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(configService.updateById(config)); + } + + /** + * 删除参数配置 + */ + @RequiresPermissions("system:config:remove") + @Log(title = "参数管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public Result remove (@PathVariable Long[] configIds) { + configService.removeBatchByIds(Arrays.asList(configIds)); + return success(); + } + + /** + * 刷新参数缓存 + */ + @RequiresPermissions("system:config:remove") + @Log(title = "参数管理", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public Result refreshCache () { + configService.resetConfigCache(); + return success(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java new file mode 100644 index 0000000..2f97b3d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java @@ -0,0 +1,113 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.system.service.SysDeptService; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 部门信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/dept") +public class SysDeptController extends BaseController { + + @Autowired + private SysDeptService deptService; + + /** + * 获取部门列表 + */ + @RequiresPermissions("system:dept:list") + @GetMapping("/list") + public Result list (SysDept dept) { + List depts = deptService.selectDeptList(dept); + return success(depts); + } + + /** + * 查询部门列表(排除节点) + */ + @RequiresPermissions("system:dept:list") + @GetMapping("/list/exclude/{deptId}") + public Result excludeChild (@PathVariable(value = "deptId", required = false) Long deptId) { + List depts = deptService.selectDeptList(new SysDept()); + depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); + return success(depts); + } + + /** + * 根据部门编号获取详细信息 + */ + @RequiresPermissions("system:dept:query") + @GetMapping(value = "/{deptId}") + public Result getInfo (@PathVariable Long deptId) { + deptService.checkDeptDataScope(deptId); + return success(deptService.selectDeptById(deptId)); + } + + /** + * 新增部门 + */ + @RequiresPermissions("system:dept:add") + @Log(title = "部门管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysDept dept) { + if (!deptService.checkDeptNameUnique(dept)) { + return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } + dept.setCreateBy(SecurityUtils.getUsername()); + return toAjax(deptService.insertDept(dept)); + } + + /** + * 修改部门 + */ + @RequiresPermissions("system:dept:edit") + @Log(title = "部门管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysDept dept) { + Long deptId = dept.getDeptId(); + deptService.checkDeptDataScope(deptId); + if (!deptService.checkDeptNameUnique(dept)) { + return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } else if (dept.getParentId().equals(deptId)) { + return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); + } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) { + return error("该部门包含未停用的子部门!"); + } + dept.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + /** + * 删除部门 + */ + @RequiresPermissions("system:dept:remove") + @Log(title = "部门管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + public Result remove (@PathVariable Long deptId) { + if (deptService.hasChildByDeptId(deptId)) { + return warn("存在下级部门,不允许删除"); + } + if (deptService.checkDeptExistUser(deptId)) { + return warn("部门存在用户,不允许删除"); + } + deptService.checkDeptDataScope(deptId); + return toAjax(deptService.deleteDeptById(deptId)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java new file mode 100644 index 0000000..518dfe5 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java @@ -0,0 +1,107 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDictData; +import com.ruoyi.system.service.SysDictDataService; +import com.ruoyi.system.service.SysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * 数据字典信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/dict/data") +public class SysDictDataController extends BaseController { + @Autowired + private SysDictDataService dictDataService; + + @Autowired + private SysDictTypeService dictTypeService; + + @RequiresPermissions("system:dict:list") + @GetMapping("/list") + public Result> list (SysDictData dictData) { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "字典数据", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:dict:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysDictData dictData) { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil(SysDictData.class); + util.exportExcel(response, list, "字典数据"); + } + + /** + * 查询字典数据详细 + */ + @RequiresPermissions("system:dict:query") + @GetMapping(value = "/{dictCode}") + public Result getInfo (@PathVariable Long dictCode) { + return success(dictDataService.selectDictDataById(dictCode)); + } + + /** + * 根据字典类型查询字典数据信息 + */ + @GetMapping(value = "/type/{dictType}") + public Result dictType (@PathVariable String dictType) { + List data = dictTypeService.selectDictDataByType(dictType); + if (StringUtils.isNull(data)) { + data = new ArrayList(); + } + return success(data); + } + + /** + * 新增字典类型 + */ + @RequiresPermissions("system:dict:add") + @Log(title = "字典数据", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysDictData dict) { + dict.setCreateBy(SecurityUtils.getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + /** + * 修改保存字典类型 + */ + @RequiresPermissions("system:dict:edit") + @Log(title = "字典数据", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysDictData dict) { + dict.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + /** + * 删除字典类型 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public Result remove (@PathVariable Long[] dictCodes) { + dictDataService.deleteDictDataByIds(dictCodes); + return success(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java new file mode 100644 index 0000000..4f604e3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java @@ -0,0 +1,115 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDictType; +import com.ruoyi.system.service.SysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 数据字典信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/dict/type") +public class SysDictTypeController extends BaseController { + @Autowired + private SysDictTypeService dictTypeService; + + @RequiresPermissions("system:dict:list") + @GetMapping("/list") + public Result> list (SysDictType dictType) { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @Log(title = "字典类型", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:dict:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysDictType dictType) { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(SysDictType.class); + util.exportExcel(response, list, "字典类型"); + } + + /** + * 查询字典类型详细 + */ + @RequiresPermissions("system:dict:query") + @GetMapping(value = "/{dictId}") + public Result getInfo (@PathVariable Long dictId) { + return success(dictTypeService.selectDictTypeById(dictId)); + } + + /** + * 新增字典类型 + */ + @RequiresPermissions("system:dict:add") + @Log(title = "字典类型", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysDictType dict) { + if (!dictTypeService.checkDictTypeUnique(dict)) { + return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setCreateBy(SecurityUtils.getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + /** + * 修改字典类型 + */ + @RequiresPermissions("system:dict:edit") + @Log(title = "字典类型", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysDictType dict) { + if (!dictTypeService.checkDictTypeUnique(dict)) { + return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + /** + * 删除字典类型 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + public Result remove (@PathVariable Long[] dictIds) { + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); + } + + /** + * 刷新字典缓存 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public Result refreshCache () { + dictTypeService.resetDictCache(); + return success(); + } + + /** + * 获取字典选择框列表 + */ + @GetMapping("/optionselect") + public Result optionselect () { + List dictTypes = dictTypeService.selectDictTypeAll(); + return success(dictTypes); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java new file mode 100644 index 0000000..81de4eb --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java @@ -0,0 +1,80 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.annotation.InnerAuth; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.system.domain.SysLogininfor; +import com.ruoyi.system.service.SysLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 系统访问记录 + * + * @author muyu + */ +@RestController +@RequestMapping("/logininfor") +public class SysLogininforController extends BaseController { + @Autowired + private SysLogininforService logininforService; + + @Autowired + private RedisService redisService; + + @RequiresPermissions("system:logininfor:list") + @GetMapping("/list") + public Result> list (SysLogininfor logininfor) { + startPage(); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @Log(title = "登录日志", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:logininfor:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysLogininfor logininfor) { + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(SysLogininfor.class); + util.exportExcel(response, list, "登录日志"); + } + + @RequiresPermissions("system:logininfor:remove") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + public Result remove (@PathVariable Long[] infoIds) { + return toAjax(logininforService.deleteLogininforByIds(infoIds)); + } + + @RequiresPermissions("system:logininfor:remove") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/clean") + public Result clean () { + logininforService.cleanLogininfor(); + return success(); + } + + @RequiresPermissions("system:logininfor:unlock") + @Log(title = "账户解锁", businessType = BusinessType.OTHER) + @GetMapping("/unlock/{userName}") + public Result unlock (@PathVariable("userName") String userName) { + redisService.deleteObject(CacheConstants.PWD_ERR_CNT_KEY + userName); + return success(); + } + + @InnerAuth + @PostMapping + public Result add (@RequestBody SysLogininfor logininfor) { + return toAjax(logininforService.insertLogininfor(logininfor)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java new file mode 100644 index 0000000..bbf4e09 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java @@ -0,0 +1,137 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.domain.SysMenu; +import com.ruoyi.system.domain.resp.RoleMenuTreeResp; +import com.ruoyi.system.service.SysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 菜单信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/menu") +public class SysMenuController extends BaseController { + @Autowired + private SysMenuService menuService; + + /** + * 获取菜单列表 + */ + @RequiresPermissions("system:menu:list") + @GetMapping("/list") + public Result list (SysMenu menu) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(menu, userId); + return success(menus); + } + + /** + * 根据菜单编号获取详细信息 + */ + @RequiresPermissions("system:menu:query") + @GetMapping(value = "/{menuId}") + public Result getInfo (@PathVariable Long menuId) { + return success(menuService.selectMenuById(menuId)); + } + + /** + * 获取菜单下拉树列表 + */ + @GetMapping("/treeselect") + public Result treeselect (SysMenu menu) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(menu, userId); + return success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 加载对应角色菜单列表树 + */ + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + public Result roleMenuTreeselect (@PathVariable("roleId") Long roleId) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(userId); + return Result.success( + RoleMenuTreeResp.builder() + .menus(menuService.buildMenuTreeSelect(menus)) + .checkedKeys(menuService.selectMenuListByRoleId(roleId)) + .build() + ); + } + + /** + * 新增菜单 + */ + @RequiresPermissions("system:menu:add") + @Log(title = "菜单管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysMenu menu) { + if (!menuService.checkMenuNameUnique(menu)) { + return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { + return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } + menu.setCreateBy(SecurityUtils.getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + /** + * 修改菜单 + */ + @RequiresPermissions("system:menu:edit") + @Log(title = "菜单管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysMenu menu) { + if (!menuService.checkMenuNameUnique(menu)) { + return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { + return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } else if (menu.getMenuId().equals(menu.getParentId())) { + return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); + } + menu.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + /** + * 删除菜单 + */ + @RequiresPermissions("system:menu:remove") + @Log(title = "菜单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public Result remove (@PathVariable("menuId") Long menuId) { + if (menuService.hasChildByMenuId(menuId)) { + return warn("存在子菜单,不允许删除"); + } + if (menuService.checkMenuExistRole(menuId)) { + return warn("菜单已分配,不允许删除"); + } + return toAjax(menuService.deleteMenuById(menuId)); + } + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @GetMapping("getRouters") + public Result getRouters () { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return success(menuService.buildMenus(menus)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java new file mode 100644 index 0000000..6ee6c7c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java @@ -0,0 +1,80 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.service.SysNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 公告 信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/notice") +public class SysNoticeController extends BaseController { + @Autowired + private SysNoticeService noticeService; + + /** + * 获取通知公告列表 + */ + @RequiresPermissions("system:notice:list") + @GetMapping("/list") + public Result> list (SysNotice notice) { + startPage(); + List list = noticeService.selectNoticeList(notice); + return getDataTable(list); + } + + /** + * 根据通知公告编号获取详细信息 + */ + @RequiresPermissions("system:notice:query") + @GetMapping(value = "/{noticeId}") + public Result getInfo (@PathVariable Long noticeId) { + return success(noticeService.selectNoticeById(noticeId)); + } + + /** + * 新增通知公告 + */ + @RequiresPermissions("system:notice:add") + @Log(title = "通知公告", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysNotice notice) { + notice.setCreateBy(SecurityUtils.getUsername()); + return toAjax(noticeService.insertNotice(notice)); + } + + /** + * 修改通知公告 + */ + @RequiresPermissions("system:notice:edit") + @Log(title = "通知公告", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysNotice notice) { + notice.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(noticeService.updateNotice(notice)); + } + + /** + * 删除通知公告 + */ + @RequiresPermissions("system:notice:remove") + @Log(title = "通知公告", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public Result remove (@PathVariable Long[] noticeIds) { + return toAjax(noticeService.deleteNoticeByIds(noticeIds)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java new file mode 100644 index 0000000..9bde5e9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java @@ -0,0 +1,67 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.InnerAuth; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.system.domain.SysOperLog; +import com.ruoyi.system.service.SysOperLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 操作日志记录 + * + * @author muyu + */ +@RestController +@RequestMapping("/operlog") +public class SysOperlogController extends BaseController { + @Autowired + private SysOperLogService operLogService; + + @RequiresPermissions("system:operlog:list") + @GetMapping("/list") + public Result> list (SysOperLog operLog) { + startPage(); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:operlog:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysOperLog operLog) { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + util.exportExcel(response, list, "操作日志"); + } + + @Log(title = "操作日志", businessType = BusinessType.DELETE) + @RequiresPermissions("system:operlog:remove") + @DeleteMapping("/{operIds}") + public Result remove (@PathVariable Long[] operIds) { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @RequiresPermissions("system:operlog:remove") + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public Result clean () { + operLogService.cleanOperLog(); + return success(); + } + + @InnerAuth + @PostMapping + public Result add (@RequestBody SysOperLog operLog) { + return toAjax(operLogService.insertOperlog(operLog)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java new file mode 100644 index 0000000..19ae1f0 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java @@ -0,0 +1,110 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.service.SysPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 岗位信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/post") +public class SysPostController extends BaseController { + @Autowired + private SysPostService postService; + + /** + * 获取岗位列表 + */ + @RequiresPermissions("system:post:list") + @GetMapping("/list") + public Result> list (SysPost post) { + startPage(); + List list = postService.selectPostList(post); + return getDataTable(list); + } + + @Log(title = "岗位管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:post:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysPost post) { + List list = postService.selectPostList(post); + ExcelUtil util = new ExcelUtil(SysPost.class); + util.exportExcel(response, list, "岗位数据"); + } + + /** + * 根据岗位编号获取详细信息 + */ + @RequiresPermissions("system:post:query") + @GetMapping(value = "/{postId}") + public Result getInfo (@PathVariable Long postId) { + return success(postService.selectPostById(postId)); + } + + /** + * 新增岗位 + */ + @RequiresPermissions("system:post:add") + @Log(title = "岗位管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysPost post) { + if (!postService.checkPostNameUnique(post)) { + return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + } else if (!postService.checkPostCodeUnique(post)) { + return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } + post.setCreateBy(SecurityUtils.getUsername()); + return toAjax(postService.insertPost(post)); + } + + /** + * 修改岗位 + */ + @RequiresPermissions("system:post:edit") + @Log(title = "岗位管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysPost post) { + if (!postService.checkPostNameUnique(post)) { + return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + } else if (!postService.checkPostCodeUnique(post)) { + return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } + post.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(postService.updatePost(post)); + } + + /** + * 删除岗位 + */ + @RequiresPermissions("system:post:remove") + @Log(title = "岗位管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{postIds}") + public Result remove (@PathVariable Long[] postIds) { + return toAjax(postService.deletePostByIds(postIds)); + } + + /** + * 获取岗位选择框列表 + */ + @GetMapping("/optionselect") + public Result optionselect () { + List posts = postService.selectPostAll(); + return success(posts); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java new file mode 100644 index 0000000..cae9790 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java @@ -0,0 +1,134 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.file.FileTypeUtils; +import com.ruoyi.common.core.utils.file.MimeTypeUtils; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.remote.RemoteFileService; +import com.ruoyi.common.system.domain.SysFile; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.common.system.domain.LoginUser; +import com.ruoyi.system.domain.resp.ProfileResp; +import com.ruoyi.system.service.SysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Arrays; + +/** + * 个人信息 业务处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/user/profile") +public class SysProfileController extends BaseController { + @Autowired + private SysUserService userService; + + @Autowired + private TokenService tokenService; + + @Autowired + private RemoteFileService remoteFileService; + + /** + * 个人信息 + */ + @GetMapping + public Result profile () { + String username = SecurityUtils.getUsername(); + SysUser user = userService.selectUserByUserName(username); + return Result.success( + ProfileResp.builder() + .roleGroup( userService.selectUserRoleGroup(username) ) + .postGroup( userService.selectUserPostGroup(username) ) + .sysUser(user) + .build() + ); + } + + /** + * 修改用户 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping + public Result updateProfile (@RequestBody SysUser user) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser currentUser = loginUser.getSysUser(); + currentUser.setNickName(user.getNickName()); + currentUser.setEmail(user.getEmail()); + currentUser.setPhonenumber(user.getPhonenumber()); + currentUser.setSex(user.getSex()); + if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) { + return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } + if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) { + return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + if (userService.updateUserProfile(currentUser) > 0) { + // 更新缓存用户信息 + tokenService.setLoginUser(loginUser); + return success(); + } + return error("修改个人信息异常,请联系管理员"); + } + + /** + * 重置密码 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + public Result updatePwd (String oldPassword, String newPassword) { + String username = SecurityUtils.getUsername(); + SysUser user = userService.selectUserByUserName(username); + String password = user.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) { + return error("修改密码失败,旧密码错误"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) { + return error("新密码不能与旧密码相同"); + } + if (userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) { + // 更新缓存用户密码 + LoginUser loginUser = SecurityUtils.getLoginUser(); + loginUser.getSysUser().setPassword(SecurityUtils.encryptPassword(newPassword)); + tokenService.setLoginUser(loginUser); + return success(); + } + return error("修改密码异常,请联系管理员"); + } + + /** + * 头像上传 + */ + @Log(title = "用户头像", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + public Result avatar (@RequestParam("avatarfile") MultipartFile file) { + if (!file.isEmpty()) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + String extension = FileTypeUtils.getExtension(file); + if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { + return error("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式"); + } + Result fileResult = remoteFileService.upload(file); + if (StringUtils.isNull(fileResult) || StringUtils.isNull(fileResult.getData())) { + return error("文件服务异常,请联系管理员"); + } + String url = fileResult.getData().getUrl(); + if (userService.updateUserAvatar(loginUser.getUsername(), url)) { + // 更新缓存用户头像 + loginUser.getSysUser().setAvatar(url); + tokenService.setLoginUser(loginUser); + return Result.success(url); + } + } + return error("上传图片异常,请联系管理员"); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java new file mode 100644 index 0000000..3918189 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java @@ -0,0 +1,214 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.domain.resp.DeptTreeResp; +import com.ruoyi.system.service.SysDeptService; +import com.ruoyi.system.service.SysRoleService; +import com.ruoyi.system.service.SysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 角色信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/role") +public class SysRoleController extends BaseController { + @Autowired + private SysRoleService roleService; + + @Autowired + private SysUserService userService; + + @Autowired + private SysDeptService deptService; + + @RequiresPermissions("system:role:list") + @GetMapping("/list") + public Result> list (SysRole role) { + startPage(); + List list = roleService.selectRoleList(role); + return getDataTable(list); + } + + @Log(title = "角色管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:role:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysRole role) { + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(SysRole.class); + util.exportExcel(response, list, "角色数据"); + } + + /** + * 根据角色编号获取详细信息 + */ + @RequiresPermissions("system:role:query") + @GetMapping(value = "/{roleId}") + public Result getInfo (@PathVariable Long roleId) { + roleService.checkRoleDataScope(roleId); + return success(roleService.selectRoleById(roleId)); + } + + /** + * 新增角色 + */ + @RequiresPermissions("system:role:add") + @Log(title = "角色管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysRole role) { + if (!roleService.checkRoleNameUnique(role)) { + return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } else if (!roleService.checkRoleKeyUnique(role)) { + return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); + } + role.setCreateBy(SecurityUtils.getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 修改保存角色 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + if (!roleService.checkRoleNameUnique(role)) { + return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } else if (!roleService.checkRoleKeyUnique(role)) { + return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); + } + role.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(roleService.updateRole(role)); + } + + /** + * 修改保存数据权限 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public Result dataScope (@RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + return toAjax(roleService.authDataScope(role)); + } + + /** + * 状态修改 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public Result changeStatus (@RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + role.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 删除角色 + */ + @RequiresPermissions("system:role:remove") + @Log(title = "角色管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public Result remove (@PathVariable Long[] roleIds) { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 获取角色选择框列表 + */ + @RequiresPermissions("system:role:query") + @GetMapping("/optionselect") + public Result optionselect () { + return success(roleService.selectRoleAll()); + } + + /** + * 查询已分配用户角色列表 + */ + @RequiresPermissions("system:role:list") + @GetMapping("/authUser/allocatedList") + public Result> allocatedList (SysUser user) { + startPage(); + List list = userService.selectAllocatedList(user); + return getDataTable(list); + } + + /** + * 查询未分配用户角色列表 + */ + @RequiresPermissions("system:role:list") + @GetMapping("/authUser/unallocatedList") + public Result> unallocatedList (SysUser user) { + startPage(); + List list = userService.selectUnallocatedList(user); + return getDataTable(list); + } + + /** + * 取消授权用户 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public Result cancelAuthUser (@RequestBody SysUserRole userRole) { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 批量取消授权用户 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public Result cancelAuthUserAll (Long roleId, Long[] userIds) { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 批量选择用户授权 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public Result selectAuthUserAll (Long roleId, Long[] userIds) { + roleService.checkRoleDataScope(roleId); + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } + + /** + * 获取对应角色部门树列表 + */ + @RequiresPermissions("system:role:query") + @GetMapping(value = "/deptTree/{roleId}") + public Result deptTree (@PathVariable("roleId") Long roleId) { + return Result.success( + DeptTreeResp.builder() + .depts(deptService.selectDeptTreeList(new SysDept())) + .checkedKeys(deptService.selectDeptListByRoleId(roleId)) + .build() + ); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java new file mode 100644 index 0000000..c020d2b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java @@ -0,0 +1,293 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.InnerAuth; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.common.system.domain.LoginUser; +import com.ruoyi.system.domain.resp.AuthRoleResp; +import com.ruoyi.system.domain.resp.UserDetailInfoResp; +import com.ruoyi.system.domain.resp.UserInfoResp; +import com.ruoyi.system.service.*; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 用户信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/user") +public class SysUserController extends BaseController { + @Autowired + private SysUserService userService; + + @Autowired + private SysRoleService roleService; + + @Autowired + private SysDeptService deptService; + + @Autowired + private SysPostService postService; + + @Autowired + private SysPermissionService permissionService; + + @Autowired + private SysConfigService configService; + + /** + * 获取用户列表 + */ + @RequiresPermissions("system:user:list") + @GetMapping("/list") + public Result> list (SysUser user) { + startPage(); + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @Log(title = "用户管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:user:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysUser user) { + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(SysUser.class); + util.exportExcel(response, list, "用户数据"); + } + + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @RequiresPermissions("system:user:import") + @PostMapping("/importData") + public Result importData (MultipartFile file, boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + String operName = SecurityUtils.getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return success(message); + } + + @PostMapping("/importTemplate") + public void importTemplate (HttpServletResponse response) throws IOException { + ExcelUtil util = new ExcelUtil(SysUser.class); + util.importTemplateExcel(response, "用户数据"); + } + + /** + * 获取当前用户信息 + */ + @InnerAuth + @GetMapping("/info/{username}") + public Result info (@PathVariable("username") String username) { + SysUser sysUser = userService.selectUserByUserName(username); + if (StringUtils.isNull(sysUser)) { + return Result.error("用户名或密码错误"); + } + // 角色集合 + Set roles = permissionService.getRolePermission(sysUser); + // 权限集合 + Set permissions = permissionService.getMenuPermission(sysUser); + LoginUser sysUserVo = new LoginUser(); + sysUserVo.setSysUser(sysUser); + sysUserVo.setRoles(roles); + sysUserVo.setPermissions(permissions); + return Result.success(sysUserVo); + } + + /** + * 注册用户信息 + */ + @InnerAuth + @PostMapping("/register") + public Result register (@RequestBody SysUser sysUser) { + String username = sysUser.getUserName(); + if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { + return Result.error("当前系统没有开启注册功能!"); + } + if (!userService.checkUserNameUnique(sysUser)) { + return Result.error("保存用户'" + username + "'失败,注册账号已存在"); + } + return Result.success(userService.registerUser(sysUser)); + } + + /** + * 获取用户信息 + * + * @return 用户信息 + */ + @GetMapping("getInfo") + public Result getInfo () { + SysUser user = userService.selectUserById(SecurityUtils.getUserId()); + // 角色集合 + Set roles = permissionService.getRolePermission(user); + // 权限集合 + Set permissions = permissionService.getMenuPermission(user); + + return Result.success( + UserInfoResp.builder() + .user(user) + .roles(roles) + .permissions(permissions) + .build() + ); + } + + /** + * 根据用户编号获取详细信息 + */ + @RequiresPermissions("system:user:query") + @GetMapping(value = {"/", "/{userId}"}) + public Result getInfo (@PathVariable(value = "userId", required = false) Long userId) { + userService.checkUserDataScope(userId); + UserDetailInfoResp.UserDetailInfoRespBuilder builder = UserDetailInfoResp.builder(); + List roles = roleService.selectRoleAll(); + builder.roles( + SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()) + ) + .posts( postService.selectPostAll() ); + if (StringUtils.isNotNull(userId)) { + SysUser sysUser = userService.selectUserById(userId); + builder.sysUser(sysUser) + .postIds(postService.selectPostListByUserId(userId)) + .roleIds(sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())) + .build(); + } + return Result.success(builder.build()); + } + + /** + * 新增用户 + */ + @RequiresPermissions("system:user:add") + @Log(title = "用户管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysUser user) { + if (!userService.checkUserNameUnique(user)) { + return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); + } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { + return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { + return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setCreateBy(SecurityUtils.getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 修改用户 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysUser user) { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + if (!userService.checkUserNameUnique(user)) { + return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); + } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { + return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { + return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(userService.updateUser(user)); + } + + /** + * 删除用户 + */ + @RequiresPermissions("system:user:remove") + @Log(title = "用户管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public Result remove (@PathVariable Long[] userIds) { + if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) { + return error("当前用户不能删除"); + } + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 重置密码 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public Result resetPwd (@RequestBody SysUser user) { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(userService.resetPwd(user)); + } + + /** + * 状态修改 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public Result changeStatus (@RequestBody SysUser user) { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + /** + * 根据用户编号获取授权角色 + */ + @RequiresPermissions("system:user:query") + @GetMapping("/authRole/{userId}") + public Result authRole (@PathVariable("userId") Long userId) { + SysUser user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + return Result.success( + AuthRoleResp.builder() + .roles(SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())) + .user(user) + .build() + ); + } + + /** + * 用户授权角色 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public Result insertAuthRole (Long userId, Long[] roleIds) { + userService.checkUserDataScope(userId); + userService.insertUserAuth(userId, roleIds); + return success(); + } + + /** + * 获取部门树列表 + */ + @RequiresPermissions("system:user:list") + @GetMapping("/deptTree") + public Result deptTree (SysDept dept) { + return success(deptService.selectDeptTreeList(dept)); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java new file mode 100644 index 0000000..1496f27 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java @@ -0,0 +1,69 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.system.domain.LoginUser; +import com.ruoyi.system.domain.SysUserOnline; +import com.ruoyi.system.service.SysUserOnlineService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * 在线用户监控 + * + * @author muyu + */ +@RestController +@RequestMapping("/online") +public class SysUserOnlineController extends BaseController { + @Autowired + private SysUserOnlineService userOnlineService; + + @Autowired + private RedisService redisService; + + @RequiresPermissions("monitor:online:list") + @GetMapping("/list") + public Result> list (String ipaddr, String userName) { + Collection keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) { + LoginUser user = redisService.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { + userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); + } else if (StringUtils.isNotEmpty(ipaddr)) { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); + } else if (StringUtils.isNotEmpty(userName)) { + userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); + } else { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return getDataTable(userOnlineList); + } + + /** + * 强退用户 + */ + @RequiresPermissions("monitor:online:forceLogout") + @Log(title = "在线用户", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public Result forceLogout (@PathVariable String tokenId) { + redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); + return success(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/MyBook.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/MyBook.java new file mode 100644 index 0000000..9ddc1e6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/MyBook.java @@ -0,0 +1,138 @@ +package com.ruoyi.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; +/** + * 图书管理对象 my_book + * + * @author ruoyi + * @date 2024-02-26 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class MyBook extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 编号 */ + private Long id; + + /** 书名 */ + @Excel(name = "书名") + private String title; + + /** 作者 */ + @Excel(name = "作者") + private String author; + + /** 类型 */ + @Excel(name = "类型") + private Long type; + + /** 图片 */ + @Excel(name = "图片") + private String picture; + + /** 介绍 */ + @Excel(name = "介绍") + private String intro; + + /** 上架时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "上架时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date shelfTime; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setTitle(String title) + { + this.title = title; + } + + public String getTitle() + { + return title; + } + public void setAuthor(String author) + { + this.author = author; + } + + public String getAuthor() + { + return author; + } + public void setType(Long type) + { + this.type = type; + } + + public Long getType() + { + return type; + } + public void setPicture(String picture) + { + this.picture = picture; + } + + public String getPicture() + { + return picture; + } + public void setIntro(String intro) + { + this.intro = intro; + } + + public String getIntro() + { + return intro; + } + public void setShelfTime(Date shelfTime) + { + this.shelfTime = shelfTime; + } + + public Date getShelfTime() + { + return shelfTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("title", getTitle()) + .append("author", getAuthor()) + .append("type", getType()) + .append("picture", getPicture()) + .append("intro", getIntro()) + .append("shelfTime", getShelfTime()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java new file mode 100644 index 0000000..6843112 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -0,0 +1,126 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 参数配置表 sys_config + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName("sys_config") +public class SysConfig extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 参数主键 + */ + @Excel(name = "参数主键", cellType = ColumnType.NUMERIC) + @TableId( type = IdType.AUTO) + private Long configId; + + /** + * 参数名称 + */ + @Excel(name = "参数名称") + private String configName; + + /** + * 参数键名 + */ + @Excel(name = "参数键名") + private String configKey; + + /** + * 参数键值 + */ + @Excel(name = "参数键值") + private String configValue; + + /** + * 系统内置(Y是 N否) + */ + @Excel(name = "系统内置", readConverterExp = "Y=是,N=否") + private String configType; + + public Long getConfigId () { + return configId; + } + + public void setConfigId (Long configId) { + this.configId = configId; + } + + @NotBlank(message = "参数名称不能为空") + @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") + public String getConfigName () { + return configName; + } + + public void setConfigName (String configName) { + this.configName = configName; + } + + @NotBlank(message = "参数键名长度不能为空") + @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") + public String getConfigKey () { + return configKey; + } + + public void setConfigKey (String configKey) { + this.configKey = configKey; + } + + @NotBlank(message = "参数键值不能为空") + @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") + public String getConfigValue () { + return configValue; + } + + public void setConfigValue (String configValue) { + this.configValue = configValue; + } + + public String getConfigType () { + return configType; + } + + public void setConfigType (String configType) { + this.configType = configType; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("configId", getConfigId()) + .append("configName", getConfigName()) + .append("configKey", getConfigKey()) + .append("configValue", getConfigValue()) + .append("configType", getConfigType()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java new file mode 100644 index 0000000..bfd378f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java @@ -0,0 +1,269 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 菜单权限表 sys_menu + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysMenu extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 菜单ID + */ + private Long menuId; + + /** + * 菜单名称 + */ + private String menuName; + + /** + * 父菜单名称 + */ + private String parentName; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 路由地址 + */ + private String path; + + /** + * 组件路径 + */ + private String component; + + /** + * 路由参数 + */ + private String query; + + /** + * 是否为外链(0是 1否) + */ + private String isFrame; + + /** + * 是否缓存(0缓存 1不缓存) + */ + private String isCache; + + /** + * 类型(M目录 C菜单 F按钮) + */ + private String menuType; + + /** + * 显示状态(0显示 1隐藏) + */ + private String visible; + + /** + * 菜单状态(0正常 1停用) + */ + private String status; + + /** + * 权限字符串 + */ + private String perms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 子菜单 + */ + private List children = new ArrayList(); + + public Long getMenuId () { + return menuId; + } + + public void setMenuId (Long menuId) { + this.menuId = menuId; + } + + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") + public String getMenuName () { + return menuName; + } + + public void setMenuName (String menuName) { + this.menuName = menuName; + } + + public String getParentName () { + return parentName; + } + + public void setParentName (String parentName) { + this.parentName = parentName; + } + + public Long getParentId () { + return parentId; + } + + public void setParentId (Long parentId) { + this.parentId = parentId; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum () { + return orderNum; + } + + public void setOrderNum (Integer orderNum) { + this.orderNum = orderNum; + } + + @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") + public String getPath () { + return path; + } + + public void setPath (String path) { + this.path = path; + } + + @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") + public String getComponent () { + return component; + } + + public void setComponent (String component) { + this.component = component; + } + + public String getQuery () { + return query; + } + + public void setQuery (String query) { + this.query = query; + } + + public String getIsFrame () { + return isFrame; + } + + public void setIsFrame (String isFrame) { + this.isFrame = isFrame; + } + + public String getIsCache () { + return isCache; + } + + public void setIsCache (String isCache) { + this.isCache = isCache; + } + + @NotBlank(message = "菜单类型不能为空") + public String getMenuType () { + return menuType; + } + + public void setMenuType (String menuType) { + this.menuType = menuType; + } + + public String getVisible () { + return visible; + } + + public void setVisible (String visible) { + this.visible = visible; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + public String getPerms () { + return perms; + } + + public void setPerms (String perms) { + this.perms = perms; + } + + public String getIcon () { + return icon; + } + + public void setIcon (String icon) { + this.icon = icon; + } + + public List getChildren () { + return children; + } + + public void setChildren (List children) { + this.children = children; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java new file mode 100644 index 0000000..973c83f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -0,0 +1,112 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.common.core.xss.Xss; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 通知公告表 sys_notice + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysNotice extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 公告ID + */ + private Long noticeId; + + /** + * 公告标题 + */ + private String noticeTitle; + + /** + * 公告类型(1通知 2公告) + */ + private String noticeType; + + /** + * 公告内容 + */ + private String noticeContent; + + /** + * 公告状态(0正常 1关闭) + */ + private String status; + + public Long getNoticeId () { + return noticeId; + } + + public void setNoticeId (Long noticeId) { + this.noticeId = noticeId; + } + + @Xss(message = "公告标题不能包含脚本字符") + @NotBlank(message = "公告标题不能为空") + @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") + public String getNoticeTitle () { + return noticeTitle; + } + + public void setNoticeTitle (String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeType () { + return noticeType; + } + + public void setNoticeType (String noticeType) { + this.noticeType = noticeType; + } + + public String getNoticeContent () { + return noticeContent; + } + + public void setNoticeContent (String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("noticeId", getNoticeId()) + .append("noticeTitle", getNoticeTitle()) + .append("noticeType", getNoticeType()) + .append("noticeContent", getNoticeContent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java new file mode 100644 index 0000000..37f922b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -0,0 +1,134 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.annotation.Excel.ColumnType; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 岗位表 sys_post + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysPost extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 岗位序号 + */ + @Excel(name = "岗位序号", cellType = ColumnType.NUMERIC) + private Long postId; + + /** + * 岗位编码 + */ + @Excel(name = "岗位编码") + private String postCode; + + /** + * 岗位名称 + */ + @Excel(name = "岗位名称") + private String postName; + + /** + * 岗位排序 + */ + @Excel(name = "岗位排序") + private Integer postSort; + + /** + * 状态(0正常 1停用) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 用户是否存在此岗位标识 默认不存在 + */ + private boolean flag = false; + + public Long getPostId () { + return postId; + } + + public void setPostId (Long postId) { + this.postId = postId; + } + + @NotBlank(message = "岗位编码不能为空") + @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") + public String getPostCode () { + return postCode; + } + + public void setPostCode (String postCode) { + this.postCode = postCode; + } + + @NotBlank(message = "岗位名称不能为空") + @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") + public String getPostName () { + return postName; + } + + public void setPostName (String postName) { + this.postName = postName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getPostSort () { + return postSort; + } + + public void setPostSort (Integer postSort) { + this.postSort = postSort; + } + + public String getStatus () { + return status; + } + + public void setStatus (String status) { + this.status = status; + } + + public boolean isFlag () { + return flag; + } + + public void setFlag (boolean flag) { + this.flag = flag; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("postId", getPostId()) + .append("postCode", getPostCode()) + .append("postName", getPostName()) + .append("postSort", getPostSort()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java new file mode 100644 index 0000000..b906afd --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和部门关联 sys_role_dept + * + * @author muyu + */ +public class SysRoleDept { + /** + * 角色ID + */ + private Long roleId; + + /** + * 部门ID + */ + private Long deptId; + + public Long getRoleId () { + return roleId; + } + + public void setRoleId (Long roleId) { + this.roleId = roleId; + } + + public Long getDeptId () { + return deptId; + } + + public void setDeptId (Long deptId) { + this.deptId = deptId; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("deptId", getDeptId()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java new file mode 100644 index 0000000..2f0dec7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和菜单关联 sys_role_menu + * + * @author muyu + */ +public class SysRoleMenu { + /** + * 角色ID + */ + private Long roleId; + + /** + * 菜单ID + */ + private Long menuId; + + public Long getRoleId () { + return roleId; + } + + public void setRoleId (Long roleId) { + this.roleId = roleId; + } + + public Long getMenuId () { + return menuId; + } + + public void setMenuId (Long menuId) { + this.menuId = menuId; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("menuId", getMenuId()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java new file mode 100644 index 0000000..7990d7f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.domain; + +/** + * 当前在线会话 + * + * @author muyu + */ +public class SysUserOnline { + /** + * 会话编号 + */ + private String tokenId; + + /** + * 用户名称 + */ + private String userName; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地址 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 登录时间 + */ + private Long loginTime; + + public String getTokenId () { + return tokenId; + } + + public void setTokenId (String tokenId) { + this.tokenId = tokenId; + } + + public String getUserName () { + return userName; + } + + public void setUserName (String userName) { + this.userName = userName; + } + + public String getIpaddr () { + return ipaddr; + } + + public void setIpaddr (String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation () { + return loginLocation; + } + + public void setLoginLocation (String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser () { + return browser; + } + + public void setBrowser (String browser) { + this.browser = browser; + } + + public String getOs () { + return os; + } + + public void setOs (String os) { + this.os = os; + } + + public Long getLoginTime () { + return loginTime; + } + + public void setLoginTime (Long loginTime) { + this.loginTime = loginTime; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java new file mode 100644 index 0000000..d8fdcd6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和岗位关联 sys_user_post + * + * @author muyu + */ +public class SysUserPost { + /** + * 用户ID + */ + private Long userId; + + /** + * 岗位ID + */ + private Long postId; + + public Long getUserId () { + return userId; + } + + public void setUserId (Long userId) { + this.userId = userId; + } + + public Long getPostId () { + return postId; + } + + public void setPostId (Long postId) { + this.postId = postId; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("postId", getPostId()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java new file mode 100644 index 0000000..df2bb33 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和角色关联 sys_user_role + * + * @author muyu + */ +public class SysUserRole { + /** + * 用户ID + */ + private Long userId; + + /** + * 角色ID + */ + private Long roleId; + + public Long getUserId () { + return userId; + } + + public void setUserId (Long userId) { + this.userId = userId; + } + + public Long getRoleId () { + return roleId; + } + + public void setRoleId (Long roleId) { + this.roleId = roleId; + } + + @Override + public String toString () { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/AuthRoleResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/AuthRoleResp.java new file mode 100644 index 0000000..69dd9c6 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/AuthRoleResp.java @@ -0,0 +1,33 @@ +package com.ruoyi.system.domain.resp; + + +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 授权角色返回结果集 + * @Date 2023-6-19 下午 02:50 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class AuthRoleResp { + + /** + * 用户信息 + */ + private SysUser user; + + /** + * 角色集合 + */ + private List roles; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/DeptTreeResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/DeptTreeResp.java new file mode 100644 index 0000000..feeca5c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/DeptTreeResp.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.domain.resp; + + +import com.ruoyi.system.domain.vo.TreeSelect; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 部门树返回结果集 + * @Date 2023-6-19 下午 02:52 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class DeptTreeResp { + + /** + * 授权的ID + */ + private List checkedKeys; + + /** + * 部门树 + */ + private List depts; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/ProfileResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/ProfileResp.java new file mode 100644 index 0000000..55a540e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/ProfileResp.java @@ -0,0 +1,34 @@ +package com.ruoyi.system.domain.resp; + +import com.ruoyi.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author DongZl + * @description: 个人信息模型对象 + * @Date 2023-6-19 下午 02:05 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class ProfileResp { + + /** + * 系统用户 + */ + private SysUser sysUser; + + /** + * 用户权限组 + */ + private String roleGroup; + + /** + * 用户岗位组 + */ + private String postGroup; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/RoleMenuTreeResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/RoleMenuTreeResp.java new file mode 100644 index 0000000..2a81ce7 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/RoleMenuTreeResp.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.domain.resp; + +import com.ruoyi.system.domain.vo.TreeSelect; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 角色返回菜单树 + * @Date 2023-6-19 下午 02:40 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class RoleMenuTreeResp { + + /** + * 拥有的菜单权限 + */ + private List checkedKeys; + + /** + * 系统所有的菜单 + */ + private List menus; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserDetailInfoResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserDetailInfoResp.java new file mode 100644 index 0000000..13f4a11 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserDetailInfoResp.java @@ -0,0 +1,47 @@ +package com.ruoyi.system.domain.resp; + +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 用户详细信息 + * @Date 2023-6-19 下午 02:45 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class UserDetailInfoResp { + + /** + * 角色权限集合 + */ + private List roles; + + /** + * 岗位集合 + */ + private List posts; + + /** + * 用户信息 + */ + private SysUser sysUser; + + /** + * 用户又有的职位ID + */ + private List postIds; + + /** + * 用户拥有的角色ID + */ + private List roleIds; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserInfoResp.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserInfoResp.java new file mode 100644 index 0000000..bbd9531 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/resp/UserInfoResp.java @@ -0,0 +1,36 @@ +package com.ruoyi.system.domain.resp; + +import com.ruoyi.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Set; + +/** + * @author DongZl + * @description: 用户信息结果集 + * @Date 2023-6-19 下午 02:42 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class UserInfoResp { + + /** + * 用户 + */ + private SysUser user; + + /** + * 角色集合 + */ + private Set roles; + + /** + * 权限集合 + */ + private Set permissions; +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java new file mode 100644 index 0000000..c4b7dee --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java @@ -0,0 +1,91 @@ +package com.ruoyi.system.domain.vo; + +import com.ruoyi.common.core.utils.StringUtils; + +/** + * 路由显示信息 + * + * @author muyu + */ +public class MetaVo { + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private boolean noCache; + + /** + * 内链地址(http(s)://开头) + */ + private String link; + + public MetaVo () { + } + + public MetaVo (String title, String icon) { + this.title = title; + this.icon = icon; + } + + public MetaVo (String title, String icon, boolean noCache) { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo (String title, String icon, String link) { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo (String title, String icon, boolean noCache, String link) { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) { + this.link = link; + } + } + + public boolean isNoCache () { + return noCache; + } + + public void setNoCache (boolean noCache) { + this.noCache = noCache; + } + + public String getTitle () { + return title; + } + + public void setTitle (String title) { + this.title = title; + } + + public String getIcon () { + return icon; + } + + public void setIcon (String icon) { + this.icon = icon; + } + + public String getLink () { + return link; + } + + public void setLink (String link) { + this.link = link; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java new file mode 100644 index 0000000..d838b3b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java @@ -0,0 +1,130 @@ +package com.ruoyi.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +/** + * 路由配置信息 + * + * @author muyu + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo { + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 路由参数:如 {"id": 1, "name": "ry"} + */ + private String query; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + + public String getName () { + return name; + } + + public void setName (String name) { + this.name = name; + } + + public String getPath () { + return path; + } + + public void setPath (String path) { + this.path = path; + } + + public boolean getHidden () { + return hidden; + } + + public void setHidden (boolean hidden) { + this.hidden = hidden; + } + + public String getRedirect () { + return redirect; + } + + public void setRedirect (String redirect) { + this.redirect = redirect; + } + + public String getComponent () { + return component; + } + + public void setComponent (String component) { + this.component = component; + } + + public String getQuery () { + return query; + } + + public void setQuery (String query) { + this.query = query; + } + + public Boolean getAlwaysShow () { + return alwaysShow; + } + + public void setAlwaysShow (Boolean alwaysShow) { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta () { + return meta; + } + + public void setMeta (MetaVo meta) { + this.meta = meta; + } + + public List getChildren () { + return children; + } + + public void setChildren (List children) { + this.children = children; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TreeSelect.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TreeSelect.java new file mode 100644 index 0000000..c4e3846 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TreeSelect.java @@ -0,0 +1,74 @@ +package com.ruoyi.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.system.domain.SysMenu; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Treeselect树结构实体类 + * + * @author muyu + */ +public class TreeSelect implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 节点ID + */ + private Long id; + + /** + * 节点名称 + */ + private String label; + + /** + * 子节点 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + public TreeSelect () { + + } + + public TreeSelect (SysDept dept) { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect (SysMenu menu) { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId () { + return id; + } + + public void setId (Long id) { + this.id = id; + } + + public String getLabel () { + return label; + } + + public void setLabel (String label) { + this.label = label; + } + + public List getChildren () { + return children; + } + + public void setChildren (List children) { + this.children = children; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MyBookMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MyBookMapper.java new file mode 100644 index 0000000..d05c771 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MyBookMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.MyBook; + +/** + * 图书管理Mapper接口 + * + * @author ruoyi + * @date 2024-02-26 + */ +public interface MyBookMapper +{ + /** + * 查询图书管理 + * + * @param id 图书管理主键 + * @return 图书管理 + */ + public MyBook selectMyBookById(Long id); + + /** + * 查询图书管理列表 + * + * @param myBook 图书管理 + * @return 图书管理集合 + */ + public List selectMyBookList(MyBook myBook); + + /** + * 新增图书管理 + * + * @param myBook 图书管理 + * @return 结果 + */ + public int insertMyBook(MyBook myBook); + + /** + * 修改图书管理 + * + * @param myBook 图书管理 + * @return 结果 + */ + public int updateMyBook(MyBook myBook); + + /** + * 删除图书管理 + * + * @param id 图书管理主键 + * @return 结果 + */ + public int deleteMyBookById(Long id); + + /** + * 批量删除图书管理 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteMyBookByIds(Long[] ids); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java new file mode 100644 index 0000000..587cffe --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -0,0 +1,12 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysConfig; + +/** + * @author DongZl + * @description: 配置mybatis配置 + * @Date 2023-11-13 上午 10:05 + */ +public interface SysConfigMapper extends BaseMapper { +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java new file mode 100644 index 0000000..6344a14 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -0,0 +1,131 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysDept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 部门管理 数据层 + * + * @author muyu + */ +public interface SysDeptMapper extends BaseMapper { + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * + * @return 部门信息集合 + */ + public List selectDeptList (SysDept dept); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @param deptCheckStrictly 部门树选择项是否关联显示 + * + * @return 选中部门列表 + */ + public List selectDeptListByRoleId (@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * + * @return 部门信息 + */ + public SysDept selectDeptById (Long deptId); + + /** + * 根据ID查询所有子部门 + * + * @param deptId 部门ID + * + * @return 部门列表 + */ + public List selectChildrenDeptById (Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * + * @return 子部门数 + */ + public int selectNormalChildrenDeptById (Long deptId); + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int hasChildByDeptId (Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int checkDeptExistUser (Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param deptName 部门名称 + * @param parentId 父部门ID + * + * @return 结果 + */ + public SysDept checkDeptNameUnique (@Param("deptName") String deptName, @Param("parentId") Long parentId); + + /** + * 新增部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int insertDept (SysDept dept); + + /** + * 修改部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int updateDept (SysDept dept); + + /** + * 修改所在部门正常状态 + * + * @param deptIds 部门ID组 + */ + public void updateDeptStatusNormal (Long[] deptIds); + + /** + * 修改子元素关系 + * + * @param depts 子元素 + * + * @return 结果 + */ + public int updateDeptChildren (@Param("depts") List depts); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int deleteDeptById (Long deptId); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java new file mode 100644 index 0000000..50b8b14 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java @@ -0,0 +1,105 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysDictData; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * 字典表 数据层 + * + * @author muyu + */ +public interface SysDictDataMapper extends BaseMapper { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * + * @return 字典数据集合信息 + */ + public List selectDictDataList (SysDictData dictData); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据集合信息 + */ + public List selectDictDataByType (String dictType); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * + * @return 字典标签 + */ + public String selectDictLabel (@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * + * @return 字典数据 + */ + public SysDictData selectDictDataById (Long dictCode); + + /** + * 查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据 + */ + public int countDictDataByType (String dictType); + + /** + * 通过字典ID删除字典数据信息 + * + * @param dictCode 字典数据ID + * + * @return 结果 + */ + public int deleteDictDataById (Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * + * @return 结果 + */ + public int deleteDictDataByIds (Long[] dictCodes); + + /** + * 新增字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int insertDictData (SysDictData dictData); + + /** + * 修改字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int updateDictData (SysDictData dictData); + + /** + * 同步修改字典类型 + * + * @param oldDictType 旧字典类型 + * @param newDictType 新旧字典类型 + * + * @return 结果 + */ + public int updateDictDataType (@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java new file mode 100644 index 0000000..26feff3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java @@ -0,0 +1,92 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysDictType; + +import java.util.List; + +/** + * 字典表 数据层 + * + * @author muyu + */ +public interface SysDictTypeMapper extends BaseMapper { + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeList (SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeAll (); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * + * @return 字典类型 + */ + public SysDictType selectDictTypeById (Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * + * @return 字典类型 + */ + public SysDictType selectDictTypeByType (String dictType); + + /** + * 通过字典ID删除字典信息 + * + * @param dictId 字典ID + * + * @return 结果 + */ + public int deleteDictTypeById (Long dictId); + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * + * @return 结果 + */ + public int deleteDictTypeByIds (Long[] dictIds); + + /** + * 新增字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int insertDictType (SysDictType dictType); + + /** + * 修改字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int updateDictType (SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * + * @return 结果 + */ + public SysDictType checkDictTypeUnique (String dictType); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java new file mode 100644 index 0000000..40d7b17 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysLogininfor; + +import java.util.List; + +/** + * 系统访问日志情况信息 数据层 + * + * @author muyu + */ +public interface SysLogininforMapper extends BaseMapper { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public int insertLogininfor (SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * + * @return 登录记录集合 + */ + public List selectLogininforList (SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * + * @return 结果 + */ + public int deleteLogininforByIds (Long[] infoIds); + + /** + * 清空系统登录日志 + * + * @return 结果 + */ + public int cleanLogininfor (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java new file mode 100644 index 0000000..cdde247 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -0,0 +1,138 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 菜单表 数据层 + * + * @author muyu + */ +public interface SysMenuMapper extends BaseMapper { + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * + * @return 菜单列表 + */ + public List selectMenuList (SysMenu menu); + + /** + * 根据用户所有权限 + * + * @return 权限列表 + */ + public List selectMenuPerms (); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * + * @return 菜单列表 + */ + public List selectMenuListByUserId (SysMenu menu); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * + * @return 权限列表 + */ + public List selectMenuPermsByRoleId (Long roleId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + public List selectMenuPermsByUserId (Long userId); + + /** + * 根据用户ID查询菜单 + * + * @return 菜单列表 + */ + public List selectMenuTreeAll (); + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuTreeByUserId (Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @param menuCheckStrictly 菜单树选择项是否关联显示 + * + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId (@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * + * @return 菜单信息 + */ + public SysMenu selectMenuById (Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int hasChildByMenuId (Long menuId); + + /** + * 新增菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int insertMenu (SysMenu menu); + + /** + * 修改菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int updateMenu (SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int deleteMenuById (Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menuName 菜单名称 + * @param parentId 父菜单ID + * + * @return 结果 + */ + public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java new file mode 100644 index 0000000..ff306f8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java @@ -0,0 +1,67 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysNotice; + +import java.util.List; + +/** + * 通知公告表 数据层 + * + * @author muyu + */ +public interface SysNoticeMapper extends BaseMapper { + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * + * @return 公告信息 + */ + public SysNotice selectNoticeById (Long noticeId); + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * + * @return 公告集合 + */ + public List selectNoticeList (SysNotice notice); + + /** + * 新增公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int insertNotice (SysNotice notice); + + /** + * 修改公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int updateNotice (SysNotice notice); + + /** + * 批量删除公告 + * + * @param noticeId 公告ID + * + * @return 结果 + */ + public int deleteNoticeById (Long noticeId); + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * + * @return 结果 + */ + public int deleteNoticeByIds (Long[] noticeIds); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..0841130 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java @@ -0,0 +1,52 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysOperLog; + +import java.util.List; + +/** + * 操作日志 数据层 + * + * @author muyu + */ +public interface SysOperLogMapper extends BaseMapper { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public int insertOperlog (SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * + * @return 操作日志集合 + */ + public List selectOperLogList (SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * + * @return 结果 + */ + public int deleteOperLogByIds (Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById (Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java new file mode 100644 index 0000000..8d8010e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java @@ -0,0 +1,110 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysPost; + +import java.util.List; + +/** + * 岗位信息 数据层 + * + * @author muyu + */ +public interface SysPostMapper extends BaseMapper { + /** + * 查询岗位数据集合 + * + * @param post 岗位信息 + * + * @return 岗位数据集合 + */ + public List selectPostList (SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll (); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * + * @return 角色对象信息 + */ + public SysPost selectPostById (Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId (Long userId); + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * + * @return 结果 + */ + public List selectPostsByUserName (String userName); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int deletePostById (Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * + * @return 结果 + */ + public int deletePostByIds (Long[] postIds); + + /** + * 修改岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int updatePost (SysPost post); + + /** + * 新增岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int insertPost (SysPost post); + + /** + * 校验岗位名称 + * + * @param postName 岗位名称 + * + * @return 结果 + */ + public SysPost checkPostNameUnique (String postName); + + /** + * 校验岗位编码 + * + * @param postCode 岗位编码 + * + * @return 结果 + */ + public SysPost checkPostCodeUnique (String postCode); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000..fa6f90f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java @@ -0,0 +1,50 @@ +package com.ruoyi.system.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysRoleDept; + +import java.util.List; + +/** + * 角色与部门关联表 数据层 + * + * @author muyu + */ +public interface SysRoleDeptMapper extends BaseMapper { + /** + * 通过角色ID删除角色和部门关联 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleDeptByRoleId (Long roleId); + + /** + * 批量删除角色部门关联信息 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteRoleDept (Long[] ids); + + /** + * 查询部门使用数量 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int selectCountRoleDeptByDeptId (Long deptId); + + /** + * 批量新增角色部门信息 + * + * @param roleDeptList 角色部门列表 + * + * @return 结果 + */ + public int batchRoleDept (List roleDeptList); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java new file mode 100644 index 0000000..9110770 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -0,0 +1,119 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysRole; + +import java.util.List; + +/** + * 角色表 数据层 + * + * @author muyu + */ +public interface SysRoleMapper extends BaseMapper { + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * + * @return 角色数据集合信息 + */ + public List selectRoleList (SysRole role); + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * + * @return 角色列表 + */ + public List selectRolePermissionByUserId (Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll (); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId (Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * + * @return 角色对象信息 + */ + public SysRole selectRoleById (Long roleId); + + /** + * 根据用户ID查询角色 + * + * @param userName 用户名 + * + * @return 角色列表 + */ + public List selectRolesByUserName (String userName); + + /** + * 校验角色名称是否唯一 + * + * @param roleName 角色名称 + * + * @return 角色信息 + */ + public SysRole checkRoleNameUnique (String roleName); + + /** + * 校验角色权限是否唯一 + * + * @param roleKey 角色权限 + * + * @return 角色信息 + */ + public SysRole checkRoleKeyUnique (String roleKey); + + /** + * 修改角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int updateRole (SysRole role); + + /** + * 新增角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int insertRole (SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleById (Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * + * @return 结果 + */ + public int deleteRoleByIds (Long[] roleIds); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..98ef12d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java @@ -0,0 +1,50 @@ +package com.ruoyi.system.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysRoleMenu; + +import java.util.List; + +/** + * 角色与菜单关联表 数据层 + * + * @author muyu + */ +public interface SysRoleMenuMapper extends BaseMapper { + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int checkMenuExistRole (Long menuId); + + /** + * 通过角色ID删除角色和菜单关联 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleMenuByRoleId (Long roleId); + + /** + * 批量删除角色菜单关联信息 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteRoleMenu (Long[] ids); + + /** + * 批量新增角色菜单信息 + * + * @param roleMenuList 角色菜单列表 + * + * @return 结果 + */ + public int batchRoleMenu (List roleMenuList); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java new file mode 100644 index 0000000..dac4eed --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -0,0 +1,142 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.system.domain.SysUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户表 数据层 + * + * @author muyu + */ +public interface SysUserMapper extends BaseMapper { + /** + * 根据条件分页查询用户列表 + * + * @param sysUser 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUserList (SysUser sysUser); + + /** + * 根据条件分页查询已配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectAllocatedList (SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUnallocatedList (SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * + * @return 用户对象信息 + */ + public SysUser selectUserByUserName (String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * + * @return 用户对象信息 + */ + public SysUser selectUserById (Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int insertUser (SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUser (SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * + * @return 结果 + */ + public int updateUserAvatar (@Param("userName") String userName, @Param("avatar") String avatar); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * + * @return 结果 + */ + public int resetUserPwd (@Param("userName") String userName, @Param("password") String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserById (Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * + * @return 结果 + */ + public int deleteUserByIds (Long[] userIds); + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * + * @return 结果 + */ + public SysUser checkUserNameUnique (String userName); + + /** + * 校验手机号码是否唯一 + * + * @param phonenumber 手机号码 + * + * @return 结果 + */ + public SysUser checkPhoneUnique (String phonenumber); + + /** + * 校验email是否唯一 + * + * @param email 用户邮箱 + * + * @return 结果 + */ + public SysUser checkEmailUnique (String email); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java new file mode 100644 index 0000000..54a139c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysUserPost; + +import java.util.List; + +/** + * 用户与岗位关联表 数据层 + * + * @author muyu + */ +public interface SysUserPostMapper extends BaseMapper { + /** + * 通过用户ID删除用户和岗位关联 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserPostByUserId (Long userId); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int countUserPostById (Long postId); + + /** + * 批量删除用户和岗位关联 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteUserPost (Long[] ids); + + /** + * 批量新增用户岗位信息 + * + * @param userPostList 用户角色列表 + * + * @return 结果 + */ + public int batchUserPost (List userPostList); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..340d549 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.domain.SysUserRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户与角色关联表 数据层 + * + * @author muyu + */ +public interface SysUserRoleMapper extends BaseMapper { + /** + * 通过用户ID删除用户和角色关联 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserRoleByUserId (Long userId); + + /** + * 批量删除用户和角色关联 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteUserRole (Long[] ids); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int countUserRoleByRoleId (Long roleId); + + /** + * 批量新增用户角色信息 + * + * @param userRoleList 用户角色列表 + * + * @return 结果 + */ + public int batchUserRole (List userRoleList); + + /** + * 删除用户和角色关联信息 + * + * @param userRole 用户和角色关联信息 + * + * @return 结果 + */ + public int deleteUserRoleInfo (SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * + * @return 结果 + */ + public int deleteUserRoleInfos (@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IMyBookService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IMyBookService.java new file mode 100644 index 0000000..dd7610d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IMyBookService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.MyBook; + +/** + * 图书管理Service接口 + * + * @author ruoyi + * @date 2024-02-26 + */ +public interface IMyBookService +{ + /** + * 查询图书管理 + * + * @param id 图书管理主键 + * @return 图书管理 + */ + public MyBook selectMyBookById(Long id); + + /** + * 查询图书管理列表 + * + * @param myBook 图书管理 + * @return 图书管理集合 + */ + public List selectMyBookList(MyBook myBook); + + /** + * 新增图书管理 + * + * @param myBook 图书管理 + * @return 结果 + */ + public int insertMyBook(MyBook myBook); + + /** + * 修改图书管理 + * + * @param myBook 图书管理 + * @return 结果 + */ + public int updateMyBook(MyBook myBook); + + /** + * 批量删除图书管理 + * + * @param ids 需要删除的图书管理主键集合 + * @return 结果 + */ + public int deleteMyBookByIds(Long[] ids); + + /** + * 删除图书管理信息 + * + * @param id 图书管理主键 + * @return 结果 + */ + public int deleteMyBookById(Long id); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysConfigService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysConfigService.java new file mode 100644 index 0000000..9ae4034 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysConfigService.java @@ -0,0 +1,44 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.domain.SysConfig; + +import java.util.List; + +/** + * @author DongZl + * @description: 配置plus业务层 + * @Date 2023-11-13 上午 10:06 + */ +public interface SysConfigService extends IService { + List pageQuery (SysConfig config); + + /** + * 通过Key进行查询值 + * @param configKey + * @return + */ + String selectConfigByKey (String configKey); + + /** + * 检测参数是否唯一 + * @param config + * @return + */ + boolean checkConfigKeyUnique (SysConfig config); + + /** + * 刷新缓存 + */ + void resetConfigCache (); + + /** + * 清空参数缓存数据 + */ + public void clearConfigCache (); + + /** + * 加载参数缓存数据 + */ + public void loadingConfigCache (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDeptService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDeptService.java new file mode 100644 index 0000000..2639b66 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDeptService.java @@ -0,0 +1,138 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.system.domain.vo.TreeSelect; + +import java.util.List; + +/** + * 部门管理 服务层 + * + * @author muyu + */ +public interface SysDeptService extends IService { + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * + * @return 部门信息集合 + */ + public List selectDeptList (SysDept dept); + + /** + * 查询部门树结构信息 + * + * @param dept 部门信息 + * + * @return 部门树信息集合 + */ + public List selectDeptTreeList (SysDept dept); + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * + * @return 树结构列表 + */ + public List buildDeptTree (List depts); + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * + * @return 下拉树结构列表 + */ + public List buildDeptTreeSelect (List depts); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * + * @return 选中部门列表 + */ + public List selectDeptListByRoleId (Long roleId); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * + * @return 部门信息 + */ + public SysDept selectDeptById (Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * + * @return 子部门数 + */ + public int selectNormalChildrenDeptById (Long deptId); + + /** + * 是否存在部门子节点 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public boolean hasChildByDeptId (Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * + * @return 结果 true 存在 false 不存在 + */ + public boolean checkDeptExistUser (Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public boolean checkDeptNameUnique (SysDept dept); + + /** + * 校验部门是否有数据权限 + * + * @param deptId 部门id + */ + public void checkDeptDataScope (Long deptId); + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int insertDept (SysDept dept); + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int updateDept (SysDept dept); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int deleteDeptById (Long deptId); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictDataService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictDataService.java new file mode 100644 index 0000000..ae34c58 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictDataService.java @@ -0,0 +1,66 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysDictData; + +import java.util.List; + +/** + * 字典 业务层 + * + * @author muyu + */ +public interface SysDictDataService extends IService { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * + * @return 字典数据集合信息 + */ + public List selectDictDataList (SysDictData dictData); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * + * @return 字典标签 + */ + public String selectDictLabel (String dictType, String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * + * @return 字典数据 + */ + public SysDictData selectDictDataById (Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + */ + public void deleteDictDataByIds (Long[] dictCodes); + + /** + * 新增保存字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int insertDictData (SysDictData dictData); + + /** + * 修改保存字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int updateDictData (SysDictData dictData); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictTypeService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictTypeService.java new file mode 100644 index 0000000..be12a6e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysDictTypeService.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysDictData; +import com.ruoyi.common.system.domain.SysDictType; + +import java.util.List; + +/** + * 字典 业务层 + * + * @author muyu + */ +public interface SysDictTypeService extends IService { + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeList (SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeAll (); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据集合信息 + */ + public List selectDictDataByType (String dictType); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * + * @return 字典类型 + */ + public SysDictType selectDictTypeById (Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * + * @return 字典类型 + */ + public SysDictType selectDictTypeByType (String dictType); + + /** + * 批量删除字典信息 + * + * @param dictIds 需要删除的字典ID + */ + public void deleteDictTypeByIds (Long[] dictIds); + + /** + * 加载字典缓存数据 + */ + public void loadingDictCache (); + + /** + * 清空字典缓存数据 + */ + public void clearDictCache (); + + /** + * 重置字典缓存数据 + */ + public void resetDictCache (); + + /** + * 新增保存字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int insertDictType (SysDictType dictType); + + /** + * 修改保存字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int updateDictType (SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * + * @return 结果 + */ + public boolean checkDictTypeUnique (SysDictType dictType); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLogininforService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLogininforService.java new file mode 100644 index 0000000..bfaabfa --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLogininforService.java @@ -0,0 +1,43 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysLogininfor; + +import java.util.List; + +/** + * 系统访问日志情况信息 服务层 + * + * @author muyu + */ +public interface SysLogininforService extends IService { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public int insertLogininfor (SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * + * @return 登录记录集合 + */ + public List selectLogininforList (SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * + * @return 结果 + */ + public int deleteLogininforByIds (Long[] infoIds); + + /** + * 清空系统登录日志 + */ + public void cleanLogininfor (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysMenuService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysMenuService.java new file mode 100644 index 0000000..a02c464 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysMenuService.java @@ -0,0 +1,161 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.domain.SysMenu; +import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.domain.vo.TreeSelect; + +import java.util.List; +import java.util.Set; + +/** + * 菜单 业务层 + * + * @author muyu + */ +public interface SysMenuService extends IService { + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuList (Long userId); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuList (SysMenu menu, Long userId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + public Set selectMenuPermsByUserId (Long userId); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * + * @return 权限列表 + */ + public Set selectMenuPermsByRoleId (Long roleId); + + /** + * 根据用户ID查询菜单树信息 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuTreeByUserId (Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId (Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * + * @return 路由列表 + */ + public List buildMenus (List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * + * @return 树结构列表 + */ + public List buildMenuTree (List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * + * @return 下拉树结构列表 + */ + public List buildMenuTreeSelect (List menus); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * + * @return 菜单信息 + */ + public SysMenu selectMenuById (Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * + * @return 结果 true 存在 false 不存在 + */ + public boolean hasChildByMenuId (Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * + * @return 结果 true 存在 false 不存在 + */ + public boolean checkMenuExistRole (Long menuId); + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int insertMenu (SysMenu menu); + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int updateMenu (SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int deleteMenuById (Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean checkMenuNameUnique (SysMenu menu); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java new file mode 100644 index 0000000..4c7b807 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysNoticeService.java @@ -0,0 +1,67 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.domain.SysNotice; + +import java.util.List; + +/** + * 公告 服务层 + * + * @author muyu + */ +public interface SysNoticeService extends IService { + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * + * @return 公告信息 + */ + public SysNotice selectNoticeById (Long noticeId); + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * + * @return 公告集合 + */ + public List selectNoticeList (SysNotice notice); + + /** + * 新增公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int insertNotice (SysNotice notice); + + /** + * 修改公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int updateNotice (SysNotice notice); + + /** + * 删除公告信息 + * + * @param noticeId 公告ID + * + * @return 结果 + */ + public int deleteNoticeById (Long noticeId); + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * + * @return 结果 + */ + public int deleteNoticeByIds (Long[] noticeIds); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperLogService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperLogService.java new file mode 100644 index 0000000..c2b118b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysOperLogService.java @@ -0,0 +1,54 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysOperLog; + +import java.util.List; + +/** + * 操作日志 服务层 + * + * @author muyu + */ +public interface SysOperLogService extends IService { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + * + * @return 结果 + */ + public int insertOperlog (SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * + * @return 操作日志集合 + */ + public List selectOperLogList (SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * + * @return 结果 + */ + public int deleteOperLogByIds (Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById (Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog (); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java new file mode 100644 index 0000000..fd70c58 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java @@ -0,0 +1,30 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.system.domain.SysUser; + +import java.util.Set; + +/** + * 权限信息 服务层 + * + * @author muyu + */ +public interface SysPermissionService { + /** + * 获取角色数据权限 + * + * @param userId 用户Id + * + * @return 角色权限信息 + */ + public Set getRolePermission (SysUser user); + + /** + * 获取菜单数据权限 + * + * @param userId 用户Id + * + * @return 菜单权限信息 + */ + public Set getMenuPermission (SysUser user); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPostService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPostService.java new file mode 100644 index 0000000..64aeb6c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPostService.java @@ -0,0 +1,110 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.domain.SysPost; + +import java.util.List; + +/** + * 岗位信息 服务层 + * + * @author muyu + */ +public interface SysPostService extends IService { + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * + * @return 岗位列表 + */ + public List selectPostList (SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll (); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * + * @return 角色对象信息 + */ + public SysPost selectPostById (Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId (Long userId); + + /** + * 校验岗位名称 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public boolean checkPostNameUnique (SysPost post); + + /** + * 校验岗位编码 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public boolean checkPostCodeUnique (SysPost post); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int countUserPostById (Long postId); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int deletePostById (Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * + * @return 结果 + */ + public int deletePostByIds (Long[] postIds); + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int insertPost (SysPost post); + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int updatePost (SysPost post); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRoleService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRoleService.java new file mode 100644 index 0000000..bed7266 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRoleService.java @@ -0,0 +1,191 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.system.domain.SysUserRole; + +import java.util.List; +import java.util.Set; + +/** + * 角色业务层 + * + * @author muyu + */ +public interface SysRoleService extends IService { + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * + * @return 角色数据集合信息 + */ + public List selectRoleList (SysRole role); + + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * + * @return 角色列表 + */ + public List selectRolesByUserId (Long userId); + + /** + * 根据用户ID查询角色权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + public Set selectRolePermissionByUserId (Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll (); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId (Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * + * @return 角色对象信息 + */ + public SysRole selectRoleById (Long roleId); + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + public boolean checkRoleNameUnique (SysRole role); + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + public boolean checkRoleKeyUnique (SysRole role); + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + public void checkRoleAllowed (SysRole role); + + /** + * 校验角色是否有数据权限 + * + * @param roleId 角色id + */ + public void checkRoleDataScope (Long roleId); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int countUserRoleByRoleId (Long roleId); + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int insertRole (SysRole role); + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int updateRole (SysRole role); + + /** + * 修改角色状态 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int updateRoleStatus (SysRole role); + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int authDataScope (SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleById (Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * + * @return 结果 + */ + public int deleteRoleByIds (Long[] roleIds); + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * + * @return 结果 + */ + public int deleteAuthUser (SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * + * @return 结果 + */ + public int deleteAuthUsers (Long roleId, Long[] userIds); + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * + * @return 结果 + */ + public int insertAuthUsers (Long roleId, Long[] userIds); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java new file mode 100644 index 0000000..41445d2 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserOnlineService.java @@ -0,0 +1,51 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.system.domain.LoginUser; +import com.ruoyi.system.domain.SysUserOnline; + +/** + * 在线用户 服务层 + * + * @author muyu + */ +public interface SysUserOnlineService { + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByIpaddr (String ipaddr, LoginUser user); + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByUserName (String userName, LoginUser user); + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByInfo (String ipaddr, String userName, LoginUser user); + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * + * @return 在线用户 + */ + public SysUserOnline loginUserToUserOnline (LoginUser user); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java new file mode 100644 index 0000000..d323055 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/SysUserService.java @@ -0,0 +1,228 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.system.domain.SysUser; + +import java.util.List; + +/** + * 用户 业务层 + * + * @author muyu + */ +public interface SysUserService extends IService { + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUserList (SysUser user); + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectAllocatedList (SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUnallocatedList (SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * + * @return 用户对象信息 + */ + public SysUser selectUserByUserName (String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * + * @return 用户对象信息 + */ + public SysUser selectUserById (Long userId); + + /** + * 根据用户ID查询用户所属角色组 + * + * @param userName 用户名 + * + * @return 结果 + */ + public String selectUserRoleGroup (String userName); + + /** + * 根据用户ID查询用户所属岗位组 + * + * @param userName 用户名 + * + * @return 结果 + */ + public String selectUserPostGroup (String userName); + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean checkUserNameUnique (SysUser user); + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean checkPhoneUnique (SysUser user); + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean checkEmailUnique (SysUser user); + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + public void checkUserAllowed (SysUser user); + + /** + * 校验用户是否有数据权限 + * + * @param userId 用户id + */ + public void checkUserDataScope (Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int insertUser (SysUser user); + + /** + * 注册用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean registerUser (SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUser (SysUser user); + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserAuth (Long userId, Long[] roleIds); + + /** + * 修改用户状态 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUserStatus (SysUser user); + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUserProfile (SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * + * @return 结果 + */ + public boolean updateUserAvatar (String userName, String avatar); + + /** + * 重置用户密码 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int resetPwd (SysUser user); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * + * @return 结果 + */ + public int resetUserPwd (String userName, String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserById (Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * + * @return 结果 + */ + public int deleteUserByIds (Long[] userIds); + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * + * @return 结果 + */ + public String importUser (List userList, Boolean isUpdateSupport, String operName); +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MyBookServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MyBookServiceImpl.java new file mode 100644 index 0000000..c5451ca --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MyBookServiceImpl.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.security.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.MyBookMapper; +import com.ruoyi.system.domain.MyBook; +import com.ruoyi.system.service.IMyBookService; + +/** + * 图书管理Service业务层处理 + * + * @author ruoyi + * @date 2024-02-26 + */ +@Service +public class MyBookServiceImpl implements IMyBookService +{ + @Autowired + private MyBookMapper myBookMapper; + + /** + * 查询图书管理 + * + * @param id 图书管理主键 + * @return 图书管理 + */ + @Override + public MyBook selectMyBookById(Long id) + { + return myBookMapper.selectMyBookById(id); + } + + /** + * 查询图书管理列表 + * + * @param myBook 图书管理 + * @return 图书管理 + */ + @Override + public List selectMyBookList(MyBook myBook) + { + return myBookMapper.selectMyBookList(myBook); + } + + /** + * 新增图书管理 + * + * @param myBook 图书管理 + * @return 结果 + */ + @Override + public int insertMyBook(MyBook myBook) + { + myBook.setCreateBy(SecurityUtils.getUsername()); + myBook.setCreateTime(DateUtils.getNowDate()); + return myBookMapper.insertMyBook(myBook); + } + + /** + * 修改图书管理 + * + * @param myBook 图书管理 + * @return 结果 + */ + @Override + public int updateMyBook(MyBook myBook) + { + myBook.setUpdateBy(SecurityUtils.getUsername()); + myBook.setUpdateTime(DateUtils.getNowDate()); + return myBookMapper.updateMyBook(myBook); + } + + /** + * 批量删除图书管理 + * + * @param ids 需要删除的图书管理主键 + * @return 结果 + */ + @Override + public int deleteMyBookByIds(Long[] ids) + { + return myBookMapper.deleteMyBookByIds(ids); + } + + /** + * 删除图书管理信息 + * + * @param id 图书管理主键 + * @return 结果 + */ + @Override + public int deleteMyBookById(Long id) + { + return myBookMapper.deleteMyBookById(id); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000..700ef1a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,114 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.mapper.SysConfigMapper; +import com.ruoyi.system.service.SysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author DongZl + * @description: 配置plus业务实现层 + * @Date 2023-11-13 上午 10:06 + */ +@Service +public class SysConfigServiceImpl extends ServiceImpl + implements SysConfigService { + + @Autowired + private RedisService redisService; + + @Override + public List pageQuery (SysConfig config) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(config.getConfigName())){ + queryWrapper.like(SysConfig::getConfigName, config.getConfigName()); + } + if (StringUtils.isNotEmpty(config.getConfigType())){ + queryWrapper.like(SysConfig::getConfigType, config.getConfigType()); + } + if (StringUtils.isNotEmpty(config.getConfigKey())){ + queryWrapper.like(SysConfig::getConfigKey, config.getConfigKey()); + } + Object beginTime = config.getParams().get("beginTime"); + if (Objects.nonNull(beginTime) && beginTime instanceof Date beginDate){ + queryWrapper.gt(SysConfig::getCreateTime, beginDate); + } + Object endTime = config.getParams().get("endTime"); + if (Objects.nonNull(endTime) && endTime instanceof Date endDate){ + queryWrapper.lt(SysConfig::getCreateTime, endDate); + } + return this.list(queryWrapper); + } + + /** + * 通过Key进行查询值 + * + * @param configKey + * + * @return + */ + @Override + public String selectConfigByKey (String configKey) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Assert.notNull(configKey, "key不可为空"); + queryWrapper.eq(SysConfig::getConfigKey, configKey); + SysConfig sysConfig = this.getOne(queryWrapper); + return sysConfig.getConfigValue(); + } + + @Override + public boolean checkConfigKeyUnique (SysConfig config) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysConfig::getConfigKey, config.getConfigKey()); + return this.count(queryWrapper) > 0; + } + + @Override + public void resetConfigCache () { + this.clearConfigCache(); + this.loadingConfigCache(); + } + + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache () { + Collection keys = redisService.keys(CacheConstants.SYS_CONFIG_KEY + "*"); + redisService.deleteObject(keys); + } + + /** + * 加载参数缓存数据 + */ + @Override + public void loadingConfigCache () { + List configsList = this.list(); + for (SysConfig config : configsList) { + redisService.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * + * @return 缓存键key + */ + private String getCacheKey (String configKey) { + return CacheConstants.SYS_CONFIG_KEY + configKey; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..2a01603 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,318 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.datascope.annotation.DataScope; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysDept; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.system.domain.vo.TreeSelect; +import com.ruoyi.system.mapper.SysDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.service.SysDeptService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 部门管理 服务实现 + * + * @author muyu + */ +@Service +public class SysDeptServiceImpl extends ServiceImpl implements SysDeptService { + @Autowired + private SysDeptMapper deptMapper; + + @Autowired + private SysRoleMapper roleMapper; + + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * + * @return 部门信息集合 + */ + @Override + @DataScope(deptAlias = "d") + public List selectDeptList (SysDept dept) { + return deptMapper.selectDeptList(dept); + } + + /** + * 查询部门树结构信息 + * + * @param dept 部门信息 + * + * @return 部门树信息集合 + */ + @Override + public List selectDeptTreeList (SysDept dept) { + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + return buildDeptTreeSelect(depts); + } + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * + * @return 树结构列表 + */ + @Override + public List buildDeptTree (List depts) { + List returnList = new ArrayList(); + List tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); + for (SysDept dept : depts) { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(dept.getParentId())) { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) { + returnList = depts; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * + * @return 下拉树结构列表 + */ + @Override + public List buildDeptTreeSelect (List depts) { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * + * @return 选中部门列表 + */ + @Override + public List selectDeptListByRoleId (Long roleId) { + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + } + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * + * @return 部门信息 + */ + @Override + public SysDept selectDeptById (Long deptId) { + return deptMapper.selectDeptById(deptId); + } + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * + * @return 子部门数 + */ + @Override + public int selectNormalChildrenDeptById (Long deptId) { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * + * @return 结果 + */ + @Override + public boolean hasChildByDeptId (Long deptId) { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0; + } + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * + * @return 结果 true 存在 false 不存在 + */ + @Override + public boolean checkDeptExistUser (Long deptId) { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0; + } + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * + * @return 结果 + */ + @Override + public boolean checkDeptNameUnique (SysDept dept) { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验部门是否有数据权限 + * + * @param deptId 部门id + */ + @Override + public void checkDeptDataScope (Long deptId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysDept dept = new SysDept(); + dept.setDeptId(deptId); + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + if (StringUtils.isEmpty(depts)) { + throw new ServiceException("没有权限访问部门数据!"); + } + } + } + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + @Override + public int insertDept (SysDept dept) { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { + throw new ServiceException("部门停用,不允许新增"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + return deptMapper.insertDept(dept); + } + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + @Override + public int updateDept (SysDept dept) { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + updateParentDeptStatusNormal(dept); + } + return result; + } + + /** + * 修改该部门的父级部门状态 + * + * @param dept 当前部门 + */ + private void updateParentDeptStatusNormal (SysDept dept) { + String ancestors = dept.getAncestors(); + Long[] deptIds = Convert.toLongArray(ancestors); + deptMapper.updateDeptStatusNormal(deptIds); + } + + /** + * 修改子元素关系 + * + * @param deptId 被修改的部门ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + public void updateDeptChildren (Long deptId, String newAncestors, String oldAncestors) { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) { + deptMapper.updateDeptChildren(children); + } + } + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * + * @return 结果 + */ + @Override + public int deleteDeptById (Long deptId) { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 递归列表 + */ + private void recursionFn (List list, SysDept t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysDept tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList (List list, SysDept t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysDept n = (SysDept) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild (List list, SysDept t) { + return getChildList(list, t).size() > 0 ? true : false; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000..487ac89 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,108 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.security.utils.DictUtils; +import com.ruoyi.common.system.domain.SysDictData; +import com.ruoyi.system.mapper.SysDictDataMapper; +import com.ruoyi.system.service.SysDictDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 字典 业务层处理 + * + * @author muyu + */ +@Service +public class SysDictDataServiceImpl extends ServiceImpl implements SysDictDataService { + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataList (SysDictData dictData) { + return dictDataMapper.selectDictDataList(dictData); + } + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * + * @return 字典标签 + */ + @Override + public String selectDictLabel (String dictType, String dictValue) { + return dictDataMapper.selectDictLabel(dictType, dictValue); + } + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * + * @return 字典数据 + */ + @Override + public SysDictData selectDictDataById (Long dictCode) { + return dictDataMapper.selectDictDataById(dictCode); + } + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + */ + @Override + public void deleteDictDataByIds (Long[] dictCodes) { + for (Long dictCode : dictCodes) { + SysDictData data = selectDictDataById(dictCode); + dictDataMapper.deleteDictDataById(dictCode); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + } + + /** + * 新增保存字典数据信息 + * + * @param data 字典数据信息 + * + * @return 结果 + */ + @Override + public int insertDictData (SysDictData data) { + int row = dictDataMapper.insertDictData(data); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } + + /** + * 修改保存字典数据信息 + * + * @param data 字典数据信息 + * + * @return 结果 + */ + @Override + public int updateDictData (SysDictData data) { + int row = dictDataMapper.updateDictData(data); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000..f423c8c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,209 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.utils.DictUtils; +import com.ruoyi.common.system.domain.SysDictData; +import com.ruoyi.common.system.domain.SysDictType; +import com.ruoyi.system.mapper.SysDictDataMapper; +import com.ruoyi.system.mapper.SysDictTypeMapper; +import com.ruoyi.system.service.SysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.PostConstruct; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 字典 业务层处理 + * + * @author muyu + */ +@Service +public class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService { + @Autowired + private SysDictTypeMapper dictTypeMapper; + + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 项目启动时,初始化字典到缓存 + */ + @PostConstruct + public void init () { + loadingDictCache(); + } + + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeList (SysDictType dictType) { + return dictTypeMapper.selectDictTypeList(dictType); + } + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeAll () { + return dictTypeMapper.selectDictTypeAll(); + } + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataByType (String dictType) { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotEmpty(dictDatas)) { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotEmpty(dictDatas)) { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeById (Long dictId) { + return dictTypeMapper.selectDictTypeById(dictId); + } + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeByType (String dictType) { + return dictTypeMapper.selectDictTypeByType(dictType); + } + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + */ + @Override + public void deleteDictTypeByIds (Long[] dictIds) { + for (Long dictId : dictIds) { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); + } + dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(dictType.getDictType()); + } + } + + /** + * 加载字典缓存数据 + */ + @Override + public void loadingDictCache () { + SysDictData dictData = new SysDictData(); + dictData.setStatus("0"); + Map> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType)); + for (Map.Entry> entry : dictDataMap.entrySet()) { + DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList())); + } + } + + /** + * 清空字典缓存数据 + */ + @Override + public void clearDictCache () { + DictUtils.clearDictCache(); + } + + /** + * 重置字典缓存数据 + */ + @Override + public void resetDictCache () { + clearDictCache(); + loadingDictCache(); + } + + /** + * 新增保存字典类型信息 + * + * @param dict 字典类型信息 + * + * @return 结果 + */ + @Override + public int insertDictType (SysDictType dict) { + int row = dictTypeMapper.insertDictType(dict); + if (row > 0) { + DictUtils.setDictCache(dict.getDictType(), null); + } + return row; + } + + /** + * 修改保存字典类型信息 + * + * @param dict 字典类型信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateDictType (SysDictType dict) { + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + int row = dictTypeMapper.updateDictType(dict); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); + } + return row; + } + + /** + * 校验字典类型称是否唯一 + * + * @param dict 字典类型 + * + * @return 结果 + */ + @Override + public boolean checkDictTypeUnique (SysDictType dict) { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000..a6561f8 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,64 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.system.domain.SysLogininfor; +import com.ruoyi.system.mapper.SysLogininforMapper; +import com.ruoyi.system.service.SysLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 系统访问日志情况信息 服务层处理 + * + * @author muyu + */ +@Service +public class SysLogininforServiceImpl extends ServiceImpl implements SysLogininforService { + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + @Override + public int insertLogininfor (SysLogininfor logininfor) { + return logininforMapper.insertLogininfor(logininfor); + } + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * + * @return 登录记录集合 + */ + @Override + public List selectLogininforList (SysLogininfor logininfor) { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * + * @return 结果 + */ + @Override + public int deleteLogininforByIds (Long[] infoIds) { + return logininforMapper.deleteLogininforByIds(infoIds); + } + + /** + * 清空系统登录日志 + */ + @Override + public void cleanLogininfor () { + logininforMapper.cleanLogininfor(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..92a3b2c --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,487 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.system.domain.SysMenu; +import com.ruoyi.system.domain.vo.MetaVo; +import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.domain.vo.TreeSelect; +import com.ruoyi.system.mapper.SysMenuMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysRoleMenuMapper; +import com.ruoyi.system.service.SysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单 业务层处理 + * + * @author muyu + */ +@Service +public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + @Override + public List selectMenuList (Long userId) { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * + * @return 菜单列表 + */ + @Override + public List selectMenuList (SysMenu menu, Long userId) { + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) { + menuList = menuMapper.selectMenuList(menu); + } else { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByUserId (Long userId) { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByRoleId (Long roleId) { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户名称 + * + * @return 菜单列表 + */ + @Override + public List selectMenuTreeByUserId (Long userId) { + List menus = null; + if (SecurityUtils.isAdmin(userId)) { + menus = menuMapper.selectMenuTreeAll(); + } else { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * + * @return 选中菜单列表 + */ + @Override + public List selectMenuListByRoleId (Long roleId) { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * + * @return 路由列表 + */ + @Override + public List buildMenus (List menus) { + List routers = new LinkedList(); + for (SysMenu menu : menus) { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } else if (isMenuFrame(menu)) { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(StringUtils.capitalize(menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * + * @return 树结构列表 + */ + @Override + public List buildMenuTree (List menus) { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator() ; iterator.hasNext() ; ) { + SysMenu menu = (SysMenu) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(menu.getParentId())) { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) { + returnList = menus; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelect (List menus) { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * + * @return 菜单信息 + */ + @Override + public SysMenu selectMenuById (Long menuId) { + return menuMapper.selectMenuById(menuId); + } + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + @Override + public boolean hasChildByMenuId (Long menuId) { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + @Override + public boolean checkMenuExistRole (Long menuId) { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + @Override + public int insertMenu (SysMenu menu) { + return menuMapper.insertMenu(menu); + } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + @Override + public int updateMenu (SysMenu menu) { + return menuMapper.updateMenu(menu); + } + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + @Override + public int deleteMenuById (Long menuId) { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + @Override + public boolean checkMenuNameUnique (SysMenu menu) { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * + * @return 路由名称 + */ + public String getRouteName (SysMenu menu) { + String routerName = StringUtils.capitalize(menu.getPath()); + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) { + routerName = StringUtils.EMPTY; + } + return routerName; + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * + * @return 路由地址 + */ + public String getRouterPath (SysMenu menu) { + String routerPath = menu.getPath(); + // 内链打开外网方式 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + routerPath = innerLinkReplaceEach(routerPath); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { + routerPath = "/" + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMenuFrame(menu)) { + routerPath = "/"; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * + * @return 组件信息 + */ + public String getComponent (SysMenu menu) { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { + component = menu.getComponent(); + } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + component = UserConstants.INNER_LINK; + } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean isMenuFrame (SysMenu menu) { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 是否为内链组件 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean isInnerLink (SysMenu menu) { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean isParentView (SysMenu menu) { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * + * @return String + */ + public List getChildPerms (List list, int parentId) { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator() ; iterator.hasNext() ; ) { + SysMenu t = (SysMenu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list 分类表 + * @param t 子节点 + */ + private void recursionFn (List list, SysMenu t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList (List list, SysMenu t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild (List list, SysMenu t) { + return getChildList(list, t).size() > 0; + } + + /** + * 内链域名特殊字符替换 + * + * @return 替换后的内链域名 + */ + public String innerLinkReplaceEach (String path) { + return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"}, + new String[]{"", "", "", "/", "/"}); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java new file mode 100644 index 0000000..4a618c3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.mapper.SysNoticeMapper; +import com.ruoyi.system.service.SysNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 公告 服务层实现 + * + * @author muyu + */ +@Service +public class SysNoticeServiceImpl extends ServiceImpl implements SysNoticeService { + @Autowired + private SysNoticeMapper noticeMapper; + + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * + * @return 公告信息 + */ + @Override + public SysNotice selectNoticeById (Long noticeId) { + return noticeMapper.selectNoticeById(noticeId); + } + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * + * @return 公告集合 + */ + @Override + public List selectNoticeList (SysNotice notice) { + return noticeMapper.selectNoticeList(notice); + } + + /** + * 新增公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + @Override + public int insertNotice (SysNotice notice) { + return noticeMapper.insertNotice(notice); + } + + /** + * 修改公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + @Override + public int updateNotice (SysNotice notice) { + return noticeMapper.updateNotice(notice); + } + + /** + * 删除公告对象 + * + * @param noticeId 公告ID + * + * @return 结果 + */ + @Override + public int deleteNoticeById (Long noticeId) { + return noticeMapper.deleteNoticeById(noticeId); + } + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * + * @return 结果 + */ + @Override + public int deleteNoticeByIds (Long[] noticeIds) { + return noticeMapper.deleteNoticeByIds(noticeIds); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..cca6ec3 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,77 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.system.domain.SysOperLog; +import com.ruoyi.system.mapper.SysOperLogMapper; +import com.ruoyi.system.service.SysOperLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 操作日志 服务层处理 + * + * @author muyu + */ +@Service +public class SysOperLogServiceImpl extends ServiceImpl implements SysOperLogService { + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + * + * @return 结果 + */ + @Override + public int insertOperlog (SysOperLog operLog) { + return operLogMapper.insertOperlog(operLog); + } + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * + * @return 操作日志集合 + */ + @Override + public List selectOperLogList (SysOperLog operLog) { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * + * @return 结果 + */ + @Override + public int deleteOperLogByIds (Long[] operIds) { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * + * @return 操作日志对象 + */ + @Override + public SysOperLog selectOperLogById (Long operId) { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 清空操作日志 + */ + @Override + public void cleanOperLog () { + operLogMapper.cleanOperLog(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java new file mode 100644 index 0000000..9a3f98d --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java @@ -0,0 +1,76 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.system.service.SysMenuService; +import com.ruoyi.system.service.SysPermissionService; +import com.ruoyi.system.service.SysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 用户权限处理 + * + * @author muyu + */ +@Service +public class SysPermissionServiceImpl implements SysPermissionService { + @Autowired + private SysRoleService roleService; + + @Autowired + private SysMenuService menuService; + + /** + * 获取角色数据权限 + * + * @param userId 用户Id + * + * @return 角色权限信息 + */ + @Override + public Set getRolePermission (SysUser user) { + Set roles = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + roles.add("admin"); + } else { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 获取菜单数据权限 + * + * @param userId 用户Id + * + * @return 菜单权限信息 + */ + @Override + public Set getMenuPermission (SysUser user) { + Set perms = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + perms.add("*:*:*"); + } else { + List roles = user.getRoles(); + if (!CollectionUtils.isEmpty(roles)) { + // 多角色设置permissions属性,以便数据权限匹配权限 + for (SysRole role : roles) { + Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); + role.setPermissions(rolePerms); + perms.addAll(rolePerms); + } + } else { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + } + return perms; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java new file mode 100644 index 0000000..a3f9a3f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -0,0 +1,174 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.mapper.SysPostMapper; +import com.ruoyi.system.mapper.SysUserPostMapper; +import com.ruoyi.system.service.SysPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 岗位信息 服务层处理 + * + * @author muyu + */ +@Service +public class SysPostServiceImpl extends ServiceImpl implements SysPostService { + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * + * @return 岗位信息集合 + */ + @Override + public List selectPostList (SysPost post) { + return postMapper.selectPostList(post); + } + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + @Override + public List selectPostAll () { + return postMapper.selectPostAll(); + } + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * + * @return 角色对象信息 + */ + @Override + public SysPost selectPostById (Long postId) { + return postMapper.selectPostById(postId); + } + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * + * @return 选中岗位ID列表 + */ + @Override + public List selectPostListByUserId (Long userId) { + return postMapper.selectPostListByUserId(userId); + } + + /** + * 校验岗位名称是否唯一 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public boolean checkPostNameUnique (SysPost post) { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostNameUnique(post.getPostName()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验岗位编码是否唯一 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public boolean checkPostCodeUnique (SysPost post) { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostCodeUnique(post.getPostCode()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * + * @return 结果 + */ + @Override + public int countUserPostById (Long postId) { + return userPostMapper.countUserPostById(postId); + } + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * + * @return 结果 + */ + @Override + public int deletePostById (Long postId) { + return postMapper.deletePostById(postId); + } + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * + * @return 结果 + */ + @Override + public int deletePostByIds (Long[] postIds) { + for (Long postId : postIds) { + SysPost post = selectPostById(postId); + if (countUserPostById(postId) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName())); + } + } + return postMapper.deletePostByIds(postIds); + } + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public int insertPost (SysPost post) { + return postMapper.insertPost(post); + } + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public int updatePost (SysPost post) { + return postMapper.updatePost(post); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..6b26453 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,399 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.datascope.annotation.DataScope; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.system.domain.SysRoleDept; +import com.ruoyi.system.domain.SysRoleMenu; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.SysRoleDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysRoleMenuMapper; +import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.service.SysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 角色 业务层处理 + * + * @author muyu + */ +@Service +public class SysRoleServiceImpl extends ServiceImpl implements SysRoleService { + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * + * @return 角色数据集合信息 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRoleList (SysRole role) { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * + * @return 角色列表 + */ + @Override + public List selectRolesByUserId (Long userId) { + List userRoles = roleMapper.selectRolePermissionByUserId(userId); + List roles = selectRoleAll(); + for (SysRole role : roles) { + for (SysRole userRole : userRoles) { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + @Override + public Set selectRolePermissionByUserId (Long userId) { + List perms = roleMapper.selectRolePermissionByUserId(userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) { + if (StringUtils.isNotNull(perm)) { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + public List selectRoleAll () { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * + * @return 选中角色ID列表 + */ + @Override + public List selectRoleListByUserId (Long userId) { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById (Long roleId) { + return roleMapper.selectRoleById(roleId); + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + public boolean checkRoleNameUnique (SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + public boolean checkRoleKeyUnique (SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed (SysRole role) { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { + throw new ServiceException("不允许操作超级管理员角色"); + } + } + + /** + * 校验角色是否有数据权限 + * + * @param roleId 角色id + */ + @Override + public void checkRoleDataScope (Long roleId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) { + throw new ServiceException("没有权限访问角色数据!"); + } + } + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * + * @return 结果 + */ + @Override + public int countUserRoleByRoleId (Long roleId) { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertRole (SysRole role) { + // 新增角色信息 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateRole (SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + public int updateRoleStatus (SysRole role) { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int authDataScope (SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + */ + public int insertRoleMenu (SysRole role) { + int rows = 1; + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long menuId : role.getMenuIds()) { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + */ + public int insertRoleDept (SysRole role) { + int rows = 1; + // 新增角色与部门(数据权限)管理 + List list = new ArrayList(); + for (Long deptId : role.getDeptIds()) { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteRoleById (Long roleId) { + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteRoleByIds (Long[] roleIds) { + for (Long roleId : roleIds) { + checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenu(roleIds); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * + * @return 结果 + */ + @Override + public int deleteAuthUser (SysUserRole userRole) { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * + * @return 结果 + */ + @Override + public int deleteAuthUsers (Long roleId, Long[] userIds) { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要授权的用户数据ID + * + * @return 结果 + */ + @Override + public int insertAuthUsers (Long roleId, Long[] userIds) { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long userId : userIds) { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000..540f002 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,84 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.system.domain.LoginUser; +import com.ruoyi.system.domain.SysUserOnline; +import com.ruoyi.system.service.SysUserOnlineService; +import org.springframework.stereotype.Service; + +/** + * 在线用户 服务层处理 + * + * @author muyu + */ +@Service +public class SysUserOnlineServiceImpl implements SysUserOnlineService { + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByIpaddr (String ipaddr, LoginUser user) { + if (StringUtils.equals(ipaddr, user.getIpaddr())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByUserName (String userName, LoginUser user) { + if (StringUtils.equals(userName, user.getUsername())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByInfo (String ipaddr, String userName, LoginUser user) { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * + * @return 在线用户 + */ + @Override + public SysUserOnline loginUserToUserOnline (LoginUser user) { + if (StringUtils.isNull(user)) { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginTime(user.getLoginTime()); + return sysUserOnline; + } +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..b736832 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,503 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.bean.BeanValidators; +import com.ruoyi.common.datascope.annotation.DataScope; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.common.system.domain.SysRole; +import com.ruoyi.common.system.domain.SysUser; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.domain.SysUserPost; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.*; +import com.ruoyi.system.service.SysUserService; +import com.ruoyi.system.service.SysConfigService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.validation.Validator; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户 业务层处理 + * + * @author muyu + */ +@Service +public class SysUserServiceImpl extends ServiceImpl implements SysUserService { + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + @Autowired + protected Validator validator; + @Autowired + private SysUserMapper userMapper; + @Autowired + private SysRoleMapper roleMapper; + @Autowired + private SysPostMapper postMapper; + @Autowired + private SysUserRoleMapper userRoleMapper; + @Autowired + private SysUserPostMapper userPostMapper; + @Autowired + private SysConfigService configService; + + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUserList (SysUser user) { + return userMapper.selectUserList(user); + } + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectAllocatedList (SysUser user) { + return userMapper.selectAllocatedList(user); + } + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUnallocatedList (SysUser user) { + return userMapper.selectUnallocatedList(user); + } + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * + * @return 用户对象信息 + */ + @Override + public SysUser selectUserByUserName (String userName) { + return userMapper.selectUserByUserName(userName); + } + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * + * @return 用户对象信息 + */ + @Override + public SysUser selectUserById (Long userId) { + return userMapper.selectUserById(userId); + } + + /** + * 查询用户所属角色组 + * + * @param userName 用户名 + * + * @return 结果 + */ + @Override + public String selectUserRoleGroup (String userName) { + List list = roleMapper.selectRolesByUserName(userName); + if (CollectionUtils.isEmpty(list)) { + return StringUtils.EMPTY; + } + return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); + } + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * + * @return 结果 + */ + @Override + public String selectUserPostGroup (String userName) { + List list = postMapper.selectPostsByUserName(userName); + if (CollectionUtils.isEmpty(list)) { + return StringUtils.EMPTY; + } + return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); + } + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public boolean checkUserNameUnique (SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkUserNameUnique(user.getUserName()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * + * @return + */ + @Override + public boolean checkPhoneUnique (SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * + * @return + */ + @Override + public boolean checkEmailUnique (SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + @Override + public void checkUserAllowed (SysUser user) { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { + throw new ServiceException("不允许操作超级管理员用户"); + } + } + + /** + * 校验用户是否有数据权限 + * + * @param userId 用户id + */ + @Override + public void checkUserDataScope (Long userId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysUser user = new SysUser(); + user.setUserId(userId); + List users = SpringUtils.getAopProxy(this).selectUserList(user); + if (StringUtils.isEmpty(users)) { + throw new ServiceException("没有权限访问用户数据!"); + } + } + } + + /** + * 新增保存用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertUser (SysUser user) { + // 新增用户信息 + int rows = userMapper.insertUser(user); + // 新增用户岗位关联 + insertUserPost(user); + // 新增用户与角色管理 + insertUserRole(user); + return rows; + } + + /** + * 注册用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public boolean registerUser (SysUser user) { + return userMapper.insertUser(user) > 0; + } + + /** + * 修改保存用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateUser (SysUser user) { + Long userId = user.getUserId(); + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 新增用户与角色管理 + insertUserRole(user); + // 删除用户与岗位关联 + userPostMapper.deleteUserPostByUserId(userId); + // 新增用户与岗位管理 + insertUserPost(user); + return userMapper.updateUser(user); + } + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertUserAuth (Long userId, Long[] roleIds) { + userRoleMapper.deleteUserRoleByUserId(userId); + insertUserRole(userId, roleIds); + } + + /** + * 修改用户状态 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public int updateUserStatus (SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public int updateUserProfile (SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * + * @return 结果 + */ + @Override + public boolean updateUserAvatar (String userName, String avatar) { + return userMapper.updateUserAvatar(userName, avatar) > 0; + } + + /** + * 重置用户密码 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public int resetPwd (SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * + * @return 结果 + */ + @Override + public int resetUserPwd (String userName, String password) { + return userMapper.resetUserPwd(userName, password); + } + + /** + * 新增用户角色信息 + * + * @param user 用户对象 + */ + public void insertUserRole (SysUser user) { + this.insertUserRole(user.getUserId(), user.getRoleIds()); + } + + /** + * 新增用户岗位信息 + * + * @param user 用户对象 + */ + public void insertUserPost (SysUser user) { + Long[] posts = user.getPostIds(); + if (StringUtils.isNotEmpty(posts)) { + // 新增用户与岗位管理 + List list = new ArrayList(); + for (Long postId : posts) { + SysUserPost up = new SysUserPost(); + up.setUserId(user.getUserId()); + up.setPostId(postId); + list.add(up); + } + userPostMapper.batchUserPost(list); + } + } + + /** + * 新增用户角色信息 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserRole (Long userId, Long[] roleIds) { + if (StringUtils.isNotEmpty(roleIds)) { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long roleId : roleIds) { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + userRoleMapper.batchUserRole(list); + } + } + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteUserById (Long userId) { + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 删除用户与岗位表 + userPostMapper.deleteUserPostByUserId(userId); + return userMapper.deleteUserById(userId); + } + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteUserByIds (Long[] userIds) { + for (Long userId : userIds) { + checkUserAllowed(new SysUser(userId)); + checkUserDataScope(userId); + } + // 删除用户与角色关联 + userRoleMapper.deleteUserRole(userIds); + // 删除用户与岗位关联 + userPostMapper.deleteUserPost(userIds); + return userMapper.deleteUserByIds(userIds); + } + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * + * @return 结果 + */ + @Override + public String importUser (List userList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(userList) || userList.size() == 0) { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + String password = configService.selectConfigByKey("sys.user.initPassword"); + for (SysUser user : userList) { + try { + // 验证是否存在这个用户 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) { + BeanValidators.validateWithException(validator, user); + user.setPassword(SecurityUtils.encryptPassword(password)); + user.setCreateBy(operName); + userMapper.insertUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 导入成功"); + } else if (isUpdateSupport) { + BeanValidators.validateWithException(validator, user); + checkUserAllowed(u); + checkUserDataScope(u.getUserId()); + user.setUserId(u.getUserId()); + user.setUpdateBy(operName); + userMapper.updateUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 更新成功"); + } else { + failureNum++; + failureMsg.append("
" + failureNum + "、账号 " + user.getUserName() + " 已存在"); + } + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + +} diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..218e27f --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml @@ -0,0 +1,28 @@ +# Tomcat +server: + port: 9201 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-system + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.ruoyi.system.mapper: DEBUG diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/logback.xml new file mode 100644 index 0000000..c16cb09 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MyBookMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MyBookMapper.xml new file mode 100644 index 0000000..6557655 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MyBookMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + select id, title, author, type, picture, intro, shelf_time, create_by, create_time, update_by, update_time, remark from my_book + + + + + + + + insert into my_book + + title, + author, + type, + picture, + intro, + shelf_time, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{title}, + #{author}, + #{type}, + #{picture}, + #{intro}, + #{shelfTime}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update my_book + + title = #{title}, + author = #{author}, + type = #{type}, + picture = #{picture}, + intro = #{intro}, + shelf_time = #{shelfTime}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from my_book where id = #{id} + + + + delete from my_book where id in + + #{id} + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml new file mode 100644 index 0000000..d327baf --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + select config_id, + config_name, + config_key, + config_value, + config_type, + create_by, + create_time, + update_by, + update_time, + remark + from sys_config + + + + + + + and config_id = #{configId} + + + and config_key = #{configKey} + + + + + + + + + + + + + + insert into sys_config ( + config_name, + config_key, + config_value, + config_type, + create_by, + remark, + create_time + )values( + #{configName}, + #{configKey}, + #{configValue}, + #{configType}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_config + + config_name = #{configName}, + config_key = #{configKey}, + config_value = #{configValue}, + config_type = #{configType}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where config_id = #{configId} + + + + delete + from sys_config + where config_id = #{configId} + + + + delete from sys_config where config_id in + + #{configId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml new file mode 100644 index 0000000..2d5277a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.phone, + d.email, + d.status, + d.del_flag, + d.create_by, + d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, + email, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{orderNum}, + #{leader}, + #{phone}, + #{email}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + order_num = #{orderNum}, + leader = #{leader}, + phone = #{phone}, + email = #{email}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept + set del_flag = '2' + where dept_id = #{deptId} + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml new file mode 100644 index 0000000..289284b --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + select dict_code, + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + create_by, + create_time, + remark + from sys_dict_data + + + + + + + + + + + + + + delete + from sys_dict_data + where dict_code = #{dictCode} + + + + delete from sys_dict_data where dict_code in + + #{dictCode} + + + + + update sys_dict_data + + dict_sort = #{dictSort}, + dict_label = #{dictLabel}, + dict_value = #{dictValue}, + dict_type = #{dictType}, + css_class = #{cssClass}, + list_class = #{listClass}, + is_default = #{isDefault}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_code = #{dictCode} + + + + update sys_dict_data + set dict_type = #{newDictType} + where dict_type = #{oldDictType} + + + + insert into sys_dict_data( + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + remark, + create_by, + create_time + )values( + #{dictSort}, + #{dictLabel}, + #{dictValue}, + #{dictType}, + #{cssClass}, + #{listClass}, + #{isDefault}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml new file mode 100644 index 0000000..8e24a52 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type + + + + + + + + + + + + + + delete + from sys_dict_type + where dict_id = #{dictId} + + + + delete from sys_dict_type where dict_id in + + #{dictId} + + + + + update sys_dict_type + + dict_name = #{dictName}, + dict_type = #{dictType}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_id = #{dictId} + + + + insert into sys_dict_type( + dict_name, + dict_type, + status, + remark, + create_by, + create_time + )values( + #{dictName}, + #{dictType}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml new file mode 100644 index 0000000..9b1f023 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, msg, access_time) + values (#{userName}, #{status}, #{ipaddr}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml new file mode 100644 index 0000000..6896418 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, + menu_name, + parent_id, + order_num, + path, + component, + `query`, + is_frame, + is_cache, + menu_type, + visible, + status, + ifnull(perms, '') as perms, + icon, + create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete + from sys_menu + where menu_id = #{menuId} + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml new file mode 100644 index 0000000..6ec0837 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + select notice_id, + notice_title, + notice_type, + cast(notice_content as char) as notice_content, + status, + create_by, + create_time, + update_by, + update_time, + remark + from sys_notice + + + + + + + + insert into sys_notice ( + notice_title, + notice_type, + notice_content, + status, + remark, + create_by, + create_time + )values( + #{noticeTitle}, + #{noticeType}, + #{noticeContent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_notice + + notice_title = #{noticeTitle}, + notice_type = #{noticeType}, + notice_content = #{noticeContent}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where notice_id = #{noticeId} + + + + delete + from sys_notice + where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id in + + #{noticeId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml new file mode 100644 index 0000000..c84bb8e --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, + title, + business_type, + method, + request_method, + operator_type, + oper_name, + dept_name, + oper_url, + oper_ip, + oper_param, + json_result, + status, + error_msg, + oper_time, + cost_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, + oper_url, oper_ip, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, + #{operUrl}, #{operIp}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml new file mode 100644 index 0000000..de3199a --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + select post_id, + post_code, + post_name, + post_sort, + status, + create_by, + create_time, + remark + from sys_post + + + + + + + + + + + + + + + + + + update sys_post + + post_code = #{postCode}, + post_name = #{postName}, + post_sort = #{postSort}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where post_id = #{postId} + + + + insert into sys_post( + post_id, + post_code, + post_name, + post_sort, + status, + remark, + create_by, + create_time + )values( + #{postId}, + #{postCode}, + #{postName}, + #{postSort}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete + from sys_post + where post_id = #{postId} + + + + delete from sys_post where post_id in + + #{postId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml new file mode 100644 index 0000000..b76f4ec --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + delete + from sys_role_dept + where role_id = #{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml new file mode 100644 index 0000000..60afdf9 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, + r.role_name, + r.role_key, + r.role_sort, + r.data_scope, + r.menu_check_strictly, + r.dept_check_strictly, + r.status, + r.del_flag, + r.create_time, + r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role + set del_flag = '2' + where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id in + + #{roleId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml new file mode 100644 index 0000000..70ee8ac --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + delete + from sys_role_menu + where role_id = #{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml new file mode 100644 index 0000000..1fdeeda --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, + u.dept_id, + u.user_name, + u.nick_name, + u.email, + u.avatar, + u.phonenumber, + u.password, + u.sex, + u.status, + u.del_flag, + u.login_ip, + u.login_date, + u.create_by, + u.create_time, + u.remark, + d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.status as dept_status, + r.role_id, + r.role_name, + r.role_key, + r.role_sort, + r.data_scope, + r.status as role_status + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + + + + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user + set status = #{status} + where user_id = #{userId} + + + + update sys_user + set avatar = #{avatar} + where user_name = #{userName} + + + + update sys_user + set password = #{password} + where user_name = #{userName} + + + + update sys_user + set del_flag = '2' + where user_id = #{userId} + + + + update sys_user set del_flag = '2' where user_id in + + #{userId} + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml new file mode 100644 index 0000000..7c4ff34 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + delete + from sys_user_post + where user_id = #{userId} + + + + + + delete from sys_user_post where user_id in + + #{userId} + + + + + insert into sys_user_post(user_id, post_id) values + + (#{item.userId},#{item.postId}) + + + + diff --git a/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml new file mode 100644 index 0000000..cef9fb1 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + delete + from sys_user_role + where user_id = #{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete + from sys_user_role + where user_id = #{userId} + and role_id = #{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + diff --git a/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/pom.xml b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/pom.xml new file mode 100644 index 0000000..cadb708 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/pom.xml @@ -0,0 +1,85 @@ + + + com.muyu + ruoyi-visual + 3.6.3 + + 4.0.0 + + muyu-visual-monitor + + + muyu-visual-monitor监控中心 + + + + + + + de.codecentric + spring-boot-admin-starter-server + ${spring-boot-admin.version} + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-security + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/MuYuMonitorApplication.java b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/MuYuMonitorApplication.java new file mode 100644 index 0000000..e13fe46 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/MuYuMonitorApplication.java @@ -0,0 +1,18 @@ +package com.ruoyi.modules.monitor; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 监控中心 + * + * @author muyu + */ +@EnableAdminServer +@SpringBootApplication +public class MuYuMonitorApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuMonitorApplication.class, args); + } +} diff --git a/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java new file mode 100644 index 0000000..f94a234 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java @@ -0,0 +1,48 @@ +package com.ruoyi.modules.monitor.config; + +import de.codecentric.boot.admin.server.config.AdminServerProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; + +/** + * 监控权限配置 + * + * @author muyu + */ +@EnableWebSecurity +public class WebSecurityConfigurer { + private final String adminContextPath; + + public WebSecurityConfigurer (AdminServerProperties adminServerProperties) { + this.adminContextPath = adminServerProperties.getContextPath(); + } + + @Bean + public SecurityFilterChain filterChain (HttpSecurity httpSecurity) throws Exception { + SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); + successHandler.setTargetUrlParameter("redirectTo"); + successHandler.setDefaultTargetUrl(adminContextPath + "/"); + + return httpSecurity + .headers().frameOptions().disable() + .and().authorizeRequests() + .antMatchers(adminContextPath + "/assets/**" + , adminContextPath + "/login" + , adminContextPath + "/actuator/**" + , adminContextPath + "/instances/**" + ).permitAll() + .anyRequest().authenticated() + .and() + .formLogin().loginPage(adminContextPath + "/login") + .successHandler(successHandler).and() + .logout().logoutUrl(adminContextPath + "/logout") + .and() + .httpBasic().and() + .csrf() + .disable() + .build(); + } +} diff --git a/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/banner.txt b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/bootstrap.yml b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..4353aac --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/bootstrap.yml @@ -0,0 +1,25 @@ +# Tomcat +server: + port: 9100 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-monitor + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/logback.xml b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/logback.xml new file mode 100644 index 0000000..cb649ed --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/muyu-monitor/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-ruoyi-server/ruoyi-visual/pom.xml b/muyu-ruoyi-server/ruoyi-visual/pom.xml new file mode 100644 index 0000000..5d6a522 --- /dev/null +++ b/muyu-ruoyi-server/ruoyi-visual/pom.xml @@ -0,0 +1,22 @@ + + + + com.muyu + muyu + 3.6.3 + + 4.0.0 + + + muyu-monitor + + + ruoyi-visual + pom + + + muyu-visual图形化管理模块 + + + diff --git a/muyu-ruoyi-server/sql/quartz.sql b/muyu-ruoyi-server/sql/quartz.sql new file mode 100644 index 0000000..cee613b --- /dev/null +++ b/muyu-ruoyi-server/sql/quartz.sql @@ -0,0 +1,174 @@ +DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; +DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; +DROP TABLE IF EXISTS QRTZ_LOCKS; +DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; +DROP TABLE IF EXISTS QRTZ_CALENDARS; + +-- ---------------------------- +-- 1、存储每一个已配置的 jobDetail 的详细信息 +-- ---------------------------- +create table QRTZ_JOB_DETAILS ( + sched_name varchar(120) not null comment '调度名称', + job_name varchar(200) not null comment '任务名称', + job_group varchar(200) not null comment '任务组名', + description varchar(250) null comment '相关介绍', + job_class_name varchar(250) not null comment '执行任务类名称', + is_durable varchar(1) not null comment '是否持久化', + is_nonconcurrent varchar(1) not null comment '是否并发', + is_update_data varchar(1) not null comment '是否更新数据', + requests_recovery varchar(1) not null comment '是否接受恢复执行', + job_data blob null comment '存放持久化job对象', + primary key (sched_name, job_name, job_group) +) engine=innodb comment = '任务详细信息表'; + +-- ---------------------------- +-- 2、 存储已配置的 Trigger 的信息 +-- ---------------------------- +create table QRTZ_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment '触发器的名字', + trigger_group varchar(200) not null comment '触发器所属组的名字', + job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键', + job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键', + description varchar(250) null comment '相关介绍', + next_fire_time bigint(13) null comment '上一次触发时间(毫秒)', + prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)', + priority integer null comment '优先级', + trigger_state varchar(16) not null comment '触发器状态', + trigger_type varchar(8) not null comment '触发器的类型', + start_time bigint(13) not null comment '开始时间', + end_time bigint(13) null comment '结束时间', + calendar_name varchar(200) null comment '日程表名称', + misfire_instr smallint(2) null comment '补偿执行的策略', + job_data blob null comment '存放持久化job对象', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group) +) engine=innodb comment = '触发器详细信息表'; + +-- ---------------------------- +-- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 +-- ---------------------------- +create table QRTZ_SIMPLE_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + repeat_count bigint(7) not null comment '重复的次数统计', + repeat_interval bigint(12) not null comment '重复的间隔时间', + times_triggered bigint(10) not null comment '已经触发的次数', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = '简单触发器的信息表'; + +-- ---------------------------- +-- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息 +-- ---------------------------- +create table QRTZ_CRON_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + cron_expression varchar(200) not null comment 'cron表达式', + time_zone_id varchar(80) comment '时区', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = 'Cron类型的触发器表'; + +-- ---------------------------- +-- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) +-- ---------------------------- +create table QRTZ_BLOB_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + blob_data blob null comment '存放持久化Trigger对象', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = 'Blob类型的触发器表'; + +-- ---------------------------- +-- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围 +-- ---------------------------- +create table QRTZ_CALENDARS ( + sched_name varchar(120) not null comment '调度名称', + calendar_name varchar(200) not null comment '日历名称', + calendar blob not null comment '存放持久化calendar对象', + primary key (sched_name, calendar_name) +) engine=innodb comment = '日历信息表'; + +-- ---------------------------- +-- 7、 存储已暂停的 Trigger 组的信息 +-- ---------------------------- +create table QRTZ_PAUSED_TRIGGER_GRPS ( + sched_name varchar(120) not null comment '调度名称', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + primary key (sched_name, trigger_group) +) engine=innodb comment = '暂停的触发器表'; + +-- ---------------------------- +-- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 +-- ---------------------------- +create table QRTZ_FIRED_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + entry_id varchar(95) not null comment '调度器实例id', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + instance_name varchar(200) not null comment '调度器实例名', + fired_time bigint(13) not null comment '触发的时间', + sched_time bigint(13) not null comment '定时器制定的时间', + priority integer not null comment '优先级', + state varchar(16) not null comment '状态', + job_name varchar(200) null comment '任务名称', + job_group varchar(200) null comment '任务组名', + is_nonconcurrent varchar(1) null comment '是否并发', + requests_recovery varchar(1) null comment '是否接受恢复执行', + primary key (sched_name, entry_id) +) engine=innodb comment = '已触发的触发器表'; + +-- ---------------------------- +-- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 +-- ---------------------------- +create table QRTZ_SCHEDULER_STATE ( + sched_name varchar(120) not null comment '调度名称', + instance_name varchar(200) not null comment '实例名称', + last_checkin_time bigint(13) not null comment '上次检查时间', + checkin_interval bigint(13) not null comment '检查间隔时间', + primary key (sched_name, instance_name) +) engine=innodb comment = '调度器状态表'; + +-- ---------------------------- +-- 10、 存储程序的悲观锁的信息(假如使用了悲观锁) +-- ---------------------------- +create table QRTZ_LOCKS ( + sched_name varchar(120) not null comment '调度名称', + lock_name varchar(40) not null comment '悲观锁名称', + primary key (sched_name, lock_name) +) engine=innodb comment = '存储的悲观锁信息表'; + +-- ---------------------------- +-- 11、 Quartz集群实现同步机制的行锁表 +-- ---------------------------- +create table QRTZ_SIMPROP_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数', + str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数', + str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数', + int_prop_1 int null comment 'int类型的trigger的第一个参数', + int_prop_2 int null comment 'int类型的trigger的第二个参数', + long_prop_1 bigint null comment 'long类型的trigger的第一个参数', + long_prop_2 bigint null comment 'long类型的trigger的第二个参数', + dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数', + dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数', + bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数', + bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = '同步机制的行锁表'; + +commit; \ No newline at end of file diff --git a/muyu-ruoyi-server/sql/ry_20231130.sql b/muyu-ruoyi-server/sql/ry_20231130.sql new file mode 100644 index 0000000..516363c --- /dev/null +++ b/muyu-ruoyi-server/sql/ry_20231130.sql @@ -0,0 +1,696 @@ +SET NAMES utf8mb4; + +-- ---------------------------- +-- 1、部门表 +-- ---------------------------- +drop table if exists sys_dept; +create table sys_dept ( + dept_id bigint(20) not null auto_increment comment '部门id', + parent_id bigint(20) default 0 comment '父部门id', + ancestors varchar(50) default '' comment '祖级列表', + dept_name varchar(30) default '' comment '部门名称', + order_num int(4) default 0 comment '显示顺序', + leader varchar(20) default null comment '负责人', + phone varchar(11) default null comment '联系电话', + email varchar(50) default null comment '邮箱', + status char(1) default '0' comment '部门状态(0正常 1停用)', + del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + primary key (dept_id) +) engine=innodb auto_increment=200 comment = '部门表'; + +-- ---------------------------- +-- 初始化-部门表数据 +-- ---------------------------- +insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); + + +-- ---------------------------- +-- 2、用户信息表 +-- ---------------------------- +drop table if exists sys_user; +create table sys_user ( + user_id bigint(20) not null auto_increment comment '用户ID', + dept_id bigint(20) default null comment '部门ID', + user_name varchar(30) not null comment '用户账号', + nick_name varchar(30) not null comment '用户昵称', + user_type varchar(2) default '00' comment '用户类型(00系统用户)', + email varchar(50) default '' comment '用户邮箱', + phonenumber varchar(11) default '' comment '手机号码', + sex char(1) default '0' comment '用户性别(0男 1女 2未知)', + avatar varchar(100) default '' comment '头像地址', + password varchar(100) default '' comment '密码', + status char(1) default '0' comment '帐号状态(0正常 1停用)', + del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', + login_ip varchar(128) default '' comment '最后登录IP', + login_date datetime comment '最后登录时间', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (user_id) +) engine=innodb auto_increment=100 comment = '用户信息表'; + +-- ---------------------------- +-- 初始化-用户信息表数据 +-- ---------------------------- +insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员'); +insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); + + +-- ---------------------------- +-- 3、岗位信息表 +-- ---------------------------- +drop table if exists sys_post; +create table sys_post +( + post_id bigint(20) not null auto_increment comment '岗位ID', + post_code varchar(64) not null comment '岗位编码', + post_name varchar(50) not null comment '岗位名称', + post_sort int(4) not null comment '显示顺序', + status char(1) not null comment '状态(0正常 1停用)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (post_id) +) engine=innodb comment = '岗位信息表'; + +-- ---------------------------- +-- 初始化-岗位信息表数据 +-- ---------------------------- +insert into sys_post values(1, 'ceo', '董事长', 1, '0', 'admin', sysdate(), '', null, ''); +insert into sys_post values(2, 'se', '项目经理', 2, '0', 'admin', sysdate(), '', null, ''); +insert into sys_post values(3, 'hr', '人力资源', 3, '0', 'admin', sysdate(), '', null, ''); +insert into sys_post values(4, 'user', '普通员工', 4, '0', 'admin', sysdate(), '', null, ''); + + +-- ---------------------------- +-- 4、角色信息表 +-- ---------------------------- +drop table if exists sys_role; +create table sys_role ( + role_id bigint(20) not null auto_increment comment '角色ID', + role_name varchar(30) not null comment '角色名称', + role_key varchar(100) not null comment '角色权限字符串', + role_sort int(4) not null comment '显示顺序', + data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + menu_check_strictly tinyint(1) default 1 comment '菜单树选择项是否关联显示', + dept_check_strictly tinyint(1) default 1 comment '部门树选择项是否关联显示', + status char(1) not null comment '角色状态(0正常 1停用)', + del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (role_id) +) engine=innodb auto_increment=100 comment = '角色信息表'; + +-- ---------------------------- +-- 初始化-角色信息表数据 +-- ---------------------------- +insert into sys_role values('1', '超级管理员', 'admin', 1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员'); +insert into sys_role values('2', '普通角色', 'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '普通角色'); + + +-- ---------------------------- +-- 5、菜单权限表 +-- ---------------------------- +drop table if exists sys_menu; +create table sys_menu ( + menu_id bigint(20) not null auto_increment comment '菜单ID', + menu_name varchar(50) not null comment '菜单名称', + parent_id bigint(20) default 0 comment '父菜单ID', + order_num int(4) default 0 comment '显示顺序', + path varchar(200) default '' comment '路由地址', + component varchar(255) default null comment '组件路径', + query varchar(255) default null comment '路由参数', + is_frame int(1) default 1 comment '是否为外链(0是 1否)', + is_cache int(1) default 0 comment '是否缓存(0缓存 1不缓存)', + menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)', + visible char(1) default 0 comment '菜单状态(0显示 1隐藏)', + status char(1) default 0 comment '菜单状态(0正常 1停用)', + perms varchar(100) default null comment '权限标识', + icon varchar(100) default '#' comment '菜单图标', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default '' comment '备注', + primary key (menu_id) +) engine=innodb auto_increment=2000 comment = '菜单权限表'; + +-- ---------------------------- +-- 初始化-菜单信息表数据 +-- ---------------------------- +-- 一级菜单 +insert into sys_menu values('1', '系统管理', '0', '1', 'system', null, '', 1, 0, 'M', '0', '0', '', 'system', 'admin', sysdate(), '', null, '系统管理目录'); +insert into sys_menu values('2', '系统监控', '0', '2', 'monitor', null, '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', sysdate(), '', null, '系统监控目录'); +insert into sys_menu values('3', '系统工具', '0', '3', 'tool', null, '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', sysdate(), '', null, '系统工具目录'); +insert into sys_menu values('4', '若依官网', '0', '4', 'http://ruoyi.vip', null, '', 0, 0, 'M', '0', '0', '', 'guide', 'admin', sysdate(), '', null, '若依官网地址'); +-- 二级菜单 +insert into sys_menu values('100', '用户管理', '1', '1', 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', sysdate(), '', null, '用户管理菜单'); +insert into sys_menu values('101', '角色管理', '1', '2', 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', sysdate(), '', null, '角色管理菜单'); +insert into sys_menu values('102', '菜单管理', '1', '3', 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', sysdate(), '', null, '菜单管理菜单'); +insert into sys_menu values('103', '部门管理', '1', '4', 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', sysdate(), '', null, '部门管理菜单'); +insert into sys_menu values('104', '岗位管理', '1', '5', 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', sysdate(), '', null, '岗位管理菜单'); +insert into sys_menu values('105', '字典管理', '1', '6', 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', sysdate(), '', null, '字典管理菜单'); +insert into sys_menu values('106', '参数设置', '1', '7', 'config', 'system/config/index', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', sysdate(), '', null, '参数设置菜单'); +insert into sys_menu values('107', '通知公告', '1', '8', 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', sysdate(), '', null, '通知公告菜单'); +insert into sys_menu values('108', '日志管理', '1', '9', 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', sysdate(), '', null, '日志管理菜单'); +insert into sys_menu values('109', '在线用户', '2', '1', 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', sysdate(), '', null, '在线用户菜单'); +insert into sys_menu values('110', '定时任务', '2', '2', 'job', 'monitor/job/index', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', sysdate(), '', null, '定时任务菜单'); +insert into sys_menu values('111', 'Sentinel控制台', '2', '3', 'http://localhost:8718', '', '', 0, 0, 'C', '0', '0', 'monitor:sentinel:list', 'sentinel', 'admin', sysdate(), '', null, '流量控制菜单'); +insert into sys_menu values('112', 'Nacos控制台', '2', '4', 'http://localhost:8848/nacos', '', '', 0, 0, 'C', '0', '0', 'monitor:nacos:list', 'nacos', 'admin', sysdate(), '', null, '服务治理菜单'); +insert into sys_menu values('113', 'Admin控制台', '2', '5', 'http://localhost:9100/login', '', '', 0, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', sysdate(), '', null, '服务监控菜单'); +insert into sys_menu values('114', '表单构建', '3', '1', 'build', 'tool/build/index', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', sysdate(), '', null, '表单构建菜单'); +insert into sys_menu values('115', '代码生成', '3', '2', 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', sysdate(), '', null, '代码生成菜单'); +insert into sys_menu values('116', '系统接口', '3', '3', 'http://localhost:8080/swagger-ui/index.html', '', '', 0, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', sysdate(), '', null, '系统接口菜单'); +-- 三级菜单 +insert into sys_menu values('500', '操作日志', '108', '1', 'operlog', 'system/operlog/index', '', 1, 0, 'C', '0', '0', 'system:operlog:list', 'form', 'admin', sysdate(), '', null, '操作日志菜单'); +insert into sys_menu values('501', '登录日志', '108', '2', 'logininfor', 'system/logininfor/index', '', 1, 0, 'C', '0', '0', 'system:logininfor:list', 'logininfor', 'admin', sysdate(), '', null, '登录日志菜单'); +-- 用户管理按钮 +insert into sys_menu values('1000', '用户查询', '100', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1001', '用户新增', '100', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1002', '用户修改', '100', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1003', '用户删除', '100', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1004', '用户导出', '100', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1005', '用户导入', '100', '6', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1006', '重置密码', '100', '7', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', sysdate(), '', null, ''); +-- 角色管理按钮 +insert into sys_menu values('1007', '角色查询', '101', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1008', '角色新增', '101', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1009', '角色修改', '101', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1010', '角色删除', '101', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1011', '角色导出', '101', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', sysdate(), '', null, ''); +-- 菜单管理按钮 +insert into sys_menu values('1012', '菜单查询', '102', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1013', '菜单新增', '102', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1014', '菜单修改', '102', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1015', '菜单删除', '102', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', sysdate(), '', null, ''); +-- 部门管理按钮 +insert into sys_menu values('1016', '部门查询', '103', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1017', '部门新增', '103', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1018', '部门修改', '103', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1019', '部门删除', '103', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', sysdate(), '', null, ''); +-- 岗位管理按钮 +insert into sys_menu values('1020', '岗位查询', '104', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1021', '岗位新增', '104', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1022', '岗位修改', '104', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1023', '岗位删除', '104', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1024', '岗位导出', '104', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', sysdate(), '', null, ''); +-- 字典管理按钮 +insert into sys_menu values('1025', '字典查询', '105', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1026', '字典新增', '105', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1027', '字典修改', '105', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', sysdate(), '', null, ''); +-- 参数设置按钮 +insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', sysdate(), '', null, ''); +-- 通知公告按钮 +insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', sysdate(), '', null, ''); +-- 操作日志按钮 +insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:operlog:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:operlog:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1041', '日志导出', '500', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:operlog:export', '#', 'admin', sysdate(), '', null, ''); +-- 登录日志按钮 +insert into sys_menu values('1042', '登录查询', '501', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:logininfor:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1043', '登录删除', '501', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:logininfor:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1044', '日志导出', '501', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:logininfor:export', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1045', '账户解锁', '501', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:logininfor:unlock', '#', 'admin', sysdate(), '', null, ''); +-- 在线用户按钮 +insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, ''); +-- 定时任务按钮 +insert into sys_menu values('1049', '任务查询', '110', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1050', '任务新增', '110', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1051', '任务修改', '110', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1052', '任务删除', '110', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1053', '状态修改', '110', '5', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1054', '任务导出', '110', '6', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', sysdate(), '', null, ''); +-- 代码生成按钮 +insert into sys_menu values('1055', '生成查询', '115', '1', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1056', '生成修改', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1057', '生成删除', '115', '3', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1058', '导入代码', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1059', '预览代码', '115', '4', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1060', '生成代码', '115', '5', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', sysdate(), '', null, ''); + + +-- ---------------------------- +-- 6、用户和角色关联表 用户N-1角色 +-- ---------------------------- +drop table if exists sys_user_role; +create table sys_user_role ( + user_id bigint(20) not null comment '用户ID', + role_id bigint(20) not null comment '角色ID', + primary key(user_id, role_id) +) engine=innodb comment = '用户和角色关联表'; + +-- ---------------------------- +-- 初始化-用户和角色关联表数据 +-- ---------------------------- +insert into sys_user_role values ('1', '1'); +insert into sys_user_role values ('2', '2'); + + +-- ---------------------------- +-- 7、角色和菜单关联表 角色1-N菜单 +-- ---------------------------- +drop table if exists sys_role_menu; +create table sys_role_menu ( + role_id bigint(20) not null comment '角色ID', + menu_id bigint(20) not null comment '菜单ID', + primary key(role_id, menu_id) +) engine=innodb comment = '角色和菜单关联表'; + +-- ---------------------------- +-- 初始化-角色和菜单关联表数据 +-- ---------------------------- +insert into sys_role_menu values ('2', '1'); +insert into sys_role_menu values ('2', '2'); +insert into sys_role_menu values ('2', '3'); +insert into sys_role_menu values ('2', '4'); +insert into sys_role_menu values ('2', '100'); +insert into sys_role_menu values ('2', '101'); +insert into sys_role_menu values ('2', '102'); +insert into sys_role_menu values ('2', '103'); +insert into sys_role_menu values ('2', '104'); +insert into sys_role_menu values ('2', '105'); +insert into sys_role_menu values ('2', '106'); +insert into sys_role_menu values ('2', '107'); +insert into sys_role_menu values ('2', '108'); +insert into sys_role_menu values ('2', '109'); +insert into sys_role_menu values ('2', '110'); +insert into sys_role_menu values ('2', '111'); +insert into sys_role_menu values ('2', '112'); +insert into sys_role_menu values ('2', '113'); +insert into sys_role_menu values ('2', '114'); +insert into sys_role_menu values ('2', '115'); +insert into sys_role_menu values ('2', '116'); +insert into sys_role_menu values ('2', '500'); +insert into sys_role_menu values ('2', '501'); +insert into sys_role_menu values ('2', '1000'); +insert into sys_role_menu values ('2', '1001'); +insert into sys_role_menu values ('2', '1002'); +insert into sys_role_menu values ('2', '1003'); +insert into sys_role_menu values ('2', '1004'); +insert into sys_role_menu values ('2', '1005'); +insert into sys_role_menu values ('2', '1006'); +insert into sys_role_menu values ('2', '1007'); +insert into sys_role_menu values ('2', '1008'); +insert into sys_role_menu values ('2', '1009'); +insert into sys_role_menu values ('2', '1010'); +insert into sys_role_menu values ('2', '1011'); +insert into sys_role_menu values ('2', '1012'); +insert into sys_role_menu values ('2', '1013'); +insert into sys_role_menu values ('2', '1014'); +insert into sys_role_menu values ('2', '1015'); +insert into sys_role_menu values ('2', '1016'); +insert into sys_role_menu values ('2', '1017'); +insert into sys_role_menu values ('2', '1018'); +insert into sys_role_menu values ('2', '1019'); +insert into sys_role_menu values ('2', '1020'); +insert into sys_role_menu values ('2', '1021'); +insert into sys_role_menu values ('2', '1022'); +insert into sys_role_menu values ('2', '1023'); +insert into sys_role_menu values ('2', '1024'); +insert into sys_role_menu values ('2', '1025'); +insert into sys_role_menu values ('2', '1026'); +insert into sys_role_menu values ('2', '1027'); +insert into sys_role_menu values ('2', '1028'); +insert into sys_role_menu values ('2', '1029'); +insert into sys_role_menu values ('2', '1030'); +insert into sys_role_menu values ('2', '1031'); +insert into sys_role_menu values ('2', '1032'); +insert into sys_role_menu values ('2', '1033'); +insert into sys_role_menu values ('2', '1034'); +insert into sys_role_menu values ('2', '1035'); +insert into sys_role_menu values ('2', '1036'); +insert into sys_role_menu values ('2', '1037'); +insert into sys_role_menu values ('2', '1038'); +insert into sys_role_menu values ('2', '1039'); +insert into sys_role_menu values ('2', '1040'); +insert into sys_role_menu values ('2', '1041'); +insert into sys_role_menu values ('2', '1042'); +insert into sys_role_menu values ('2', '1043'); +insert into sys_role_menu values ('2', '1044'); +insert into sys_role_menu values ('2', '1045'); +insert into sys_role_menu values ('2', '1046'); +insert into sys_role_menu values ('2', '1047'); +insert into sys_role_menu values ('2', '1048'); +insert into sys_role_menu values ('2', '1049'); +insert into sys_role_menu values ('2', '1050'); +insert into sys_role_menu values ('2', '1051'); +insert into sys_role_menu values ('2', '1052'); +insert into sys_role_menu values ('2', '1053'); +insert into sys_role_menu values ('2', '1054'); +insert into sys_role_menu values ('2', '1055'); +insert into sys_role_menu values ('2', '1056'); +insert into sys_role_menu values ('2', '1057'); +insert into sys_role_menu values ('2', '1058'); +insert into sys_role_menu values ('2', '1059'); +insert into sys_role_menu values ('2', '1060'); + +-- ---------------------------- +-- 8、角色和部门关联表 角色1-N部门 +-- ---------------------------- +drop table if exists sys_role_dept; +create table sys_role_dept ( + role_id bigint(20) not null comment '角色ID', + dept_id bigint(20) not null comment '部门ID', + primary key(role_id, dept_id) +) engine=innodb comment = '角色和部门关联表'; + +-- ---------------------------- +-- 初始化-角色和部门关联表数据 +-- ---------------------------- +insert into sys_role_dept values ('2', '100'); +insert into sys_role_dept values ('2', '101'); +insert into sys_role_dept values ('2', '105'); + + +-- ---------------------------- +-- 9、用户与岗位关联表 用户1-N岗位 +-- ---------------------------- +drop table if exists sys_user_post; +create table sys_user_post +( + user_id bigint(20) not null comment '用户ID', + post_id bigint(20) not null comment '岗位ID', + primary key (user_id, post_id) +) engine=innodb comment = '用户与岗位关联表'; + +-- ---------------------------- +-- 初始化-用户与岗位关联表数据 +-- ---------------------------- +insert into sys_user_post values ('1', '1'); +insert into sys_user_post values ('2', '2'); + + +-- ---------------------------- +-- 10、操作日志记录 +-- ---------------------------- +drop table if exists sys_oper_log; +create table sys_oper_log ( + oper_id bigint(20) not null auto_increment comment '日志主键', + title varchar(50) default '' comment '模块标题', + business_type int(2) default 0 comment '业务类型(0其它 1新增 2修改 3删除)', + method varchar(100) default '' comment '方法名称', + request_method varchar(10) default '' comment '请求方式', + operator_type int(1) default 0 comment '操作类别(0其它 1后台用户 2手机端用户)', + oper_name varchar(50) default '' comment '操作人员', + dept_name varchar(50) default '' comment '部门名称', + oper_url varchar(255) default '' comment '请求URL', + oper_ip varchar(128) default '' comment '主机地址', + oper_location varchar(255) default '' comment '操作地点', + oper_param varchar(2000) default '' comment '请求参数', + json_result varchar(2000) default '' comment '返回参数', + status int(1) default 0 comment '操作状态(0正常 1异常)', + error_msg varchar(2000) default '' comment '错误消息', + oper_time datetime comment '操作时间', + cost_time bigint(20) default 0 comment '消耗时间', + primary key (oper_id), + key idx_sys_oper_log_bt (business_type), + key idx_sys_oper_log_s (status), + key idx_sys_oper_log_ot (oper_time) +) engine=innodb auto_increment=100 comment = '操作日志记录'; + + +-- ---------------------------- +-- 11、字典类型表 +-- ---------------------------- +drop table if exists sys_dict_type; +create table sys_dict_type +( + dict_id bigint(20) not null auto_increment comment '字典主键', + dict_name varchar(100) default '' comment '字典名称', + dict_type varchar(100) default '' comment '字典类型', + status char(1) default '0' comment '状态(0正常 1停用)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (dict_id), + unique (dict_type) +) engine=innodb auto_increment=100 comment = '字典类型表'; + +insert into sys_dict_type values(1, '用户性别', 'sys_user_sex', '0', 'admin', sysdate(), '', null, '用户性别列表'); +insert into sys_dict_type values(2, '菜单状态', 'sys_show_hide', '0', 'admin', sysdate(), '', null, '菜单状态列表'); +insert into sys_dict_type values(3, '系统开关', 'sys_normal_disable', '0', 'admin', sysdate(), '', null, '系统开关列表'); +insert into sys_dict_type values(4, '任务状态', 'sys_job_status', '0', 'admin', sysdate(), '', null, '任务状态列表'); +insert into sys_dict_type values(5, '任务分组', 'sys_job_group', '0', 'admin', sysdate(), '', null, '任务分组列表'); +insert into sys_dict_type values(6, '系统是否', 'sys_yes_no', '0', 'admin', sysdate(), '', null, '系统是否列表'); +insert into sys_dict_type values(7, '通知类型', 'sys_notice_type', '0', 'admin', sysdate(), '', null, '通知类型列表'); +insert into sys_dict_type values(8, '通知状态', 'sys_notice_status', '0', 'admin', sysdate(), '', null, '通知状态列表'); +insert into sys_dict_type values(9, '操作类型', 'sys_oper_type', '0', 'admin', sysdate(), '', null, '操作类型列表'); +insert into sys_dict_type values(10, '系统状态', 'sys_common_status', '0', 'admin', sysdate(), '', null, '登录状态列表'); + + +-- ---------------------------- +-- 12、字典数据表 +-- ---------------------------- +drop table if exists sys_dict_data; +create table sys_dict_data +( + dict_code bigint(20) not null auto_increment comment '字典编码', + dict_sort int(4) default 0 comment '字典排序', + dict_label varchar(100) default '' comment '字典标签', + dict_value varchar(100) default '' comment '字典键值', + dict_type varchar(100) default '' comment '字典类型', + css_class varchar(100) default null comment '样式属性(其他样式扩展)', + list_class varchar(100) default null comment '表格回显样式', + is_default char(1) default 'N' comment '是否默认(Y是 N否)', + status char(1) default '0' comment '状态(0正常 1停用)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (dict_code) +) engine=innodb auto_increment=100 comment = '字典数据表'; + +insert into sys_dict_data values(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', sysdate(), '', null, '性别男'); +insert into sys_dict_data values(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '性别女'); +insert into sys_dict_data values(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '性别未知'); +insert into sys_dict_data values(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '显示菜单'); +insert into sys_dict_data values(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '隐藏菜单'); +insert into sys_dict_data values(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); +insert into sys_dict_data values(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态'); +insert into sys_dict_data values(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); +insert into sys_dict_data values(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态'); +insert into sys_dict_data values(10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', sysdate(), '', null, '默认分组'); +insert into sys_dict_data values(11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', sysdate(), '', null, '系统分组'); +insert into sys_dict_data values(12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '系统默认是'); +insert into sys_dict_data values(13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '系统默认否'); +insert into sys_dict_data values(14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', sysdate(), '', null, '通知'); +insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', sysdate(), '', null, '公告'); +insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); +insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '关闭状态'); +insert into sys_dict_data values(18, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '其他操作'); +insert into sys_dict_data values(19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '新增操作'); +insert into sys_dict_data values(20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '修改操作'); +insert into sys_dict_data values(21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '删除操作'); +insert into sys_dict_data values(22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '授权操作'); +insert into sys_dict_data values(23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '导出操作'); +insert into sys_dict_data values(24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '导入操作'); +insert into sys_dict_data values(25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '强退操作'); +insert into sys_dict_data values(26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '生成操作'); +insert into sys_dict_data values(27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '清空操作'); +insert into sys_dict_data values(28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态'); +insert into sys_dict_data values(29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态'); + + +-- ---------------------------- +-- 13、参数配置表 +-- ---------------------------- +drop table if exists sys_config; +create table sys_config ( + config_id int(5) not null auto_increment comment '参数主键', + config_name varchar(100) default '' comment '参数名称', + config_key varchar(100) default '' comment '参数键名', + config_value varchar(500) default '' comment '参数键值', + config_type char(1) default 'N' comment '系统内置(Y是 N否)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (config_id) +) engine=innodb auto_increment=100 comment = '参数配置表'; + +insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' ); +insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, '初始化密码 123456' ); +insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' ); +insert into sys_config values(4, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)'); +insert into sys_config values(5, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)'); + + +-- ---------------------------- +-- 14、系统访问记录 +-- ---------------------------- +drop table if exists sys_logininfor; +create table sys_logininfor ( + info_id bigint(20) not null auto_increment comment '访问ID', + user_name varchar(50) default '' comment '用户账号', + ipaddr varchar(128) default '' comment '登录IP地址', + status char(1) default '0' comment '登录状态(0成功 1失败)', + msg varchar(255) default '' comment '提示信息', + access_time datetime comment '访问时间', + primary key (info_id), + key idx_sys_logininfor_s (status), + key idx_sys_logininfor_lt (access_time) +) engine=innodb auto_increment=100 comment = '系统访问记录'; + + +-- ---------------------------- +-- 15、定时任务调度表 +-- ---------------------------- +drop table if exists sys_job; +create table sys_job ( + job_id bigint(20) not null auto_increment comment '任务ID', + job_name varchar(64) default '' comment '任务名称', + job_group varchar(64) default 'DEFAULT' comment '任务组名', + invoke_target varchar(500) not null comment '调用目标字符串', + cron_expression varchar(255) default '' comment 'cron执行表达式', + misfire_policy varchar(20) default '3' comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + concurrent char(1) default '1' comment '是否并发执行(0允许 1禁止)', + status char(1) default '0' comment '状态(0正常 1暂停)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default '' comment '备注信息', + primary key (job_id, job_name, job_group) +) engine=innodb auto_increment=100 comment = '定时任务调度表'; + +insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); +insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); +insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); + + +-- ---------------------------- +-- 16、定时任务调度日志表 +-- ---------------------------- +drop table if exists sys_job_log; +create table sys_job_log ( + job_log_id bigint(20) not null auto_increment comment '任务日志ID', + job_name varchar(64) not null comment '任务名称', + job_group varchar(64) not null comment '任务组名', + invoke_target varchar(500) not null comment '调用目标字符串', + job_message varchar(500) comment '日志信息', + status char(1) default '0' comment '执行状态(0正常 1失败)', + exception_info varchar(2000) default '' comment '异常信息', + create_time datetime comment '创建时间', + primary key (job_log_id) +) engine=innodb comment = '定时任务调度日志表'; + + +-- ---------------------------- +-- 17、通知公告表 +-- ---------------------------- +drop table if exists sys_notice; +create table sys_notice ( + notice_id int(4) not null auto_increment comment '公告ID', + notice_title varchar(50) not null comment '公告标题', + notice_type char(1) not null comment '公告类型(1通知 2公告)', + notice_content longblob default null comment '公告内容', + status char(1) default '0' comment '公告状态(0正常 1关闭)', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(255) default null comment '备注', + primary key (notice_id) +) engine=innodb auto_increment=10 comment = '通知公告表'; + +-- ---------------------------- +-- 初始化-公告信息表数据 +-- ---------------------------- +insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员'); +insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容', '0', 'admin', sysdate(), '', null, '管理员'); + + +-- ---------------------------- +-- 18、代码生成业务表 +-- ---------------------------- +drop table if exists gen_table; +create table gen_table ( + table_id bigint(20) not null auto_increment comment '编号', + table_name varchar(200) default '' comment '表名称', + table_comment varchar(500) default '' comment '表描述', + sub_table_name varchar(64) default null comment '关联子表的表名', + sub_table_fk_name varchar(64) default null comment '子表关联的外键名', + class_name varchar(100) default '' comment '实体类名称', + tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作)', + tpl_web_type varchar(30) default '' comment '前端模板类型(element-ui模版 element-plus模版)', + package_name varchar(100) comment '生成包路径', + module_name varchar(30) comment '生成模块名', + business_name varchar(30) comment '生成业务名', + function_name varchar(50) comment '生成功能名', + function_author varchar(50) comment '生成功能作者', + gen_type char(1) default '0' comment '生成代码方式(0zip压缩包 1自定义路径)', + gen_path varchar(200) default '/' comment '生成路径(不填默认项目路径)', + options varchar(1000) comment '其它生成选项', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (table_id) +) engine=innodb auto_increment=1 comment = '代码生成业务表'; + + +-- ---------------------------- +-- 19、代码生成业务表字段 +-- ---------------------------- +drop table if exists gen_table_column; +create table gen_table_column ( + column_id bigint(20) not null auto_increment comment '编号', + table_id bigint(20) comment '归属表编号', + column_name varchar(200) comment '列名称', + column_comment varchar(500) comment '列描述', + column_type varchar(100) comment '列类型', + java_type varchar(500) comment 'JAVA类型', + java_field varchar(200) comment 'JAVA字段名', + is_pk char(1) comment '是否主键(1是)', + is_increment char(1) comment '是否自增(1是)', + is_required char(1) comment '是否必填(1是)', + is_insert char(1) comment '是否为插入字段(1是)', + is_edit char(1) comment '是否编辑字段(1是)', + is_list char(1) comment '是否列表字段(1是)', + is_query char(1) comment '是否查询字段(1是)', + query_type varchar(200) default 'EQ' comment '查询方式(等于、不等于、大于、小于、范围)', + html_type varchar(200) comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', + dict_type varchar(200) default '' comment '字典类型', + sort int comment '排序', + create_by varchar(64) default '' comment '创建者', + create_time datetime comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime comment '更新时间', + primary key (column_id) +) engine=innodb auto_increment=1 comment = '代码生成业务表字段'; diff --git a/muyu-ruoyi-server/sql/ry_config_20231204.sql b/muyu-ruoyi-server/sql/ry_config_20231204.sql new file mode 100644 index 0000000..1b423ed --- /dev/null +++ b/muyu-ruoyi-server/sql/ry_config_20231204.sql @@ -0,0 +1,219 @@ +DROP DATABASE IF EXISTS `ry-config`; + +CREATE DATABASE `ry-config` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +USE `ry-config`; + +/******************************************/ +/* 表名称 = config_info */ +/******************************************/ +CREATE TABLE `config_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(255) DEFAULT NULL, + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `app_name` varchar(128) DEFAULT NULL, + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `c_desc` varchar(256) DEFAULT NULL, + `c_use` varchar(64) DEFAULT NULL, + `effect` varchar(64) DEFAULT NULL, + `type` varchar(64) DEFAULT NULL, + `c_schema` text, + `encrypted_data_key` text COMMENT '秘钥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info'; + +insert into config_info(id, data_id, group_id, content, md5, gmt_create, gmt_modified, src_user, src_ip, app_name, tenant_id, c_desc, c_use, effect, type, c_schema, encrypted_data_key) values +(1,'application-dev.yml','DEFAULT_GROUP','spring:\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\n mvc:\n pathmatch:\n matching-strategy: ant_path_matcher\n\n# feign 配置\nfeign:\n sentinel:\n enabled: true\n okhttp:\n enabled: true\n httpclient:\n enabled: false\n client:\n config:\n default:\n connectTimeout: 10000\n readTimeout: 10000\n compression:\n request:\n enabled: true\n min-request-size: 8192\n response:\n enabled: true\n\n# 暴露监控端点\nmanagement:\n endpoints:\n web:\n exposure:\n include: \'*\'\n','58dde4e3760499d3bac2d77a3a1e9018','2020-05-20 12:00:00','2023-12-04 08:08:23','nacos','0:0:0:0:0:0:0:1','','','通用配置','null','null','yaml','',''), +(2,'ruoyi-gateway-dev.yml','DEFAULT_GROUP','spring:\n redis:\n host: localhost\n port: 6379\n password:\n cloud:\n gateway:\n discovery:\n locator:\n lowerCaseServiceId: true\n enabled: true\n routes:\n # 认证中心\n - id: ruoyi-auth\n uri: lb://ruoyi-auth\n predicates:\n - Path=/auth/**\n filters:\n # 验证码处理\n - CacheRequestFilter\n - ValidateCodeFilter\n - StripPrefix=1\n # 代码生成\n - id: ruoyi-gen\n uri: lb://ruoyi-gen\n predicates:\n - Path=/code/**\n filters:\n - StripPrefix=1\n # 定时任务\n - id: ruoyi-job\n uri: lb://ruoyi-job\n predicates:\n - Path=/schedule/**\n filters:\n - StripPrefix=1\n # 系统模块\n - id: ruoyi-system\n uri: lb://ruoyi-system\n predicates:\n - Path=/system/**\n filters:\n - StripPrefix=1\n # 文件服务\n - id: ruoyi-file\n uri: lb://ruoyi-file\n predicates:\n - Path=/file/**\n filters:\n - StripPrefix=1\n\n# 安全配置\nsecurity:\n # 验证码\n captcha:\n enabled: true\n type: math\n # 防止XSS攻击\n xss:\n enabled: true\n excludeUrls:\n - /system/notice\n # 不校验白名单\n ignore:\n whites:\n - /auth/logout\n - /auth/login\n - /auth/register\n - /*/v2/api-docs\n - /csrf\n','57cec5abd0e0a6b77d853750344a9dc0','2020-05-14 14:17:55','2022-09-29 02:48:32','nacos','0:0:0:0:0:0:0:1','','','网关模块','null','null','yaml','',''), +(3,'ruoyi-auth-dev.yml','DEFAULT_GROUP','spring:\n redis:\n host: localhost\n port: 6379\n password:\n','8bd9dada9a94822feeab40de55efced6','2020-11-20 00:00:00','2022-09-29 02:48:42','nacos','0:0:0:0:0:0:0:1','','','认证中心','null','null','yaml','',''), +(4,'ruoyi-monitor-dev.yml','DEFAULT_GROUP','# spring\nspring:\n security:\n user:\n name: ruoyi\n password: 123456\n boot:\n admin:\n ui:\n title: 若依服务状态监控\n','6f122fd2bfb8d45f858e7d6529a9cd44','2020-11-20 00:00:00','2022-09-29 02:48:54','nacos','0:0:0:0:0:0:0:1','','','监控中心','null','null','yaml','',''), +(5,'ruoyi-system-dev.yml','DEFAULT_GROUP','# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n connectTimeout: 30000\n socketTimeout: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n # 主库数据源\n master:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n # 从库数据源\n # slave:\n # username: \n # password: \n # url: \n # driver-class-name: \n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.system\n # 配置mapper的扫描,找到所有的mapper.xml映射文件\n mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n title: 系统模块接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip','00678c89684ec0b825cb9b71e032db64','2020-11-20 00:00:00','2023-12-04 07:51:28','nacos','0:0:0:0:0:0:0:1','','','系统模块','null','null','yaml','',''), +(6,'ruoyi-gen-dev.yml','DEFAULT_GROUP','# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.gen.domain\n # 配置mapper的扫描,找到所有的mapper.xml映射文件\n mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n title: 代码生成接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip\n\n# 代码生成\ngen:\n # 作者\n author: ruoyi\n # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool\n packageName: com.ruoyi.system\n # 自动去除表前缀,默认是false\n autoRemovePre: false\n # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)\n tablePrefix: sys_\n','eb592420b3fceae1402881887b8a6a0d','2020-11-20 00:00:00','2022-09-29 02:49:42','nacos','0:0:0:0:0:0:0:1','','','代码生成','null','null','yaml','',''), +(7,'ruoyi-job-dev.yml','DEFAULT_GROUP','# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password: \n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.job.domain\n # 配置mapper的扫描,找到所有的mapper.xml映射文件\n mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n title: 定时任务接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip\n','edcf0e3fe13fea07b4ec08b1088f30b3','2020-11-20 00:00:00','2022-09-29 02:50:50','nacos','0:0:0:0:0:0:0:1','','','定时任务','null','null','yaml','',''), +(8,'ruoyi-file-dev.yml','DEFAULT_GROUP','# 本地文件上传 \r\nfile:\r\n domain: http://127.0.0.1:9300\r\n path: D:/ruoyi/uploadPath\r\n prefix: /statics\r\n\r\n# FastDFS配置\r\nfdfs:\r\n domain: http://8.129.231.12\r\n soTimeout: 3000\r\n connectTimeout: 2000\r\n trackerList: 8.129.231.12:22122\r\n\r\n# Minio配置\r\nminio:\r\n url: http://8.129.231.12:9000\r\n accessKey: minioadmin\r\n secretKey: minioadmin\r\n bucketName: test','5382b93f3d8059d6068c0501fdd41195','2020-11-20 00:00:00','2020-12-21 21:01:59',NULL,'0:0:0:0:0:0:0:1','','','文件服务','null','null','yaml',NULL,''), +(9,'sentinel-ruoyi-gateway','DEFAULT_GROUP','[\r\n {\r\n \"resource\": \"ruoyi-auth\",\r\n \"count\": 500,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n },\r\n {\r\n \"resource\": \"ruoyi-system\",\r\n \"count\": 1000,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n },\r\n {\r\n \"resource\": \"ruoyi-gen\",\r\n \"count\": 200,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n },\r\n {\r\n \"resource\": \"ruoyi-job\",\r\n \"count\": 300,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n }\r\n]','9f3a3069261598f74220bc47958ec252','2020-11-20 00:00:00','2020-11-20 00:00:00',NULL,'0:0:0:0:0:0:0:1','','','限流策略','null','null','json',NULL,''); + + +/******************************************/ +/* 表名称 = config_info_aggr */ +/******************************************/ +CREATE TABLE `config_info_aggr` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(255) NOT NULL COMMENT 'group_id', + `datum_id` varchar(255) NOT NULL COMMENT 'datum_id', + `content` longtext NOT NULL COMMENT '内容', + `gmt_modified` datetime NOT NULL COMMENT '修改时间', + `app_name` varchar(128) DEFAULT NULL, + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段'; + + +/******************************************/ +/* 表名称 = config_info_beta */ +/******************************************/ +CREATE TABLE `config_info_beta` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `encrypted_data_key` text COMMENT '秘钥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta'; + +/******************************************/ +/* 表名称 = config_info_tag */ +/******************************************/ +CREATE TABLE `config_info_tag` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', + `tag_id` varchar(128) NOT NULL COMMENT 'tag_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag'; + +/******************************************/ +/* 表名称 = config_tags_relation */ +/******************************************/ +CREATE TABLE `config_tags_relation` ( + `id` bigint(20) NOT NULL COMMENT 'id', + `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', + `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', + `nid` bigint(20) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`nid`), + UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation'; + +/******************************************/ +/* 表名称 = group_capacity */ +/******************************************/ +CREATE TABLE `group_capacity` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', + `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', + `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', + `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', + `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_group_id` (`group_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表'; + +/******************************************/ +/* 表名称 = his_config_info */ +/******************************************/ +CREATE TABLE `his_config_info` ( + `id` bigint(64) unsigned NOT NULL, + `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `data_id` varchar(255) NOT NULL, + `group_id` varchar(128) NOT NULL, + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL, + `md5` varchar(32) DEFAULT NULL, + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `src_user` text, + `src_ip` varchar(50) DEFAULT NULL, + `op_type` char(10) DEFAULT NULL, + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `encrypted_data_key` text COMMENT '秘钥', + PRIMARY KEY (`nid`), + KEY `idx_gmt_create` (`gmt_create`), + KEY `idx_gmt_modified` (`gmt_modified`), + KEY `idx_did` (`data_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造'; + + +/******************************************/ +/* 数据库全名 = nacos_config */ +/* 表名称 = tenant_capacity */ +/******************************************/ +CREATE TABLE `tenant_capacity` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', + `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', + `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', + `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', + `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表'; + + +CREATE TABLE `tenant_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `kp` varchar(128) NOT NULL COMMENT 'kp', + `tenant_id` varchar(128) default '' COMMENT 'tenant_id', + `tenant_name` varchar(128) default '' COMMENT 'tenant_name', + `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', + `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', + `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', + `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info'; + +CREATE TABLE `users` ( + `username` varchar(50) NOT NULL PRIMARY KEY, + `password` varchar(500) NOT NULL, + `enabled` boolean NOT NULL +); + +CREATE TABLE `roles` ( + `username` varchar(50) NOT NULL, + `role` varchar(50) NOT NULL, + UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE +); + +CREATE TABLE `permissions` ( + `role` varchar(50) NOT NULL, + `resource` varchar(255) NOT NULL, + `action` varchar(8) NOT NULL, + UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE +); + +INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); + +INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN'); diff --git a/muyu-ruoyi-server/sql/ry_seata_20210128.sql b/muyu-ruoyi-server/sql/ry_seata_20210128.sql new file mode 100644 index 0000000..41163c1 --- /dev/null +++ b/muyu-ruoyi-server/sql/ry_seata_20210128.sql @@ -0,0 +1,80 @@ +DROP DATABASE IF EXISTS `ry-seata`; + +CREATE DATABASE `ry-seata` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +USE `ry-seata`; + +-- -------------------------------- The script used when storeMode is 'db' -------------------------------- +-- the table to store GlobalSession data +CREATE TABLE IF NOT EXISTS `global_table` +( + `xid` VARCHAR(128) NOT NULL, + `transaction_id` BIGINT, + `status` TINYINT NOT NULL, + `application_id` VARCHAR(32), + `transaction_service_group` VARCHAR(32), + `transaction_name` VARCHAR(128), + `timeout` INT, + `begin_time` BIGINT, + `application_data` VARCHAR(2000), + `gmt_create` DATETIME, + `gmt_modified` DATETIME, + PRIMARY KEY (`xid`), + KEY `idx_gmt_modified_status` (`gmt_modified`, `status`), + KEY `idx_transaction_id` (`transaction_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4; + +-- the table to store BranchSession data +CREATE TABLE IF NOT EXISTS `branch_table` +( + `branch_id` BIGINT NOT NULL, + `xid` VARCHAR(128) NOT NULL, + `transaction_id` BIGINT, + `resource_group_id` VARCHAR(32), + `resource_id` VARCHAR(256), + `branch_type` VARCHAR(8), + `status` TINYINT, + `client_id` VARCHAR(64), + `application_data` VARCHAR(2000), + `gmt_create` DATETIME(6), + `gmt_modified` DATETIME(6), + PRIMARY KEY (`branch_id`), + KEY `idx_xid` (`xid`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4; + +-- the table to store lock data +CREATE TABLE IF NOT EXISTS `lock_table` +( + `row_key` VARCHAR(128) NOT NULL, + `xid` VARCHAR(96), + `transaction_id` BIGINT, + `branch_id` BIGINT NOT NULL, + `resource_id` VARCHAR(256), + `table_name` VARCHAR(32), + `pk` VARCHAR(36), + `gmt_create` DATETIME, + `gmt_modified` DATETIME, + PRIMARY KEY (`row_key`), + KEY `idx_branch_id` (`branch_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4; + +-- for AT mode you must to init this sql for you business database. the seata server not need it. +CREATE TABLE IF NOT EXISTS `undo_log` +( + `branch_id` BIGINT(20) NOT NULL COMMENT 'branch transaction id', + `xid` VARCHAR(100) NOT NULL COMMENT 'global transaction id', + `context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization', + `rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info', + `log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status', + `log_created` DATETIME(6) NOT NULL COMMENT 'create datetime', + `log_modified` DATETIME(6) NOT NULL COMMENT 'modify datetime', + UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 1 + DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table'; \ No newline at end of file diff --git a/ruoyi-product-cache.iml b/ruoyi-product-cache.iml new file mode 100644 index 0000000..d5f7a34 --- /dev/null +++ b/ruoyi-product-cache.iml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file