From 6f276de76fc1a658473d1981db9a9189eed5793d Mon Sep 17 00:00:00 2001 From: alwaysfrin <39822157+alwaysfrin@users.noreply.github.com> Date: Mon, 10 Dec 2018 17:04:58 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=BB=93=E6=9E=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 21 + .idea/encodings.xml | 9 + .idea/libraries/Maven__antlr_antlr_2_7_7.xml | 13 + .../Maven__com_alibaba_fastjson_1_2_8.xml | 13 + .../Maven__com_fasterxml_classmate_1_3_4.xml | 13 + ...rxml_jackson_core_jackson_annotations_2_9_0.xml | 13 + ...m_fasterxml_jackson_core_jackson_core_2_9_6.xml | 13 + ...sterxml_jackson_core_jackson_databind_2_9_6.xml | 13 + ...ackson_datatype_jackson_datatype_jdk8_2_9_6.xml | 13 + ...kson_datatype_jackson_datatype_jsr310_2_9_6.xml | 13 + ...module_jackson_module_parameter_names_2_9_6.xml | 13 + .../Maven__com_google_guava_guava_20_0.xml | 13 + .../Maven__com_jayway_jsonpath_json_path_2_4_0.xml | 13 + ...en__com_mchange_mchange_commons_java_0_2_11.xml | 13 + .../Maven__com_rabbitmq_amqp_client_5_1_2.xml | 13 + ...al_google_android_json_0_0_20131108_vaadin1.xml | 13 + .../libraries/Maven__com_zaxxer_HikariCP_2_7_9.xml | 13 + ...__commons_beanutils_commons_beanutils_1_9_3.xml | 13 + .../Maven__commons_codec_commons_codec_1_11.xml | 13 + ...mmons_collections_commons_collections_3_2_2.xml | 13 + .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml | 13 + ...latform_i3plus_platform_common_1_0_SNAPSHOT.xml | 13 + ...__i3plus_pojo_i3plus_pojo_base_1_0_SNAPSHOT.xml | 13 + ...n__i3plus_pojo_i3plus_pojo_mes_1_0_SNAPSHOT.xml | 13 + ..._i3plus_pojo_i3plus_pojo_model_1_0_SNAPSHOT.xml | 13 + ...plus_pojo_i3plus_pojo_platform_1_0_SNAPSHOT.xml | 13 + ...n__i3plus_pojo_i3plus_pojo_wms_1_0_SNAPSHOT.xml | 13 + ..._framework_impp_framework_boot_1_0_SNAPSHOT.xml | 13 + ...aven__io_lettuce_lettuce_core_5_0_4_RELEASE.xml | 13 + .../Maven__io_netty_netty_buffer_4_1_25_Final.xml | 13 + .../Maven__io_netty_netty_codec_4_1_25_Final.xml | 13 + .../Maven__io_netty_netty_common_4_1_25_Final.xml | 13 + .../Maven__io_netty_netty_handler_4_1_25_Final.xml | 13 + ...Maven__io_netty_netty_resolver_4_1_25_Final.xml | 13 + ...aven__io_netty_netty_transport_4_1_25_Final.xml | 13 + ...o_projectreactor_reactor_core_3_1_8_RELEASE.xml | 13 + .../Maven__io_springfox_springfox_core_2_9_2.xml | 13 + .../Maven__io_springfox_springfox_schema_2_9_2.xml | 13 + .../Maven__io_springfox_springfox_spi_2_9_2.xml | 13 + ...en__io_springfox_springfox_spring_web_2_9_2.xml | 13 + ...aven__io_springfox_springfox_swagger2_2_9_2.xml | 13 + ...io_springfox_springfox_swagger_common_2_9_2.xml | 13 + ...en__io_springfox_springfox_swagger_ui_2_9_2.xml | 13 + ...aven__io_swagger_swagger_annotations_1_5_20.xml | 13 + .../Maven__io_swagger_swagger_models_1_5_20.xml | 13 + ...javax_annotation_javax_annotation_api_1_3_2.xml | 13 + ...javax_transaction_javax_transaction_api_1_2.xml | 13 + ...javax_validation_validation_api_2_0_1_Final.xml | 13 + .idea/libraries/Maven__junit_junit_4_12.xml | 13 + .../Maven__mysql_mysql_connector_java_5_1_39.xml | 13 + .../Maven__net_bytebuddy_byte_buddy_1_7_11.xml | 13 + ...aven__net_bytebuddy_byte_buddy_agent_1_7_11.xml | 13 + .../Maven__net_minidev_accessors_smart_1_2.xml | 13 + .../Maven__net_minidev_json_smart_2_3.xml | 13 + .../Maven__net_sf_ehcache_ehcache_core_2_6_11.xml | 13 + ...ven__org_apache_commons_commons_lang3_3_8_1.xml | 13 + ...ven__org_apache_commons_commons_pool2_2_5_0.xml | 13 + ..._org_apache_httpcomponents_httpclient_4_5_5.xml | 13 + ...n__org_apache_httpcomponents_httpcore_4_4_9.xml | 13 + ...__org_apache_logging_log4j_log4j_api_2_10_0.xml | 13 + ..._org_apache_logging_log4j_log4j_core_2_10_0.xml | 13 + ...__org_apache_logging_log4j_log4j_jul_2_10_0.xml | 13 + ...pache_logging_log4j_log4j_slf4j_impl_2_10_0.xml | 13 + .../Maven__org_apache_shiro_shiro_cache_1_4_0.xml | 13 + ...n__org_apache_shiro_shiro_config_core_1_4_0.xml | 13 + ...n__org_apache_shiro_shiro_config_ogdl_1_4_0.xml | 13 + .../Maven__org_apache_shiro_shiro_core_1_4_0.xml | 13 + ..._org_apache_shiro_shiro_crypto_cipher_1_4_0.xml | 13 + ...n__org_apache_shiro_shiro_crypto_core_1_4_0.xml | 13 + ...n__org_apache_shiro_shiro_crypto_hash_1_4_0.xml | 13 + ...Maven__org_apache_shiro_shiro_ehcache_1_4_0.xml | 13 + .../Maven__org_apache_shiro_shiro_event_1_4_0.xml | 13 + .../Maven__org_apache_shiro_shiro_lang_1_4_0.xml | 13 + .../Maven__org_apache_shiro_shiro_spring_1_4_0.xml | 13 + .../Maven__org_apache_shiro_shiro_web_1_4_0.xml | 13 + ...pache_tomcat_embed_tomcat_embed_core_8_5_31.xml | 13 + ..._apache_tomcat_embed_tomcat_embed_el_8_5_31.xml | 13 + ...che_tomcat_embed_tomcat_embed_jasper_8_5_31.xml | 13 + ..._tomcat_embed_tomcat_embed_websocket_8_5_31.xml | 13 + ...apache_tomcat_tomcat_annotations_api_8_5_31.xml | 13 + .../Maven__org_aspectj_aspectjweaver_1_8_13.xml | 13 + .../Maven__org_assertj_assertj_core_3_9_1.xml | 13 + ...Maven__org_csource_fastdfs_client_java_1_27.xml | 13 + .../Maven__org_eclipse_jdt_ecj_3_12_3.xml | 13 + .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 13 + .../Maven__org_hamcrest_hamcrest_library_1_3.xml | 13 + ...n_hibernate_commons_annotations_5_0_1_Final.xml | 13 + ...__org_hibernate_hibernate_core_5_2_17_Final.xml | 13 + ...rsistence_hibernate_jpa_2_1_api_1_0_2_Final.xml | 13 + ..._validator_hibernate_validator_6_0_10_Final.xml | 13 + .../Maven__org_javassist_javassist_3_22_0_GA.xml | 13 + .../Maven__org_jboss_jandex_2_0_3_Final.xml | 13 + ...org_jboss_logging_jboss_logging_3_3_2_Final.xml | 13 + .../Maven__org_mapstruct_mapstruct_1_2_0_Final.xml | 13 + .../Maven__org_mockito_mockito_core_2_15_0.xml | 13 + .idea/libraries/Maven__org_mongodb_bson_3_6_4.xml | 13 + .../Maven__org_mongodb_mongodb_driver_3_6_4.xml | 13 + ...aven__org_mongodb_mongodb_driver_core_3_6_4.xml | 13 + .../Maven__org_objenesis_objenesis_2_6.xml | 13 + .idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml | 13 + .../Maven__org_projectlombok_lombok_1_16_22.xml | 13 + .../Maven__org_quartz_scheduler_quartz_2_3_0.xml | 13 + ...ven__org_quartz_scheduler_quartz_jobs_2_3_0.xml | 13 + ..._org_reactivestreams_reactive_streams_1_0_2.xml | 13 + .../Maven__org_skyscreamer_jsonassert_1_5_0.xml | 13 + .../Maven__org_slf4j_jul_to_slf4j_1_7_25.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_25.xml | 13 + ...ingframework_amqp_spring_amqp_2_0_4_RELEASE.xml | 13 + ...gframework_amqp_spring_rabbit_2_0_4_RELEASE.xml | 13 + ...ingframework_boot_spring_boot_2_0_3_RELEASE.xml | 13 + ...oot_spring_boot_autoconfigure_2_0_3_RELEASE.xml | 13 + ...work_boot_spring_boot_starter_2_0_3_RELEASE.xml | 13 + ...boot_spring_boot_starter_amqp_2_0_3_RELEASE.xml | 13 + ..._boot_spring_boot_starter_aop_2_0_3_RELEASE.xml | 13 + ..._spring_boot_starter_data_jpa_2_0_3_RELEASE.xml | 13 + ...ing_boot_starter_data_mongodb_2_0_3_RELEASE.xml | 13 + ...pring_boot_starter_data_redis_2_0_3_RELEASE.xml | 13 + ...boot_spring_boot_starter_jdbc_2_0_3_RELEASE.xml | 13 + ...boot_spring_boot_starter_json_2_0_3_RELEASE.xml | 13 + ...ot_spring_boot_starter_log4j2_2_0_3_RELEASE.xml | 13 + ...boot_spring_boot_starter_test_2_0_3_RELEASE.xml | 13 + ...ot_spring_boot_starter_tomcat_2_0_3_RELEASE.xml | 13 + ..._boot_spring_boot_starter_web_2_0_3_RELEASE.xml | 13 + ...amework_boot_spring_boot_test_2_0_3_RELEASE.xml | 13 + ...pring_boot_test_autoconfigure_2_0_3_RELEASE.xml | 13 + ...work_data_spring_data_commons_2_0_8_RELEASE.xml | 13 + ...ramework_data_spring_data_jpa_2_0_8_RELEASE.xml | 13 + ...ork_data_spring_data_keyvalue_2_0_8_RELEASE.xml | 13 + ...work_data_spring_data_mongodb_2_0_8_RELEASE.xml | 13 + ...mework_data_spring_data_redis_2_0_8_RELEASE.xml | 13 + ...ork_plugin_spring_plugin_core_1_2_0_RELEASE.xml | 13 + ...plugin_spring_plugin_metadata_1_2_0_RELEASE.xml | 13 + ...gframework_retry_spring_retry_1_2_2_RELEASE.xml | 13 + ...rg_springframework_spring_aop_5_0_7_RELEASE.xml | 13 + ...pringframework_spring_aspects_5_0_7_RELEASE.xml | 13 + ..._springframework_spring_beans_5_0_7_RELEASE.xml | 13 + ...pringframework_spring_context_5_0_7_RELEASE.xml | 13 + ...mework_spring_context_support_5_0_7_RELEASE.xml | 13 + ...g_springframework_spring_core_5_0_7_RELEASE.xml | 13 + ...ngframework_spring_expression_5_0_7_RELEASE.xml | 13 + ...rg_springframework_spring_jcl_5_0_7_RELEASE.xml | 13 + ...g_springframework_spring_jdbc_5_0_7_RELEASE.xml | 13 + ...ingframework_spring_messaging_5_0_7_RELEASE.xml | 13 + ...rg_springframework_spring_orm_5_0_7_RELEASE.xml | 13 + ...rg_springframework_spring_oxm_5_0_7_RELEASE.xml | 13 + ...g_springframework_spring_test_5_0_7_RELEASE.xml | 13 + ...org_springframework_spring_tx_5_0_7_RELEASE.xml | 13 + ...rg_springframework_spring_web_5_0_7_RELEASE.xml | 13 + ...springframework_spring_webmvc_5_0_7_RELEASE.xml | 13 + ...ingframework_spring_websocket_5_0_7_RELEASE.xml | 13 + .../Maven__org_xmlunit_xmlunit_core_2_5_1.xml | 13 + .idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml | 13 + .../libraries/Maven__redis_clients_jedis_2_9_0.xml | 13 + .idea/misc.xml | 13 + .idea/modules.xml | 11 + .idea/vcs.xml | 6 + .idea/workspace.xml | 2677 ++++++++++++++++++++ i3plus-core.iml | 12 + modules/i3plus-core-api/i3plus-core-api.iml | 102 + .../i3plus-core-apiservice.iml | 293 +++ .../apiservice/controller/DemoCloudController.java | 127 + 161 files changed, 5234 insertions(+) create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/libraries/Maven__antlr_antlr_2_7_7.xml create mode 100644 .idea/libraries/Maven__com_alibaba_fastjson_1_2_8.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_6.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_6.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_6.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_6.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_6.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_20_0.xml create mode 100644 .idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml create mode 100644 .idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_11.xml create mode 100644 .idea/libraries/Maven__com_rabbitmq_amqp_client_5_1_2.xml create mode 100644 .idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml create mode 100644 .idea/libraries/Maven__com_zaxxer_HikariCP_2_7_9.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_11.xml create mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml create mode 100644 .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml create mode 100644 .idea/libraries/Maven__i3plus_platform_i3plus_platform_common_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__i3plus_pojo_i3plus_pojo_base_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__i3plus_pojo_i3plus_pojo_mes_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__i3plus_pojo_i3plus_pojo_model_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__i3plus_pojo_i3plus_pojo_platform_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__i3plus_pojo_i3plus_pojo_wms_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__impp_framework_impp_framework_boot_1_0_SNAPSHOT.xml create mode 100644 .idea/libraries/Maven__io_lettuce_lettuce_core_5_0_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_buffer_4_1_25_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_4_1_25_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_common_4_1_25_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_4_1_25_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_4_1_25_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_4_1_25_Final.xml create mode 100644 .idea/libraries/Maven__io_projectreactor_reactor_core_3_1_8_RELEASE.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml create mode 100644 .idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml create mode 100644 .idea/libraries/Maven__io_swagger_swagger_models_1_5_20.xml create mode 100644 .idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml create mode 100644 .idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml create mode 100644 .idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml create mode 100644 .idea/libraries/Maven__junit_junit_4_12.xml create mode 100644 .idea/libraries/Maven__mysql_mysql_connector_java_5_1_39.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml create mode 100644 .idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml create mode 100644 .idea/libraries/Maven__net_minidev_json_smart_2_3.xml create mode 100644 .idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_6_11.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_pool2_2_5_0.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_5.xml create mode 100644 .idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_9.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_cache_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_config_core_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_config_ogdl_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_core_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_crypto_cipher_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_crypto_core_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_crypto_hash_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_ehcache_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_event_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_lang_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_spring_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_shiro_shiro_web_1_4_0.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml create mode 100644 .idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml create mode 100644 .idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml create mode 100644 .idea/libraries/Maven__org_csource_fastdfs_client_java_1_27.xml create mode 100644 .idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml create mode 100644 .idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_core_5_2_17_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_10_Final.xml create mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_22_0_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_jandex_2_0_3_Final.xml create mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml create mode 100644 .idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml create mode 100644 .idea/libraries/Maven__org_mongodb_bson_3_6_4.xml create mode 100644 .idea/libraries/Maven__org_mongodb_mongodb_driver_3_6_4.xml create mode 100644 .idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_6_4.xml create mode 100644 .idea/libraries/Maven__org_objenesis_objenesis_2_6.xml create mode 100644 .idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml create mode 100644 .idea/libraries/Maven__org_projectlombok_lombok_1_16_22.xml create mode 100644 .idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_0.xml create mode 100644 .idea/libraries/Maven__org_quartz_scheduler_quartz_jobs_2_3_0.xml create mode 100644 .idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml create mode 100644 .idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml create mode 100644 .idea/libraries/Maven__org_springframework_amqp_spring_amqp_2_0_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_amqp_spring_rabbit_2_0_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_amqp_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_3_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_commons_2_0_8_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_jpa_2_0_8_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_0_8_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_0_8_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_data_spring_data_redis_2_0_8_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_2_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aspects_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_support_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jcl_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jdbc_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_messaging_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_orm_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_oxm_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_test_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_tx_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_web_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_websocket_5_0_7_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml create mode 100644 .idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml create mode 100644 .idea/libraries/Maven__redis_clients_jedis_2_9_0.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 i3plus-core.iml create mode 100644 modules/i3plus-core-api/i3plus-core-api.iml create mode 100644 modules/i3plus-core-apiservice/i3plus-core-apiservice.iml create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..8c9324c --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..0f9ce45 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml new file mode 100644 index 0000000..b8d93d8 --- /dev/null +++ b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_alibaba_fastjson_1_2_8.xml b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_8.xml new file mode 100644 index 0000000..9b223e0 --- /dev/null +++ b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml new file mode 100644 index 0000000..33c30b4 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml new file mode 100644 index 0000000..06441f4 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_6.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_6.xml new file mode 100644 index 0000000..eebe10d --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_6.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_6.xml new file mode 100644 index 0000000..51087da --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_6.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_9_6.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_6.xml new file mode 100644 index 0000000..fa50d95 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_6.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_9_6.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_6.xml new file mode 100644 index 0000000..7e20e35 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_6.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_9_6.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_6.xml new file mode 100644 index 0000000..345adf8 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_20_0.xml b/.idea/libraries/Maven__com_google_guava_guava_20_0.xml new file mode 100644 index 0000000..c5bd322 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_20_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml new file mode 100644 index 0000000..f19f6eb --- /dev/null +++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_11.xml b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_11.xml new file mode 100644 index 0000000..dbd8483 --- /dev/null +++ b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_rabbitmq_amqp_client_5_1_2.xml b/.idea/libraries/Maven__com_rabbitmq_amqp_client_5_1_2.xml new file mode 100644 index 0000000..ea07fce --- /dev/null +++ b/.idea/libraries/Maven__com_rabbitmq_amqp_client_5_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml new file mode 100644 index 0000000..b8581a6 --- /dev/null +++ b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_zaxxer_HikariCP_2_7_9.xml b/.idea/libraries/Maven__com_zaxxer_HikariCP_2_7_9.xml new file mode 100644 index 0000000..6d6865c --- /dev/null +++ b/.idea/libraries/Maven__com_zaxxer_HikariCP_2_7_9.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..687a60e --- /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_11.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml new file mode 100644 index 0000000..4c8ff54 --- /dev/null +++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_11.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..13afda2 --- /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__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml new file mode 100644 index 0000000..14681ee --- /dev/null +++ b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__i3plus_platform_i3plus_platform_common_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__i3plus_platform_i3plus_platform_common_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..7b3d4d2 --- /dev/null +++ b/.idea/libraries/Maven__i3plus_platform_i3plus_platform_common_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_base_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_base_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..1807124 --- /dev/null +++ b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_base_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_mes_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_mes_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..66115c3 --- /dev/null +++ b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_mes_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_model_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_model_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..875e7c3 --- /dev/null +++ b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_model_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_platform_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_platform_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..262a850 --- /dev/null +++ b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_platform_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_wms_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_wms_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..c6cd544 --- /dev/null +++ b/.idea/libraries/Maven__i3plus_pojo_i3plus_pojo_wms_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__impp_framework_impp_framework_boot_1_0_SNAPSHOT.xml b/.idea/libraries/Maven__impp_framework_impp_framework_boot_1_0_SNAPSHOT.xml new file mode 100644 index 0000000..c5ed4d7 --- /dev/null +++ b/.idea/libraries/Maven__impp_framework_impp_framework_boot_1_0_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_lettuce_lettuce_core_5_0_4_RELEASE.xml b/.idea/libraries/Maven__io_lettuce_lettuce_core_5_0_4_RELEASE.xml new file mode 100644 index 0000000..4b5e592 --- /dev/null +++ b/.idea/libraries/Maven__io_lettuce_lettuce_core_5_0_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_25_Final.xml b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_25_Final.xml new file mode 100644 index 0000000..8174ce4 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_25_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_4_1_25_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_4_1_25_Final.xml new file mode 100644 index 0000000..72440e7 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_4_1_25_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_common_4_1_25_Final.xml b/.idea/libraries/Maven__io_netty_netty_common_4_1_25_Final.xml new file mode 100644 index 0000000..9bf4c51 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_common_4_1_25_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_4_1_25_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_4_1_25_Final.xml new file mode 100644 index 0000000..747450b --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_4_1_25_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_4_1_25_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_25_Final.xml new file mode 100644 index 0000000..34d4fb3 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_25_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_4_1_25_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_4_1_25_Final.xml new file mode 100644 index 0000000..2a0e6a1 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_4_1_25_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_projectreactor_reactor_core_3_1_8_RELEASE.xml b/.idea/libraries/Maven__io_projectreactor_reactor_core_3_1_8_RELEASE.xml new file mode 100644 index 0000000..683cbec --- /dev/null +++ b/.idea/libraries/Maven__io_projectreactor_reactor_core_3_1_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml new file mode 100644 index 0000000..03588dc --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml new file mode 100644 index 0000000..4a47148 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml new file mode 100644 index 0000000..f934649 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml new file mode 100644 index 0000000..7898a19 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml new file mode 100644 index 0000000..4ed7d0d --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml new file mode 100644 index 0000000..c40ef9f --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml b/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml new file mode 100644 index 0000000..0700f01 --- /dev/null +++ b/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml b/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml new file mode 100644 index 0000000..1c4a621 --- /dev/null +++ b/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_swagger_swagger_models_1_5_20.xml b/.idea/libraries/Maven__io_swagger_swagger_models_1_5_20.xml new file mode 100644 index 0000000..395508f --- /dev/null +++ b/.idea/libraries/Maven__io_swagger_swagger_models_1_5_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml b/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml new file mode 100644 index 0000000..e74f3ab --- /dev/null +++ b/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml b/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml new file mode 100644 index 0000000..5f032d2 --- /dev/null +++ b/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml b/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml new file mode 100644 index 0000000..6978c0b --- /dev/null +++ b/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml new file mode 100644 index 0000000..d411041 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_39.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_39.xml new file mode 100644 index 0000000..18e6ec9 --- /dev/null +++ b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_39.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml new file mode 100644 index 0000000..ee623f1 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml new file mode 100644 index 0000000..a72c9a3 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml new file mode 100644 index 0000000..b3d3858 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml new file mode 100644 index 0000000..1083023 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_6_11.xml b/.idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_6_11.xml new file mode 100644 index 0000000..1c71163 --- /dev/null +++ b/.idea/libraries/Maven__net_sf_ehcache_ehcache_core_2_6_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml new file mode 100644 index 0000000..33b78e9 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_5_0.xml b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_5_0.xml new file mode 100644 index 0000000..440e770 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_5.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_5.xml new file mode 100644 index 0000000..e4eb38b --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_9.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_9.xml new file mode 100644 index 0000000..7f14d45 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_9.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml new file mode 100644 index 0000000..cbe5ca7 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_10_0.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_10_0.xml new file mode 100644 index 0000000..f061a60 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_10_0.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_10_0.xml new file mode 100644 index 0000000..b6e0a9e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_jul_2_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_10_0.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_10_0.xml new file mode 100644 index 0000000..9a53275 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_cache_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_cache_1_4_0.xml new file mode 100644 index 0000000..ec3b15e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_cache_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_config_core_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_config_core_1_4_0.xml new file mode 100644 index 0000000..c460aba --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_config_core_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_config_ogdl_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_config_ogdl_1_4_0.xml new file mode 100644 index 0000000..1e28543 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_config_ogdl_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_core_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_core_1_4_0.xml new file mode 100644 index 0000000..19c39a1 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_core_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_cipher_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_cipher_1_4_0.xml new file mode 100644 index 0000000..c0b1b53 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_cipher_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_core_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_core_1_4_0.xml new file mode 100644 index 0000000..d7da59e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_core_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_hash_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_hash_1_4_0.xml new file mode 100644 index 0000000..3e3feaf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_hash_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_ehcache_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_ehcache_1_4_0.xml new file mode 100644 index 0000000..5137263 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_ehcache_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_event_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_event_1_4_0.xml new file mode 100644 index 0000000..0c26d31 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_event_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_lang_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_lang_1_4_0.xml new file mode 100644 index 0000000..d50067f --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_lang_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_spring_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_spring_1_4_0.xml new file mode 100644 index 0000000..e6235dc --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_spring_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_shiro_shiro_web_1_4_0.xml b/.idea/libraries/Maven__org_apache_shiro_shiro_web_1_4_0.xml new file mode 100644 index 0000000..9f0fcf1 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_shiro_shiro_web_1_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml new file mode 100644 index 0000000..a6693a2 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml new file mode 100644 index 0000000..bc00163 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml new file mode 100644 index 0000000..02ac6c9 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml new file mode 100644 index 0000000..a47a3be --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml new file mode 100644 index 0000000..3a59079 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml new file mode 100644 index 0000000..d46e30a --- /dev/null +++ b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml b/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml new file mode 100644 index 0000000..40adaaa --- /dev/null +++ b/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_csource_fastdfs_client_java_1_27.xml b/.idea/libraries/Maven__org_csource_fastdfs_client_java_1_27.xml new file mode 100644 index 0000000..976841b --- /dev/null +++ b/.idea/libraries/Maven__org_csource_fastdfs_client_java_1_27.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml b/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml new file mode 100644 index 0000000..96c4694 --- /dev/null +++ b/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..f58bbc1 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml new file mode 100644 index 0000000..78dbe45 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml new file mode 100644 index 0000000..ce34f42 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_core_5_2_17_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_core_5_2_17_Final.xml new file mode 100644 index 0000000..4f3cc1a --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_core_5_2_17_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml new file mode 100644 index 0000000..1d8ce40 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_10_Final.xml b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_10_Final.xml new file mode 100644 index 0000000..1e98da0 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_10_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_22_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_22_0_GA.xml new file mode 100644 index 0000000..ad65915 --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_22_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_jandex_2_0_3_Final.xml b/.idea/libraries/Maven__org_jboss_jandex_2_0_3_Final.xml new file mode 100644 index 0000000..b841e21 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_jandex_2_0_3_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml new file mode 100644 index 0000000..5f7dd01 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml b/.idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml new file mode 100644 index 0000000..87cb599 --- /dev/null +++ b/.idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml b/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml new file mode 100644 index 0000000..a742a6d --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mongodb_bson_3_6_4.xml b/.idea/libraries/Maven__org_mongodb_bson_3_6_4.xml new file mode 100644 index 0000000..50bf633 --- /dev/null +++ b/.idea/libraries/Maven__org_mongodb_bson_3_6_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mongodb_mongodb_driver_3_6_4.xml b/.idea/libraries/Maven__org_mongodb_mongodb_driver_3_6_4.xml new file mode 100644 index 0000000..95a778a --- /dev/null +++ b/.idea/libraries/Maven__org_mongodb_mongodb_driver_3_6_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_6_4.xml b/.idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_6_4.xml new file mode 100644 index 0000000..4eab0d2 --- /dev/null +++ b/.idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_6_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml new file mode 100644 index 0000000..af41e3b --- /dev/null +++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml new file mode 100644 index 0000000..0bf8cf2 --- /dev/null +++ b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_projectlombok_lombok_1_16_22.xml b/.idea/libraries/Maven__org_projectlombok_lombok_1_16_22.xml new file mode 100644 index 0000000..763e50d --- /dev/null +++ b/.idea/libraries/Maven__org_projectlombok_lombok_1_16_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_0.xml b/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_0.xml new file mode 100644 index 0000000..678f5ce --- /dev/null +++ b/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_quartz_scheduler_quartz_jobs_2_3_0.xml b/.idea/libraries/Maven__org_quartz_scheduler_quartz_jobs_2_3_0.xml new file mode 100644 index 0000000..79cda67 --- /dev/null +++ b/.idea/libraries/Maven__org_quartz_scheduler_quartz_jobs_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml new file mode 100644 index 0000000..457c7b7 --- /dev/null +++ b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml new file mode 100644 index 0000000..c4c54d6 --- /dev/null +++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml new file mode 100644 index 0000000..6073e53 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml new file mode 100644 index 0000000..20e8163 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_amqp_spring_amqp_2_0_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_amqp_spring_amqp_2_0_4_RELEASE.xml new file mode 100644 index 0000000..1b88378 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_amqp_spring_amqp_2_0_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_amqp_spring_rabbit_2_0_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_amqp_spring_rabbit_2_0_4_RELEASE.xml new file mode 100644 index 0000000..85633b0 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_amqp_spring_rabbit_2_0_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_3_RELEASE.xml new file mode 100644 index 0000000..c1bd1b7 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_3_RELEASE.xml new file mode 100644 index 0000000..aef774c --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_3_RELEASE.xml new file mode 100644 index 0000000..f4db168 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_amqp_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_amqp_2_0_3_RELEASE.xml new file mode 100644 index 0000000..a1f8d87 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_amqp_2_0_3_RELEASE.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_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_0_3_RELEASE.xml new file mode 100644 index 0000000..c155662 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_2_0_3_RELEASE.xml new file mode 100644 index 0000000..aef3a3b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_0_3_RELEASE.xml new file mode 100644 index 0000000..2345242 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_0_3_RELEASE.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_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_0_3_RELEASE.xml new file mode 100644 index 0000000..de4a803 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_0_3_RELEASE.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_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_0_3_RELEASE.xml new file mode 100644 index 0000000..52f6b1b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_0_3_RELEASE.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_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_3_RELEASE.xml new file mode 100644 index 0000000..42841e5 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_0_3_RELEASE.xml new file mode 100644 index 0000000..7258373 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_log4j2_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_3_RELEASE.xml new file mode 100644 index 0000000..2817f37 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_3_RELEASE.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_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_3_RELEASE.xml new file mode 100644 index 0000000..f6daaf6 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_3_RELEASE.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_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_3_RELEASE.xml new file mode 100644 index 0000000..614aadf --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_3_RELEASE.xml new file mode 100644 index 0000000..b631dbd --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_3_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_3_RELEASE.xml new file mode 100644 index 0000000..53d3728 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_3_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_0_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_0_8_RELEASE.xml new file mode 100644 index 0000000..b56afb7 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_0_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_2_0_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_2_0_8_RELEASE.xml new file mode 100644 index 0000000..fb677d1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_2_0_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_0_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_0_8_RELEASE.xml new file mode 100644 index 0000000..c2324f8 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_0_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_0_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_0_8_RELEASE.xml new file mode 100644 index 0000000..f4fc5bc --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_0_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_0_8_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_0_8_RELEASE.xml new file mode 100644 index 0000000..dae62ec --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_0_8_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml new file mode 100644 index 0000000..fbc0452 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_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_1_2_0_RELEASE.xml b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml new file mode 100644 index 0000000..7e6f096 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_2_RELEASE.xml new file mode 100644 index 0000000..1b2836b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_2_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_5_0_7_RELEASE.xml new file mode 100644 index 0000000..290a80e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aspects_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aspects_5_0_7_RELEASE.xml new file mode 100644 index 0000000..001bcb6 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aspects_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_5_0_7_RELEASE.xml new file mode 100644 index 0000000..6a2d57b --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_5_0_7_RELEASE.xml new file mode 100644 index 0000000..56b0f1f --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_support_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_support_5_0_7_RELEASE.xml new file mode 100644 index 0000000..62ed4fa --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_support_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_5_0_7_RELEASE.xml new file mode 100644 index 0000000..3b157db --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_5_0_7_RELEASE.xml new file mode 100644 index 0000000..aaef8a8 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_7_RELEASE.xml new file mode 100644 index 0000000..b5651f7 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jdbc_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jdbc_5_0_7_RELEASE.xml new file mode 100644 index 0000000..2b485a8 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jdbc_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_7_RELEASE.xml new file mode 100644 index 0000000..4348e5e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_orm_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_orm_5_0_7_RELEASE.xml new file mode 100644 index 0000000..879f168 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_orm_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_oxm_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_oxm_5_0_7_RELEASE.xml new file mode 100644 index 0000000..233390a --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_oxm_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_test_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_test_5_0_7_RELEASE.xml new file mode 100644 index 0000000..bc90aff --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_test_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_tx_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_tx_5_0_7_RELEASE.xml new file mode 100644 index 0000000..1f348ed --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_tx_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_5_0_7_RELEASE.xml new file mode 100644 index 0000000..816c219 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_7_RELEASE.xml new file mode 100644 index 0000000..d4df107 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_7_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_7_RELEASE.xml new file mode 100644 index 0000000..e6b5115 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_7_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml new file mode 100644 index 0000000..474c910 --- /dev/null +++ b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml new file mode 100644 index 0000000..33ccf19 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml b/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml new file mode 100644 index 0000000..77144ff --- /dev/null +++ b/.idea/libraries/Maven__redis_clients_jedis_2_9_0.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..d077d81 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..2041e86 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..49655e2 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,2677 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + logging + spring-boot-starter-logging + exclu + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1538274878308 + + + 1540305641918 + + + 1540305744442 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MAVEN + i3plus.core:i3plus-core-apiservice:1.0-SNAPSHOT + + i3plus.core:i3plus-core-apiservice:1.0-SNAPSHOT + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/com.fasterxml.jackson.core:jackson-databind:jar:2.9.6 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/com.fasterxml.jackson.core:jackson-databind:jar:2.9.6/com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/com.fasterxml.jackson.core:jackson-databind:jar:2.9.6/com.fasterxml.jackson.core:jackson-core:jar:2.9.6 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/i3plus.pojo:i3plus-pojo-platform:jar:1.0-SNAPSHOT + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.0.3.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.0.3.RELEASE/javax.annotation:javax.annotation-api:jar:1.3.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.0.3.RELEASE/org.yaml:snakeyaml:jar:1.19 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-aop:jar:2.0.3.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-aop:jar:2.0.3.RELEASE/org.springframework:spring-aop:jar:5.0.7.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-aop:jar:2.0.3.RELEASE/org.aspectj:aspectjweaver:jar:1.8.13 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-jdbc:jar:2.0.3.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-jdbc:jar:2.0.3.RELEASE/com.zaxxer:HikariCP:jar:2.7.9 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-jdbc:jar:2.0.3.RELEASE/org.springframework:spring-jdbc:jar:5.0.7.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/org.jboss.logging:jboss-logging:jar:3.3.2.Final + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.2.Final + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/org.javassist:javassist:jar:3.22.0-GA + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/antlr:antlr:jar:2.7.7 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/org.jboss:jandex:jar:2.0.3.Final + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/dom4j:dom4j:jar:1.6.1 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.hibernate:hibernate-core:jar:5.2.17.Final/org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/javax.transaction:javax.transaction-api:jar:1.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.data:spring-data-jpa:jar:2.0.8.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.data:spring-data-jpa:jar:2.0.8.RELEASE/org.springframework:spring-orm:jar:5.0.7.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework.data:spring-data-jpa:jar:2.0.8.RELEASE/org.springframework:spring-tx:jar:5.0.7.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.3.RELEASE/org.springframework:spring-aspects:jar:5.0.7.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.swagger:swagger-annotations:jar:1.5.20 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.swagger:swagger-models:jar:1.5.20 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.springfox:springfox-spi:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.springfox:springfox-spi:jar:2.9.2/io.springfox:springfox-core:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.springfox:springfox-spi:jar:2.9.2/io.springfox:springfox-core:jar:2.9.2/net.bytebuddy:byte-buddy:jar:1.7.11 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.springfox:springfox-schema:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.springfox:springfox-swagger-common:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/io.springfox:springfox-spring-web:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/com.google.guava:guava:jar:20.0 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/com.fasterxml:classmate:jar:1.3.4 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/org.slf4j:slf4j-api:jar:1.7.25 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/org.springframework.plugin:spring-plugin-core:jar:1.2.0.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/org.springframework.plugin:spring-plugin-metadata:jar:1.2.0.RELEASE + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger2:jar:2.9.2/org.mapstruct:mapstruct:jar:1.2.0.Final + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/io.springfox:springfox-swagger-ui:jar:2.9.2 + i3plus.pojo:i3plus-pojo-model:jar:1.0-SNAPSHOT/org.projectlombok:lombok:jar:1.16.22 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-lang:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-cache:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-crypto-hash:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-crypto-hash:jar:1.4.0/org.apache.shiro:shiro-crypto-core:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-crypto-cipher:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-config-core:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-config-ogdl:jar:1.4.0 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-config-ogdl:jar:1.4.0/commons-beanutils:commons-beanutils:jar:1.9.3 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-config-ogdl:jar:1.4.0/commons-beanutils:commons-beanutils:jar:1.9.3/commons-collections:commons-collections:jar:3.2.2 + i3plus.pojo:i3plus-pojo-base:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-core:jar:1.4.0/org.apache.shiro:shiro-event:jar:1.4.0 + i3plus.pojo:i3plus-pojo-wms:jar:1.0-SNAPSHOT + i3plus.core:i3plus-core-api:jar:1.0-SNAPSHOT + i3plus.core:i3plus-core-api:jar:1.0-SNAPSHOT/i3plus.pojo:i3plus-pojo-mes:jar:1.0-SNAPSHOT + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.0.3.RELEASE/com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.6 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.0.3.RELEASE/com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.6 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.0.3.RELEASE/com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.6 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.3.RELEASE/org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.31 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.hibernate.validator:hibernate-validator:jar:6.0.10.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.hibernate.validator:hibernate-validator:jar:6.0.10.Final/javax.validation:validation-api:jar:2.0.1.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework:spring-web:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework:spring-webmvc:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-web:jar:2.0.3.RELEASE/org.springframework:spring-webmvc:jar:5.0.7.RELEASE/org.springframework:spring-expression:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-autoconfigure:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-autoconfigure:jar:2.0.3.RELEASE/org.springframework.boot:spring-boot:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-log4j2:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-log4j2:jar:2.0.3.RELEASE/org.apache.logging.log4j:log4j-slf4j-impl:jar:2.10.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-log4j2:jar:2.0.3.RELEASE/org.apache.logging.log4j:log4j-slf4j-impl:jar:2.10.0/org.apache.logging.log4j:log4j-api:jar:2.10.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-log4j2:jar:2.0.3.RELEASE/org.apache.logging.log4j:log4j-core:jar:2.10.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-log4j2:jar:2.0.3.RELEASE/org.apache.logging.log4j:log4j-jul:jar:2.10.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-log4j2:jar:2.0.3.RELEASE/org.slf4j:jul-to-slf4j:jar:1.7.25 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework:spring-websocket:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework:spring-websocket:jar:5.0.7.RELEASE/org.springframework:spring-context:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework:spring-websocket:jar:5.0.7.RELEASE/org.springframework:spring-core:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework:spring-websocket:jar:5.0.7.RELEASE/org.springframework:spring-core:jar:5.0.7.RELEASE/org.springframework:spring-jcl:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.data:spring-data-commons:jar:2.0.8.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.data:spring-data-commons:jar:2.0.8.RELEASE/org.springframework:spring-beans:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/org.springframework.data:spring-data-redis:jar:2.0.8.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/org.springframework.data:spring-data-redis:jar:2.0.8.RELEASE/org.springframework.data:spring-data-keyvalue:jar:2.0.8.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/org.springframework.data:spring-data-redis:jar:2.0.8.RELEASE/org.springframework:spring-oxm:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.projectreactor:reactor-core:jar:3.1.8.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.projectreactor:reactor-core:jar:3.1.8.RELEASE/org.reactivestreams:reactive-streams:jar:1.0.2 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.netty:netty-common:jar:4.1.25.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.netty:netty-transport:jar:4.1.25.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.netty:netty-transport:jar:4.1.25.Final/io.netty:netty-buffer:jar:4.1.25.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.netty:netty-transport:jar:4.1.25.Final/io.netty:netty-resolver:jar:4.1.25.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.netty:netty-handler:jar:4.1.25.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.3.RELEASE/io.lettuce:lettuce-core:jar:5.0.4.RELEASE/io.netty:netty-handler:jar:4.1.25.Final/io.netty:netty-codec:jar:4.1.25.Final + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/redis.clients:jedis:jar:2.9.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/redis.clients:jedis:jar:2.9.0/org.apache.commons:commons-pool2:jar:2.5.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-amqp:jar:2.0.3.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-amqp:jar:2.0.3.RELEASE/org.springframework:spring-messaging:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-amqp:jar:2.0.3.RELEASE/org.springframework.amqp:spring-rabbit:jar:2.0.4.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-amqp:jar:2.0.3.RELEASE/org.springframework.amqp:spring-rabbit:jar:2.0.4.RELEASE/org.springframework.amqp:spring-amqp:jar:2.0.4.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-amqp:jar:2.0.3.RELEASE/org.springframework.amqp:spring-rabbit:jar:2.0.4.RELEASE/com.rabbitmq:amqp-client:jar:5.1.2 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework.boot:spring-boot-starter-amqp:jar:2.0.3.RELEASE/org.springframework.amqp:spring-rabbit:jar:2.0.4.RELEASE/org.springframework.retry:spring-retry:jar:1.2.2.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.csource:fastdfs-client-java:jar:1.27 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.quartz-scheduler:quartz:jar:2.3.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.quartz-scheduler:quartz:jar:2.3.0/com.mchange:mchange-commons-java:jar:0.2.11 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.quartz-scheduler:quartz-jobs:jar:2.3.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.springframework:spring-context-support:jar:5.0.7.RELEASE + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-spring:jar:1.4.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-web:jar:1.4.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/org.apache.shiro:shiro-ehcache:jar:1.4.0 + impp.framework:impp-framework-boot:jar:1.0-SNAPSHOT/net.sf.ehcache:ehcache-core:jar:2.6.11 + i3plus.platform:i3plus-platform-common:jar:1.0-SNAPSHOT + i3plus.platform:i3plus-platform-common:jar:1.0-SNAPSHOT/org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.31 + i3plus.platform:i3plus-platform-common:jar:1.0-SNAPSHOT/org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.31/org.apache.tomcat:tomcat-annotations-api:jar:8.5.31 + i3plus.platform:i3plus-platform-common:jar:1.0-SNAPSHOT/org.apache.httpcomponents:httpclient:jar:4.5.5 + i3plus.platform:i3plus-platform-common:jar:1.0-SNAPSHOT/org.apache.httpcomponents:httpclient:jar:4.5.5/org.apache.httpcomponents:httpcore:jar:4.4.9 + i3plus.platform:i3plus-platform-common:jar:1.0-SNAPSHOT/org.apache.httpcomponents:httpclient:jar:4.5.5/commons-codec:commons-codec:jar:1.11 + mysql:mysql-connector-java:jar:5.1.39 + org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.31 + org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.31/org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.31 + org.apache.tomcat.embed:tomcat-embed-jasper:jar:8.5.31/org.eclipse.jdt:ecj:jar:3.12.3 + org.apache.commons:commons-lang3:jar:3.8.1 + com.alibaba:fastjson:jar:1.2.8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + All + All + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 32jdk1.8 + + + + + + + + \ No newline at end of file diff --git a/i3plus-core.iml b/i3plus-core.iml new file mode 100644 index 0000000..a0d4a1e --- /dev/null +++ b/i3plus-core.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/i3plus-core-api/i3plus-core-api.iml b/modules/i3plus-core-api/i3plus-core-api.iml new file mode 100644 index 0000000..b27d1a0 --- /dev/null +++ b/modules/i3plus-core-api/i3plus-core-api.iml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml b/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml new file mode 100644 index 0000000..3e038b1 --- /dev/null +++ b/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java new file mode 100644 index 0000000..8c92d78 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoCloudController.java @@ -0,0 +1,127 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.icloud.core.sdk.ICoreDemoCloud; +import cn.estsh.i3plus.icloud.wms.sdk.IWmsDemoCloud; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.i3plus.pojo.base.bean.BaseModelBean; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysRole; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/impp/cloud") +@Api(description="分布式服务测试") +public class DemoCloudController { + + private static final Logger LOGGER = LoggerFactory.getLogger(DemoCloudController.class); + + @Value("${server.port}") + private String serverPort; + + @Value("${eureka.instance.ip-address}") + private String ipAddress; + + @Autowired + ICoreDemoCloud iCoreDemoCloud; + + @Autowired + IWmsDemoCloud iWmsDemoCloud; + + @GetMapping(value="/test") + @ApiOperation(value="core测试",notes = "core测试") + public ResultBean testCore(@RequestParam("test") String test) { + LOGGER.info("{}:{},【impp-core接受数据】{}",ipAddress,serverPort,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @GetMapping(value="/test-wms") + @ApiOperation(value="wms测试",notes = "wms测试") + public ResultBean testWms(@RequestParam("test") String test) { + LOGGER.info("【{}:{},impp-core接受数据 -> wms】{}",ipAddress,serverPort,test); + + BaseResultBean result = iWmsDemoCloud.testWms(test); + if(result.isSuccess()){ + return ResultBean.success("wms返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else{ + LOGGER.error("无法调用wms服务:{}",result.getErrorMsg()); + return ResultBean.fail("调用wms服务出错:" + result.getErrorMsg()); + } + } + + @GetMapping(value="/test-get") + @ApiOperation(value="测试get",notes = "测试get") + public ResultBean testFeignGet(@RequestParam("test") String test) { + LOGGER.info("【impp-core-get接受数据】{}" ,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-post") + @ApiOperation(value="测试post",notes = "测试post") + public ResultBean testFeignPost(@RequestParam("test") String test) { + LOGGER.info("【impp-core-post接受数据】{}" ,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PutMapping(value="/test-put") + @ApiOperation(value="put接受数据",notes = "put接受数据") + public ResultBean testPut(@RequestParam("test") String test,@RequestParam("name") String name) { + LOGGER.info("【impp-core-put接受数据】param1:{},param2:{}", test,name); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @DeleteMapping(value="/test-delete") + @ApiOperation(value="delete接受数据",notes = "delete接受数据") + public ResultBean testDelete( + @RequestBody Pager pager, + @RequestParam("test") String test) { + LOGGER.info("【impp-core-delete接受数据】pager:{},test:{}",pager,test); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PutMapping(value="/test-cloud-put") + @ApiOperation(value="测试cloudput",notes = "测试cloudput") + public ResultBean putTestCloud(@RequestParam("name") String test,@RequestParam("name") String name) { + LOGGER.info("【impp-core-put接受数据】test:{},name:{}",test,name); + return ResultBean.success("返回:" + test).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-object") + @ApiOperation(value="测试单对象") + public ResultBean testObject(@RequestBody Pager pager) { + LOGGER.info("【impp-core-object接受数据】{}" ,pager); + return ResultBean.success("返回:" + pager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-map") + @ApiOperation(value="测试get",notes = "测试get") + public ResultBean testFeignMap(@RequestBody Map map) { + LOGGER.info("【impp-core-map接受数据】{}" ,map); + return ResultBean.success("返回:" + map).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-arr") + @ApiOperation(value="测试arr",notes = "测试arr") + public ResultBean testFeignArr(@RequestBody String[] arr) { + LOGGER.info("【impp-core-arr接受数据】{}" ,arr); + return ResultBean.success("返回:" + arr).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + @PostMapping(value="/test-more-object") + @ApiOperation(value="测试多对象模型",notes = "测试多对象模型") + public ResultBean testFeignMoreObj(@RequestBody BaseModelBean roleBean) { + LOGGER.info("【impp-core-more-obj接受多对象模型】objBean:{},pager:{}" ,roleBean.getObj(),roleBean.getPager()); + return ResultBean.success("返回:" + roleBean).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } +} From 4fac35c58304b061c7ff37d4459880c7b1e235e1 Mon Sep 17 00:00:00 2001 From: alwaysfrin <39822157+alwaysfrin@users.noreply.github.com> Date: Mon, 10 Dec 2018 17:21:22 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=BB=93=E6=9E=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-core-api/i3plus-core-api.iml | 66 +----- .../i3plus-core-apiservice.iml | 234 ++------------------- 2 files changed, 27 insertions(+), 273 deletions(-) diff --git a/modules/i3plus-core-api/i3plus-core-api.iml b/modules/i3plus-core-api/i3plus-core-api.iml index b27d1a0..916fbf3 100644 --- a/modules/i3plus-core-api/i3plus-core-api.iml +++ b/modules/i3plus-core-api/i3plus-core-api.iml @@ -25,70 +25,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml b/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml index 3e038b1..97b71be 100644 --- a/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml +++ b/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml @@ -25,213 +25,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + @@ -251,28 +57,34 @@ - - - - + + + + + + + + + + - + - - + + From 8d8203aafca871ec0e4474ecf2fe8d92ca3d9b38 Mon Sep 17 00:00:00 2001 From: alwaysfrin <39822157+alwaysfrin@users.noreply.github.com> Date: Mon, 10 Dec 2018 17:23:15 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=BB=93=E6=9E=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 13 + modules/i3plus-core-api/pom.xml | 36 ++ .../core/api/iservice/base/IDataSimpleService.java | 48 ++ .../api/iservice/base/ISystemLoginService.java | 28 ++ .../core/api/iservice/busi/ICoreTreeService.java | 150 ++++++ .../core/api/iservice/busi/IDataMoreService.java | 12 + .../core/api/iservice/busi/ISysConfigService.java | 84 ++++ .../api/iservice/busi/ISysDepartmentService.java | 71 +++ .../api/iservice/busi/ISysDictionaryService.java | 99 ++++ .../core/api/iservice/busi/ISysFileService.java | 62 +++ .../iservice/busi/ISysLocaleLanguageService.java | 47 ++ .../iservice/busi/ISysLocaleResourceService.java | 39 ++ .../api/iservice/busi/ISysLogExceptionService.java | 25 + .../api/iservice/busi/ISysLogOperateService.java | 76 +++ .../api/iservice/busi/ISysLogSystemService.java | 33 ++ .../core/api/iservice/busi/ISysMenuService.java | 91 ++++ .../core/api/iservice/busi/ISysMessageService.java | 125 +++++ .../api/iservice/busi/ISysOrderNoRuleService.java | 48 ++ .../api/iservice/busi/ISysOrganizeService.java | 75 +++ .../api/iservice/busi/ISysPositionService.java | 80 +++ .../core/api/iservice/busi/ISysRoleService.java | 108 ++++ .../busi/ISysTaskTimeExpressionService.java | 71 +++ .../busi/ISysTaskTimeRecordingService.java | 48 ++ .../api/iservice/busi/ISysTaskTimeService.java | 106 ++++ .../core/api/iservice/busi/ISysToolService.java | 78 +++ .../api/iservice/busi/ISysToolTypeService.java | 63 +++ .../api/iservice/busi/ISysUserInfoService.java | 100 ++++ .../core/api/iservice/busi/ISysUserService.java | 178 +++++++ .../api/iservice/busi/ISystemResourceService.java | 42 ++ modules/i3plus-core-apiservice/pom.xml | 206 ++++++++ .../apiservice/auth/ShiroAuthConfiguration.java | 201 ++++++++ .../core/apiservice/auth/realm/AdminAuthRealm.java | 50 ++ .../apiservice/auth/realm/DefaultModularRealm.java | 71 +++ .../core/apiservice/auth/realm/SaAuthRealm.java | 50 ++ .../core/apiservice/auth/realm/UserAuthRealm.java | 50 ++ .../apiservice/configuration/i3PlusCoreConfig.java | 21 + .../apiservice/controller/DemoAuthController.java | 135 +++++ .../controller/DemoEurekaController.java | 104 ++++ .../apiservice/controller/DemoMongoController.java | 117 +++++ .../controller/DemoRedisMqController.java | 235 +++++++++ .../controller/DemoResourceController.java | 299 +++++++++++ .../controller/DemoScheduleController.java | 105 ++++ .../controller/DemoTreeAndExceptionController.java | 99 ++++ .../controller/DemoUploadController.java | 71 +++ .../apiservice/controller/base/AuthController.java | 199 ++++++++ .../controller/base/SimpleController.java | 44 ++ .../controller/busi/FactoryStoreController.java | 48 ++ .../controller/busi/SysConfigController.java | 229 +++++++++ .../controller/busi/SysDepartmentController.java | 203 ++++++++ .../controller/busi/SysDictionaryController.java | 225 +++++++++ .../controller/busi/SysEnumController.java | 156 ++++++ .../controller/busi/SysFileController.java | 289 +++++++++++ .../busi/SysLocaleLanguageController.java | 199 ++++++++ .../busi/SysLocaleResourceController.java | 195 ++++++++ .../controller/busi/SysLogExceptionController.java | 49 ++ .../controller/busi/SysLogOperateController.java | 114 +++++ .../controller/busi/SysLogSystemController.java | 112 +++++ .../controller/busi/SysMenuController.java | 231 +++++++++ .../controller/busi/SysMessageController.java | 294 +++++++++++ .../controller/busi/SysOrderNoRuleController.java | 355 +++++++++++++ .../controller/busi/SysOrganizeController.java | 215 ++++++++ .../controller/busi/SysPositionController.java | 201 ++++++++ .../controller/busi/SysRoleController.java | 298 +++++++++++ .../controller/busi/SysTaskTimeController.java | 259 ++++++++++ .../busi/SysTaskTimeExpressionController.java | 160 ++++++ .../controller/busi/SysToolController.java | 226 +++++++++ .../controller/busi/SysToolTypeController.java | 188 +++++++ .../controller/busi/SysTreeController.java | 210 ++++++++ .../controller/busi/SysUserController.java | 474 ++++++++++++++++++ .../controller/busi/SysUserInfoController.java | 240 +++++++++ .../core/apiservice/dao/IMachineFactoryDao.java | 45 ++ .../core/apiservice/dao/IUserPermissionDao.java | 44 ++ .../apiservice/daoimpl/UserPermissionDaoImpl.java | 78 +++ .../listener/SysResourceBindleListener.java | 181 +++++++ .../core/apiservice/mq/I3CoreQueueConfig.java | 69 +++ .../core/apiservice/mq/I3CoreQueueReceiver.java | 118 +++++ .../core/apiservice/mq/LetterQueueReceiver.java | 101 ++++ .../core/apiservice/mq/MailQueueReceiver.java | 97 ++++ .../core/apiservice/schedulejob/DemoJob.java | 30 ++ .../serviceimpl/base/DataSimpleServiceImpl.java | 60 +++ .../serviceimpl/base/SystemLoginService.java | 161 ++++++ .../serviceimpl/busi/CoreTreeService.java | 431 ++++++++++++++++ .../serviceimpl/busi/DataMoreService.java | 18 + .../serviceimpl/busi/SysConfigService.java | 108 ++++ .../serviceimpl/busi/SysDepartmentService.java | 205 ++++++++ .../serviceimpl/busi/SysDictionaryService.java | 179 +++++++ .../serviceimpl/busi/SysFileServiceImpl.java | 79 +++ .../serviceimpl/busi/SysLocaleLanguageService.java | 150 ++++++ .../serviceimpl/busi/SysLocaleResourceService.java | 123 +++++ .../serviceimpl/busi/SysLogExceptionService.java | 45 ++ .../serviceimpl/busi/SysLogOperateService.java | 90 ++++ .../serviceimpl/busi/SysLogSystemService.java | 72 +++ .../serviceimpl/busi/SysMenuService.java | 192 +++++++ .../serviceimpl/busi/SysMessageService.java | 177 +++++++ .../serviceimpl/busi/SysOrderNoRuleService.java | 137 +++++ .../serviceimpl/busi/SysOrganizeService.java | 170 +++++++ .../serviceimpl/busi/SysPositionService.java | 191 +++++++ .../serviceimpl/busi/SysRoleService.java | 227 +++++++++ .../busi/SysTaskTimeExpressionService.java | 105 ++++ .../busi/SysTaskTimeRecordingService.java | 57 +++ .../serviceimpl/busi/SysTaskTimeService.java | 308 ++++++++++++ .../serviceimpl/busi/SysToolService.java | 116 +++++ .../serviceimpl/busi/SysToolTypeService.java | 107 ++++ .../serviceimpl/busi/SysUserInfoService.java | 230 +++++++++ .../serviceimpl/busi/SysUserService.java | 551 +++++++++++++++++++++ .../serviceimpl/busi/SystemResourceService.java | 170 +++++++ .../i3plus/core/apiservice/util/ExcelUtil.java | 378 ++++++++++++++ .../i3plus/core/apiservice/util/MailUtil.java | 200 ++++++++ .../core/apiservice/util/OrderNoMakeUtil.java | 59 +++ .../core/apiservice/websocket/DemoWebSocket.java | 114 +++++ .../apiservice/websocket/MessageWebSocket.java | 101 ++++ .../i3plus/core/apiservice/websocket/TestMain.java | 17 + .../src/main/resources/application-dev.properties | 173 +++++++ .../src/main/resources/application-prod.properties | 173 +++++++ .../src/main/resources/application-test.properties | 173 +++++++ .../src/main/resources/application.properties | 32 ++ .../src/main/resources/banner.txt | 14 + .../src/main/resources/init/oder-no-rule.xlsx | Bin 0 -> 10898 bytes .../src/main/resources/init/permission-test.xlsx | Bin 0 -> 47208 bytes .../src/main/resources/init/permission.xlsx | Bin 0 -> 36971 bytes .../src/main/resources/init/sys-config.xlsx | Bin 0 -> 32512 bytes .../src/main/resources/log4j2.xml | 59 +++ .../src/main/resources/mail.properties | 5 + .../src/main/webapp/upload_demo/index.jsp | 16 + .../src/main/webapp/upload_demo/upload.jsp | 19 + .../src/main/webapp/upload_demo/upload_status.jsp | 22 + .../cn/estsh/i3plus/core/apiservice/mq/TestMQ.java | 50 ++ .../apiservice/serviceimpl/busi/ArraySort.java | 34 ++ .../core/apiservice/serviceimpl/busi/TestBase.java | 45 ++ .../serviceimpl/busi/TestDepartmentService.java | 118 +++++ .../serviceimpl/busi/TestExcelOrderNoRule.java | 96 ++++ .../serviceimpl/busi/TestExcelPermission.java | 259 ++++++++++ .../serviceimpl/busi/TestExcelSysConfig.java | 207 ++++++++ .../serviceimpl/busi/TestMessageService.java | 110 ++++ .../serviceimpl/busi/TestOrganizeService.java | 118 +++++ .../serviceimpl/busi/TestPositionService.java | 117 +++++ .../serviceimpl/busi/TestSysConfigService.java | 102 ++++ .../serviceimpl/busi/TestSysDictionaryService.java | 99 ++++ .../serviceimpl/busi/TestSysFileService.java | 107 ++++ .../serviceimpl/busi/TestSysMenuService.java | 104 ++++ .../busi/TestTaskTimeExpressionService.java | 104 ++++ .../serviceimpl/busi/TestTaskTimeService.java | 109 ++++ .../serviceimpl/busi/TestToolService.java | 109 ++++ .../serviceimpl/busi/TestToolTypeService.java | 101 ++++ .../i3plus/core/apiservice/util/TestExcelUtil.java | 41 ++ .../i3plus/core/apiservice/util/TestMailUtil.java | 29 ++ .../core/apiservice/util/TestOrderNoMakeUtil.java | 33 ++ pom.xml | 288 +++++++++++ 148 files changed, 18420 insertions(+) create mode 100644 .gitignore create mode 100644 modules/i3plus-core-api/pom.xml create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/IDataSimpleService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IDataMoreService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogExceptionService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogOperateService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrganizeService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeRecordingService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolTypeService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserInfoService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISystemResourceService.java create mode 100644 modules/i3plus-core-apiservice/pom.xml create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/AdminAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/SaAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/UserAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/i3PlusCoreConfig.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoAuthController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoMongoController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoRedisMqController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoResourceController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTreeAndExceptionController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SimpleController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/FactoryStoreController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrganizeController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTreeController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IMachineFactoryDao.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/listener/SysResourceBindleListener.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueConfig.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueReceiver.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/DataMoreService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogExceptionService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogOperateService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeRecordingService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolTypeService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserInfoService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SystemResourceService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/TestMain.java create mode 100644 modules/i3plus-core-apiservice/src/main/resources/application-dev.properties create mode 100644 modules/i3plus-core-apiservice/src/main/resources/application-prod.properties create mode 100644 modules/i3plus-core-apiservice/src/main/resources/application-test.properties create mode 100644 modules/i3plus-core-apiservice/src/main/resources/application.properties create mode 100644 modules/i3plus-core-apiservice/src/main/resources/banner.txt create mode 100644 modules/i3plus-core-apiservice/src/main/resources/init/oder-no-rule.xlsx create mode 100644 modules/i3plus-core-apiservice/src/main/resources/init/permission-test.xlsx create mode 100644 modules/i3plus-core-apiservice/src/main/resources/init/permission.xlsx create mode 100644 modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx create mode 100644 modules/i3plus-core-apiservice/src/main/resources/log4j2.xml create mode 100644 modules/i3plus-core-apiservice/src/main/resources/mail.properties create mode 100644 modules/i3plus-core-apiservice/src/main/webapp/upload_demo/index.jsp create mode 100644 modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload.jsp create mode 100644 modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload_status.jsp create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/mq/TestMQ.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/ArraySort.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestBase.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestDepartmentService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelOrderNoRule.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelSysConfig.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestMessageService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestOrganizeService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestPositionService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysConfigService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysDictionaryService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysMenuService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeExpressionService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolTypeService.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestExcelUtil.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java create mode 100644 modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestOrderNoMakeUtil.java create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..838e520 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Created by .ignore support plugin (hsz.mobi) +### Example user template template +### Example user template + +# IntelliJ project files .gitignore +.idea +*.iml +out +gen +target +.jar +.class +.md \ No newline at end of file diff --git a/modules/i3plus-core-api/pom.xml b/modules/i3plus-core-api/pom.xml new file mode 100644 index 0000000..cbfbca2 --- /dev/null +++ b/modules/i3plus-core-api/pom.xml @@ -0,0 +1,36 @@ + + + + i3plus-core + i3plus.core + 1.0-DEV-SNAPSHOT + ../../pom.xml + + 4.0.0 + + i3plus-core-api + jar + + + i3plus.pojo + i3plus-pojo-platform + + + i3plus.pojo + i3plus-pojo-mes + + + i3plus.pojo + i3plus-pojo-model + + + + + org.apache.shiro + shiro-core + + + + \ No newline at end of file diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/IDataSimpleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/IDataSimpleService.java new file mode 100644 index 0000000..3602c5c --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/IDataSimpleService.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.core.api.iservice.base; + +import cn.estsh.i3plus.pojo.mes.MachineFactory; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + + +/** + * @Description : service服务,根据方法名自动添加事务 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-04 16:57 + * @Modify: + **/ +public interface IDataSimpleService { + + void saveMachineFactory(MachineFactory machineFactory); + + /*@Transactional + void updateMachineFactoryNameById(long id, String factoryName); + + @Transactional + void deleteMachineFactoryById(long id); + + *//** + * 根据工厂名称查询 + * @param factoryName + * @return + *//* + @Transactional(readOnly = true) + List findMachineFactoryByFactoryName(String factoryName); + + *//** + * 根据code查询 + * @param factoryCode + * @return + *//* + @Transactional(readOnly = true) + List findMachineFactoryByFactoryCode(String factoryCode); + + *//** + * 特殊查询 + * @return + *//* + @Transactional(readOnly = true) + List findMachineFactorySpecial();*/ +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java new file mode 100644 index 0000000..849fb8c --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java @@ -0,0 +1,28 @@ +package cn.estsh.i3plus.core.api.iservice.base; + +import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; + +/** + * @Description : 用户登陆方法,平台统一登陆 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-11 16:59 + * @Modify: + **/ +public interface ISystemLoginService { + + SessionUser queryUserLogin(String loginName, String s, String languageCode); + + SessionUser queryAdminLogin(String loginName, String s, String languageCode); + + SessionUser queryCheckUserLogin(UserToken authenticationToken); + + SessionUser queryCheckAdminLogin(AdminToken authenticationToken); + + SessionUser queryCheckSaAdminLogin(SaAdminToken authenticationToken); + + Integer doLoginPasswordError(String loginName); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java new file mode 100644 index 0000000..85c0d43 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java @@ -0,0 +1,150 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.i3plus.pojo.model.platform.CommonTreeModel; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.bean.SysPosition; + +import java.util.List; + +/** + * @Description : 通用树查询服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-24 11:16 + * @Modify : + **/ +public interface ICoreTreeService { + + /** + * 获取岗位树 + * @param parentId + * @return + */ + List findSysPositionTreeByParentId(long parentId); + + /** + * 获取岗位树 + * @param id + * @return + */ + SysPosition getSysPositionTreeById(long id); + + /** + * 生成子集树递归方法 + * @param parent 父类对象 + * @param step 层级 + */ + void findSysPositionChildrenTreePack(SysPosition parent,int step); + + /** + * 检查父节点是否是子节点ID或者为当前节点ID + * @param position + */ + void doValidatorSysPositionParentId(SysPosition position) ; + + /** + * 获取部门树 + * @param parentId + * @return + */ + List findSysDepartmentTreeByParentId(long parentId); + + /** + * 获取部门树 + * @param id + * @return + */ + SysDepartment getSysDepartmentTreeById(long id); + + /** + * 生成子集树递归方法 + * @param parent 父类对象 + * @param step 层级 + */ + void findSysDepartmentChildrenTreePack(SysDepartment parent,int step); + + /** + * 检查父节点是否是子节点ID或者为当前节点ID + * @param department + */ + void doValidatorSysDepartmentParentId(SysDepartment department) ; + + /** + * 获取组织树 + * @param parentId + * @return + */ + List findSysOrganizeTreeByParentId(long parentId); + + /** + * 获取组织树 + * @param id + * @return + */ + SysOrganize getSysOrganizeTreeById(long id); + + /** + * 生成子集树递归方法 + * @param parent 父类对象 + * @param step 层级 + */ + void findSysOrganizeChildrenTreePack(SysOrganize parent,int step); + + /** + * 检查父节点是否是子节点ID或者为当前节点ID + * @param organize + */ + void doValidatorSysOrganizeParentId(SysOrganize organize) ; + + /** + * 获取组织树 + * @param parentId + * @return + */ + List findSysMenuTreeByParentId(long parentId); + + /** + * 获取组织树 + * @param id + * @return + */ + SysMenu getSysMenuTreeById(long id); + + /** + * 生成子集树递归方法 + * @param parent 父类对象 + * @param step 层级 + */ + void findSysMenuChildrenTreePack(SysMenu parent, int step); + + /** + * 检查父节点是否是子节点ID或者为当前节点ID + * @param menu + */ + void doValidatorSysMenuParentId(SysMenu menu) ; + + /** + * 获取组织树 + * @param parentId + * @return + */ + List findOrganizeDepartment(long parentId); + + /** + * 获取组织树 + * @param id + * @return + */ + CommonTreeModel getOrganizeById(long id); + + /** + * 生成子集树递归方法 + * @param parent 父类对象 + * @param step 层级 + */ + void findOrganizeTreePack(CommonTreeModel parent, int step); + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IDataMoreService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IDataMoreService.java new file mode 100644 index 0000000..6f0feb7 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IDataMoreService.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-04 16:57 + * @Modify: + **/ +public interface IDataMoreService { + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java new file mode 100644 index 0000000..2cd9827 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java @@ -0,0 +1,84 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysConfig; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 系统参数服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 9:21 + * @Modify : + **/ +public interface ISysConfigService { + + /** + * 添加系统参数 + * @param sysConfig + */ + @ApiOperation(value = "添加系统参数") + void insertSysConfig(SysConfig sysConfig); + + /** + * 删除系统参数 + * @param id + */ + @ApiOperation(value = "删除系统参数") + void deleteSysConfigById(Long id); + + /** + * 修改系统参数 + * @param sysConfig + */ + @ApiOperation(value = "修改系统参数") + void updateSysConfig(SysConfig sysConfig); + + /** + * 查询全部系统参数 + */ + @ApiOperation(value = "查询全部系统参数") + List ListSysConfig(); + + /** + * 根据id查询系统参数 + * @param id + */ + @ApiOperation(value = "根据id查询系统参数") + SysConfig getSysConfigById(Long id); + + /** + * 系统配置复杂查询分页排序 + * @param sysConfig + * @param pager + * @return + */ + @ApiOperation(value = "系统配置复杂查询分页排序") + ListPager querySysConfigByPager(SysConfig sysConfig, Pager pager); + + /** + * 根据code查询系统配置 + * @param code + * @return + */ + @ApiOperation(value = "根据code查询系统配置") + SysConfig getSysConfigByCode(String code); + + /** + * 查询系统邮件配置项 + * @return + */ + @ApiOperation(value = "查询系统邮件配置项") + List findMailConfig(); + + /** + * 根据系统配置代码修改配置项 + * @param code + * @param value + */ + @ApiOperation(value = "根据系统配置代码修改配置项") + void updateSysConfigByCode(String code,String value); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java new file mode 100644 index 0000000..6f0f6fa --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; + +import java.util.List; + +/** + * @Description : 部门业务服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-24 20:39 + * @Modify : + **/ +public interface ISysDepartmentService { + + /** + * 添加部门 + * @param department + */ + SysDepartment insertSysDepartment(SysDepartment department); + + /** + * 根据id删除部门 + * @param id + */ + void deleteSysDepartmentById(Long id); + + /** + * 根据id批量删除 + * @param ids id数组 + * @return + */ + void deleteSysDepartmentByIds(Long[] ids); + + /** + * 修改部门信息 + * @param department + */ + void updateSysDepartment(SysDepartment department); + + /** + * 查询全部部门 + * @return + */ + List listSysDepartment(); + + /** + * 复杂查询 + * @param department + * @param pager + * @return + */ + ListPager querySysDepartment(SysDepartment department, Pager pager); + + /** + * 根据id查询部门 + * @param id + * @return + */ + SysDepartment getSysDepartmentById(Long id); + + /** + * 按条件分页查询部门信息 + * @param department + * @param pager + * @return + */ + ListPager findSysDepartmentByPager(SysDepartment department, Pager pager); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java new file mode 100644 index 0000000..c2169df --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDictionaryService.java @@ -0,0 +1,99 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 字典服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-28 23:41 + * @Modify : + **/ +public interface ISysDictionaryService { + + /** + * 添加字典 + * @param sysDictionary + */ + @ApiOperation(value = "添加字典") + void insertSysDictionary(SysDictionary sysDictionary); + + /** + * 根据id删除字典 + * @param id + */ + @ApiOperation(value = "根据id删除字典") + void deleteSysDictionaryById(Long id); + + /** + * 修改字典 + * @param sysDictionary + */ + @ApiOperation(value = "修改字典") + void updateSysDictionary(SysDictionary sysDictionary); + + /** + * 查询所有字典信息 + * @return + */ + @ApiOperation(value = "查询所有字典信息") + List listSysDictionary(); + + /** + * 根据id查询字典信息 + * @param id + * @return + */ + @ApiOperation(value = "根据id查询字典信息") + SysDictionary getSysDictionaryById(Long id); + + /** + * 根据父级代码查询字典项信息 + * @param parentCode + * @return + */ + @ApiOperation(value = "根据父级代码查询字典项信息") + List findSysDictionaryByParentCode(String parentCode); + + /** + * 字典复杂查询,分页,排序 + * 默认查询非顶级字典 + */ + @ApiOperation(value = "字典复杂查询,分页,排序",notes = "默认查询非顶级字典") + ListPager querySysDictionaryByPager(SysDictionary sysDictionary, Pager pager); + + /** + * 查询顶级字典 + */ + @ApiOperation(value = "查询顶级字典") + List findSysDictionaryByTop(); + + /** + * 批量删除字典 + * @param ids + */ + @ApiOperation(value = "批量删除字典") + void deleteSysDictionaryByIds(Long[] ids); + + /** + * 检出文件名称是否符合系统规范 + * @param fileName + * @return + */ + @ApiOperation(value = "检出文件名称是否符合系统规范") + boolean checkFileName(String fileName); + + /** + * 根据父节点 以及当前节点CODE 获取字典信息 + * @param parentCode + * @param code + * @return + */ + @ApiOperation(value = "根据父节点 以及当前节点CODE 获取字典信息") + SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode,String code); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java new file mode 100644 index 0000000..de0ad57 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysFileService.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; + +import java.util.List; + +/** + * @Description : 文件资源服务服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 16:20 + * @Modify : + **/ +public interface ISysFileService { + + /** + * 添加文件资源信息 + * @param sysFile + */ + SysFile insertSysFile(SysFile sysFile); + + /** + * 删除文件资源小新 + * @param id + */ + void deleteSysFileById(Long id); + + /** + * 修改文件资源信息 + * @param sysFile + */ + void updateSysFile(SysFile sysFile); + + /** + * 查询全部文件资源信息 + * @return + */ + List listSysFile(); + + /** + * 根据id查询文件资源信息 + * @param id + * @return + */ + SysFile getSysFileById(Long id); + + /** + * 文件资源查询,分页,排序 + * @param sysFile + * @param pager + * @return + */ + ListPager querySysFileByPager(SysFile sysFile, Pager pager); + + /** + * 批量删除文件资源 + * @param ids + */ + void deleteSysFileByIds(Long[] ids); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java new file mode 100644 index 0000000..64efd55 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java @@ -0,0 +1,47 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 系统语言管理 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-12 11:53 + * @Modify: + **/ +public interface ISysLocaleLanguageService { + + @ApiOperation(value = "添加系统语言",notes = "添加系统语言") + SysLocaleLanguage insertSysLocaleLanguage(SysLocaleLanguage sysLocaleLanguage); + + @ApiOperation(value = "修改系统语言",notes = "修改系统语言") + void updateSysLocaleLanguage(SysLocaleLanguage sysLocaleLanguage); + + @ApiOperation(value = "根据id删除系统语言",notes = "根据id删除系统语言") + void deleteSysLocaleLanguageById(Long id); + + @ApiOperation(value = "查询全部系统语言",notes = "查询全部系统语言") + List listSysLocaleLanguage(); + + @ApiOperation(value = "系统语言复杂查询,分页,排序",notes = "系统语言复杂查询,分页,排序") + ListPager querySysLocaleLanguageByPager(SysLocaleLanguage sysLocaleLanguage, Pager pager); + + @ApiOperation(value = "根据id批量删除系统语言",notes = "根据id批量删除系统语言") + void deleteSysLocaleLanguageByIds(Long[] ids); + + @ApiOperation(value = "设置默认语言",notes = "设置默认语言") + void updateSysLocaleLanguageDefaultById(Long id); + + @ApiOperation(value = "根据code查询语言") + SysLocaleLanguage getSysLocaleLanguageByCode(String code); + + @ApiOperation(value = "根据语言id修改语言状态") + void updateSysLocaleLanguageStatusById(Long id,Integer status); + + void updateSysLocaleLanguageStatusByIds(Long[] ids,Integer status); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java new file mode 100644 index 0000000..2a5b5ea --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java @@ -0,0 +1,39 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 系统语言资源接口 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-12 13:32 + * @Modify: + **/ +public interface ISysLocaleResourceService { + + @ApiOperation(value = "新增系统资源",notes = "新增系统资源") + SysLocaleResource insertSysLocaleResource(SysLocaleResource sysLocaleResource); + + @ApiOperation(value = "修改系统资源",notes = "修改系统资源") + void updateSysLocaleResource(SysLocaleResource sysLocaleResource); + + @ApiOperation(value = "根据id删除系统资源",notes = "根据id删除系统资源") + void deleteSysLocaleResourceById(Long id); + + @ApiOperation(value = "查询全部系统资源",notes = "查询全部系统资源") + List listSysLocaleResource(); + + @ApiOperation(value = "系统资源复杂查询,分页,排序",notes = "系统资源复杂查询,分页,排序") + ListPager querySysLocaleResourceByPager(SysLocaleResource sysLocaleResource, Pager pager); + + @ApiOperation(value = "根据id批量删除",notes = "根据id批量删除") + void deleteSysLocaleResourceByIds(Long[] ids); + + @ApiOperation(value = "批量添加") + void insertSysLocaleResourceList(List sysLocaleResources); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogExceptionService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogExceptionService.java new file mode 100644 index 0000000..e159a8c --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogExceptionService.java @@ -0,0 +1,25 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysLogException; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 异常日志服务接口 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-19 17:28 + * @Modify: + **/ +public interface ISysLogExceptionService { + + /** + * 系统异常日志复杂查询,分页,排序 + * @param sysLogException + * @param pager + * @return + */ + @ApiOperation(value = "系统异常日志复杂查询,分页,排序") + ListPager querySysLogExceptionByPager(SysLogException sysLogException, Pager pager); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogOperateService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogOperateService.java new file mode 100644 index 0000000..94054fc --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogOperateService.java @@ -0,0 +1,76 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysLogOperate; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 操作日志服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 13:49 + * @Modify : + **/ +public interface ISysLogOperateService { + + /** + * 添加操作日志 + * @param logOperate + * @return + */ + @ApiOperation(value = "添加操作日志",notes = "添加操作日志") + SysLogOperate insertSysLogOperate(SysLogOperate logOperate); + + /** + * 根据id删除日志 + * @param id + */ + @ApiOperation(value = "根据id删除日志",notes = "根据id删除日志") + void deleteSysLogOperateById(Long id); + + /** + * 查询全部操作日志 + * @return + */ + @ApiOperation(value = "查询全部操作日志",notes = "查询全部操作日志") + List listSysLogOperate(); + + /** + * 批量删除日志 + * @param ids + */ + @ApiOperation(value = "批量删除日志",notes = "批量删除日志") + void deleteSysLogOperateByIds(Long[] ids); + + /** + * 根据id查询操作日志 + * @param id + * @return + */ + @ApiOperation(value = "根据id查询操作日志",notes = "根据id查询操作日志") + SysLogOperate getSysLogOperateById(Long id); + + /** + * 根据操作人姓名模糊查询日志 + * @param operateUserName + * @return + */ + @ApiOperation(value = "根据操作人姓名模糊查询日志",notes = "根据操作人姓名模糊查询日志") + List listSysLogOperateByOperateUserName(String operateUserName); + + //查询所有日志数量 + @ApiOperation(value = "查询所有日志数量") + long countAllSysLogOperate(); + + /** + * 操作日志复杂查询,分页,排序 + * @param logOperate + * @param pager + * @return + */ + @ApiOperation(value = "操作日志复杂查询,分页,排序",notes = "操作日志复杂查询,分页,排序") + ListPager querySysLogOperateByPager(SysLogOperate logOperate, Pager pager); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java new file mode 100644 index 0000000..82e32b4 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLogSystemService.java @@ -0,0 +1,33 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysLogSystem; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 系统日志服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 10:36 + * @Modify : + **/ +public interface ISysLogSystemService { + + @ApiOperation(value = "添加系统日志",notes = "添加系统日志") + void insertSysLogSystem(SysLogSystem logSystem); + + @ApiOperation(value = "删除日志",notes = "删除日志") + void deleteSysLogSystemById(Long id); + + @ApiOperation(value = "查询全部日志",notes = "查询全部日志") + List listSysLogSystem(); + + @ApiOperation(value = "根据id查询系统日志",notes = "根据id查询系统日志") + SysLogSystem getSysLogSystemById(long id); + + @ApiOperation(value = "系统日志分页复杂查询",notes = "系统日志分页复杂查询") + ListPager querySysLogSystemByPager(SysLogSystem logSystem, Pager pager); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java new file mode 100644 index 0000000..157bb09 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java @@ -0,0 +1,91 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; + +import java.util.List; + +/** + * @Description : 系统功能业务接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 15:18:14.958 + * @Modify : + **/ +public interface ISysMenuService { + + /** + * 修改数据 + * + * @param sysMenu + */ + void updateSysMenu(SysMenu sysMenu); + + /** + * 修改权限状态 + * @param id 修改权限状态 + * @param status 状态 + * @param user 当前会话用户 + * @return + */ + void updateSysMenuStatus(Long id, int status, SessionUser user); + + /** + * 批量修改状态 + * @param ids + * @param status + * @param user + */ + void updateSysMenuStatusByIds(Long[] ids, int status, SessionUser user); + + /** + * 根据Key 删除数据 + * @param id + * @return + */ + void deleteSysMenuById(Long id); + + /** + * 根据id批量删除 + * @param ids id数组 + * @return + */ + void deleteSysMenuByIds(Long[] ids); + + /** + * 新增数据 + * + * @param sysMenu + * @return + */ + SysMenu insertSysMenu(SysMenu sysMenu); + + /** + * 查询所有数据 + * + * @return + */ + List findSysMenuAll(); + + /** + * 根据id 数据 + * + * @param id + * @return + */ + SysMenu getSysMenuById(Long id); + + /** + * 复杂查询 + * @param menu + * @param pager + * @return + */ + ListPager querySysMenu(SysMenu menu, Pager pager); + + + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java new file mode 100644 index 0000000..f595bbc --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java @@ -0,0 +1,125 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 消息业务服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 17:10 + * @Modify : + **/ +public interface ISysMessageService { + + /** + * 添加消息 + * @param sysMessage + */ + @ApiOperation(value = "添加消息") + SysMessage insertSysMessage(SysMessage sysMessage); + + /** + * 删除消息 + * @param id + */ + @ApiOperation(value = "删除消息") + void deleteSysMessageById(Long id); + + /** + * 修改消息 + * @param sysMessage + */ + @ApiOperation(value = "修改消息") + void updateSysMessage(SysMessage sysMessage); + + /** + * 查询全部信息 + * @return + */ + @ApiOperation(value = "查询全部信息") + List listSysMessage(); + + /** + * 根据id查询消息 + * @param id + * @return + */ + @ApiOperation(value = "根据id查询消息") + SysMessage getSysMessageById(Long id); + + /** + * 系统消息复杂查询,分页,排序 + * @param sysMessage + * @param pager + * @return + */ + @ApiOperation(value = "系统消息复杂查询,分页,排序") + ListPager querySysMessageByPager(SysMessage sysMessage, Pager pager); + + /** + * 批量删除系统消息 + * @param ids + */ + @ApiOperation(value = "批量删除消息") + void deleteSysMessageByIds(Long[] ids); + + /** + * 添加用户消息关系 + * @param refUserMessage + */ + @ApiOperation(value = "添加用户消息关系") + SysRefUserMessage insertSysRefUserMessage(SysRefUserMessage refUserMessage); + + /** + * 添加消息并发送 + * @param sysMessage + * @return + */ + @ApiOperation(value = "添加消息并发送") + void doSendSysMessage(SysMessage sysMessage); + + /** + * 分页查询用户消息表 + * @return + */ + @ApiOperation(value = "分页查询用户消息表") + ListPager querySysRefUserMessageByPager(SysRefUserMessage sysRefUserMessage, Pager pager); + + /** + * 根据用户id和消息状态和查询用户消息表 + * @param userId + * @param status + * @return + */ + @ApiOperation(value = "根据用户id和消息状态和查询用户消息") + List findSysRefUserMessageByUserIdAndStatus(Long userId,Integer status); + + /** + * 根据id查询用户消息 + * @param id + * @return + */ + @ApiOperation(value = "根据id查询用户消息") + SysMessage getSysMessageByRefUserMessageId(Long id); + + /** + * 批量修改用户消息状态 + * @param ids + * @param status + */ + @ApiOperation(value = "根据id查询用户消息") + void updateSysRefUserMessageStatusByIds(Long[] ids,Integer status); + + /** + * 批量删除用户消息 + * @param ids + */ + @ApiOperation(value = "批量删除用户消息") + void deleteSysRefUserMessageStatusByIds(Long[] ids); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java new file mode 100644 index 0000000..ac3130e --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrderNoRuleService.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 单号生成规则服务器 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 19:57 + * @Modify: + **/ +public interface ISysOrderNoRuleService { + + @ApiOperation(value = "添加单号规则") + SysOrderNoRule insertSysOrderNoRule(SysOrderNoRule sysOrderNoRule); + + @ApiOperation(value = "修改单号规则") + void updateSysOrderNoRule(SysOrderNoRule sysOrderNoRule); + + @ApiOperation(value = "根据id删除单号规则") + void deleteSysOrderNoRuleById(Long id); + + @ApiOperation(value = "根据id查询单号规则") + SysOrderNoRule getSysOrderNoRuleById(Long id); + + @ApiOperation(value = "单号规则复杂查询,分页,排序") + ListPager querySysOrderNoRuleByPager(SysOrderNoRule sysOrderNoRule, Pager pager); + + @ApiOperation(value = "根据code查询单号规则") + SysOrderNoRule getSysOrderNoRuleCode(String code); + + @ApiOperation(value = "根据id修改单号规则状态") + void updateSysOrderNoRuleCodeStatusById(Long id,Integer status); + + @ApiOperation(value = "批量删除单号规则") + void deleteSysOrderNoRuleByIds(Long[] ids); + + @ApiOperation(value = "批量修改单号规则状态") + void updateSysOrderNoRuleByIds(Long[] ids,Integer status); + + @ApiOperation(value = "批量添加编号规则") + void insertSysOrderNoRuleList(List sysOrderNoRuleList); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrganizeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrganizeService.java new file mode 100644 index 0000000..ecb7a68 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysOrganizeService.java @@ -0,0 +1,75 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 组织业务接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:42.941 + * @Modify : + **/ +public interface ISysOrganizeService { + + /** + * @param organize + */ + @ApiOperation(value = "更新组织",notes = "传入持久化组织对象,进行更新") + void updateSysOrganize(SysOrganize organize); + + /** + * 修改 组织状态 + * @param id 组织ID + * @param status 组织状态 + * @param user 当前会话用户 + */ + @ApiOperation(value = "修改组织状态",notes = "") + void updateSysOrganizeStatus(Long id, int status, SessionUser user); + + /** + * 根据Key 删除数据 + * @param id + */ + void deleteSysOrganizeById(Long id); + + /** + * 根据id批量删除 + * @param ids id数组 + * @return + */ + void deleteSysOrganizeByIds(Long[] ids); + + /** + * 新增数据 + * @param organize + * @return + */ + SysOrganize insertSysOrganize(SysOrganize organize); + + /** + * 查询所有数据 + * @return + */ + List listSysOrganize(); + + /** + * 复杂查询 + * @param organize + * @param pager + * @return + */ + ListPager querySysOrganize(SysOrganize organize, Pager pager); + + /** + * 根据id 数据 + * @param id + * @return + */ + SysOrganize getSysOrganizeById(Long id); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java new file mode 100644 index 0000000..cbc7aad --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPositionService.java @@ -0,0 +1,80 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysPosition; +import org.springframework.data.domain.Page; + +import java.util.List; + +/** + * @Description : 岗位服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-19 16:36 + * @Modify : + **/ +public interface ISysPositionService { + + /** + * 修改数据 + * + * @param position + */ + void updateSysPosition(SysPosition position); + + /** + * 根据Key 删除数据 + * + * @param id + */ + void deleteSysPositionById(Long id); + + /** + * 根据id批量删除岗位 + * @param ids id数组 + * @return + */ + void deleteSysPositionByIds(Long[] ids); + + /** + * 新增数据 + * + * @param position + * @return + */ + SysPosition insertSysPosition(SysPosition position); + + /** + * 查询所有数据 + * + * @return + */ + List listSysPosition(); + + /** + * 复杂查询 + * @param position + * @param pager + * @return + */ + ListPager querySysPosition(SysPosition position, Pager pager); + + /** + * 根据Key 数据 + * + * @param id + * @return + */ + SysPosition getSysPositionById(Long id); + + /** + * 根据岗位信息进行查找 + * @param position + * @param pager + * @return + */ + ListPager findSysPositionByPager(SysPosition position, Pager pager); + + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java new file mode 100644 index 0000000..b4e56e6 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRoleService.java @@ -0,0 +1,108 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysRefRoleMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysRole; + +import java.util.List; + +/** + * @Description : 系统角色业务接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.771 + * @Modify : + **/ +public interface ISysRoleService { + + /** + * 修改数据 + * + * @param sysRole + */ + void updateSysRole(SysRole sysRole); + + /** + * 修改权限状态 + * @param id 修改权限状态 + * @param status 状态 + * @param user 当前用户会话 + * @return + */ + void updateSysRoleStatus(Long id, int status, SessionUser user); + + /** + * 批量修改状态 + * @param ids + * @param status + * @param user + */ + void updateSysRoleStatusByIds(Long[] ids, int status, SessionUser user); + + /** + * 根据Key 删除数据 + * @param id + */ + void deleteSysRoleById(Long id); + + /** + * 根据id批量删除 + * @param ids id数组 + * @return + */ + void deleteSysRoleByIds(Long[] ids); + + /** + * 新增数据 + * + * @param sysRole + * @return + */ + SysRole insertSysRole(SysRole sysRole); + + /** + * 刷新角色权限 + * @param roleId + * @param ids + */ + void refreshSysRoleRef(Long roleId,Long[] ids,String userName); + + /** + * 刷新角色权限 + * @param roleIds + * @param ids + */ + void refreshBatchSysRoleRef(Long[] roleIds,Long[] ids,String userName); + + /** + * + * @param roleId + * @return + */ + List findSysRefRoleMenuByRoleId(Long roleId); + + /** + * 查询所有数据 + * + * @return + */ + List findSysRoleAll(); + + /** + * 根据id 数据 + * + * @param id + * @return + */ + SysRole getSysRoleById(Long id); + + /** + * 复杂查询 + * @param role + * @param pager + * @return + */ + ListPager querySysRole(SysRole role, Pager pager); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java new file mode 100644 index 0000000..7955212 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeExpressionService.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 定时任务表达式业务接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.771 + * @Modify : + **/ +public interface ISysTaskTimeExpressionService { + + /** + * 修改数据 + * @param taskTimeExpression + */ + @ApiOperation(value = "修改数据") + void updateSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression); + + /** + * 根据id删除数据 + * @param id + */ + @ApiOperation(value = "根据id删除数据") + void deleteSysTaskTimeExpressionById(Long id); + + /** + * 新增数据 + * @param taskTimeExpression + * @return + */ + @ApiOperation(value = "新增数据") + SysTaskTimeExpression insertSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression); + + /** + * 查询所有数据 + * @return + */ + @ApiOperation(value = "查询所有数据") + List listSysTaskTimeExpression(); + + /** + * 根据ID 查询任务表达式 + * @param id + * @return + */ + @ApiOperation(value = "根据ID 查询任务表达式") + SysTaskTimeExpression getSysTaskTimeExpressionById(Long id); + + /** + * 任务表达式查询,分页,排序 + * @param taskTimeExpression + * @param pager + * @return + */ + @ApiOperation(value = "任务表达式查询,分页,排序") + ListPager querySysTaskTimeExpressionByPager(SysTaskTimeExpression taskTimeExpression, Pager pager); + + /** + * 任务表达式批量删除 + * @param ids + */ + @ApiOperation(value = "任务表达式批量删除") + void deleteSysTaskTimeExpressionByIds(Long[] ids); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeRecordingService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeRecordingService.java new file mode 100644 index 0000000..8791da0 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeRecordingService.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeRecording; + +import java.util.List; + +/** + * @Description : 定时任务执行记录业务接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:44.005 + * @Modify : + **/ +public interface ISysTaskTimeRecordingService { + + /** + * 修改数据 + * @param taskTimeRecording + */ + void updateSysTaskTimeRecording(SysTaskTimeRecording taskTimeRecording); + + /** + * 根据Key 删除数据 + * @param id + */ + void deleteSysTaskTimeRecordingById(Long id); + + /** + * 新增数据 + * @param taskTimeRecording + * @return + */ + SysTaskTimeRecording insertSysTaskTimeRecording(SysTaskTimeRecording taskTimeRecording); + + /** + * 查询所有数据 + * @return + */ + List findSysTaskTimeRecordingAll(); + + /** + * 根据id 数据 + * @param id + * @return + */ + SysTaskTimeRecording getSysTaskTimeRecordingById(Long id); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java new file mode 100644 index 0000000..4f856c5 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskTimeService.java @@ -0,0 +1,106 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTime; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 定时任务业务接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.968 + * @Modify : + **/ +public interface ISysTaskTimeService { + + /** + * 新增定时任务 + * @param taskTime + * @return + */ + @ApiOperation(value = "新增定时任务") + SysTaskTime insertSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression); + + /** + * 修改定时任务 + * @param taskTime + */ + @ApiOperation(value = "修改定时任务") + void updateSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression); + + /** + * 修改任务状态 + * @param id 任务ID + * @param status 任务状态 + * @param user 当前会话用户 + */ + @ApiOperation(value = "修改任务状态") + void updateSysTaskTimeStatus(Long id, int status, SessionUser user); + + /** + * 根据根据id删除数据 + * @param id + */ + @ApiOperation(value = "根据根据id删除数据") + void deleteSysTaskTimeById(Long id); + + /** + * 查询所有数据 + * @return + */ + @ApiOperation(value = "查询所有数据") + List listSysTaskTime(); + + /** + * 根据id 数据 + * @param id + * @return + */ + @ApiOperation(value = "根据id 数据") + SysTaskTime getSysTaskTimeById(Long id); + + /** + * 定时任务复制查询,分页,排序 + * @param taskTime + * @param pager + * @return + */ + @ApiOperation(value = "定时任务复制查询,分页,排序") + ListPager querySysTaskTimeByPager(SysTaskTime taskTime, Pager pager); + + /** + * 根据id批量删除定时任务 + * @param ids + */ + @ApiOperation(value = "根据id批量删除定时任务") + void deleteSysTaskTimeByIds(Long[] ids); + + /** + * 批量修改定时任务状态 + * @param ids + * + */ + @ApiOperation(value = "批量修改定时任务状态") + void updateSysTaskTimeStatusByIds(Long[] ids, Integer status); + + /** + * 修改最后时间 + * @param lastDate + * @param name + * @param groupName + */ + @ApiOperation(value = "修改最后时间") + void doSysTaskTimeLastDateByNameAndGroupName(String lastDate,String name,String groupName); + + /** + * 立即执行 + * @param id + */ + @ApiOperation(value = "立即执行") + void executeSysTaskTimeById(Long id); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java new file mode 100644 index 0000000..6c16aaf --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolService.java @@ -0,0 +1,78 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysTool; +import cn.estsh.i3plus.pojo.platform.bean.SysToolType; + +import java.util.List; + +/** + * @Description : 硬件服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 20:20 + * @Modify : + **/ +public interface ISysToolService { + + /** + * 添加硬件 + * @param tool + */ + SysTool insertSysTool(SysTool tool); + + /** + * 删除硬件 + * @param id + */ + void deleteSysToolById(Long id); + + /** + * 修改硬件 + * @param tool + */ + void updateSysTool(SysTool tool); + + /** + * 查找全部硬件 + * @return + */ + List listSysTool(); + + /** + * 根据id查找硬件 + * @param id + * @return + */ + SysTool getSysToolById(Long id); + + /** + * 硬件复杂查询,分页,排序 + * @param tool + * @param pager + * @return + */ + ListPager querySysToolByPager(SysTool tool, Pager pager); + + /** + * 根据id修改硬件状态 + * @param id + * @param status + */ + void updateSysToolStatusById(Long id,Integer status); + + /** + * 批量删除硬件 + * @param ids + */ + void deleteSysToolByIds(Long[] ids); + + + /** + * 批量修改硬件状态 + * @param ids + * @param status + */ + void updateSysToolStatusByIds(Long[] ids,Integer status); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolTypeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolTypeService.java new file mode 100644 index 0000000..8ef8385 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysToolTypeService.java @@ -0,0 +1,63 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.bean.SysToolType; + +import java.util.List; + +/** + * @Description : 硬件类型服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-28 12:32 + * @Modify : + **/ +public interface ISysToolTypeService { + + /** + * 添加硬件类型 + * @param toolType + */ + void insertSysToolType(SysToolType toolType); + + /** + * 删除硬件类型 + * @param id + */ + void deleteSysToolTypeById(Long id); + + /** + * 修改硬件类型 + * @param toolType + */ + void updateSysToolType(SysToolType toolType); + + /** + * 查找全部硬件类型 + * @return + */ + List listSysToolType(); + + /** + * 根据id查找硬件类型 + * @param id + * @return + */ + SysToolType getSysToolTypeById(Long id); + + /** + * 硬件类型复杂查询,分页,排序 + * @param toolType + * @param pager + * @return + */ + ListPager querySysToolTypeByPager(SysToolType toolType, Pager pager); + + /** + * 批量删除硬件类型 + * @param ids + */ + void deleteSysToolTypeByIds(Long[] ids); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserInfoService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserInfoService.java new file mode 100644 index 0000000..00bb5a7 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserInfoService.java @@ -0,0 +1,100 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 用户服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 16:21 + * @Modify : + **/ +public interface ISysUserInfoService { + + + /** + * 新增数据 + * @param userInfo + * @return + */ + @ApiOperation(value = "新增用户",notes = "新增一个用户信息") + SysUserInfo insertSysUserInfo(SysUserInfo userInfo); + + /** + * 修改数据 + * @param userInfo + */ + @ApiOperation(value = "修改用户",notes = "修改一个用户信息") + void updateSysUserInfo(SysUserInfo userInfo); + + /** + * 刷新 用户部门关系 + * @param userInfoId + * @param departmentIds + * @param userName + */ + void refreshRefUserDepartment(Long userInfoId, Long[] departmentIds, String userName); + + /** + * 刷新用户岗位信息 + * @param userInfoId + * @param positionIds + * @param userName + */ + void refreshRefUserPosition(Long userInfoId, Long[] positionIds , String userName); + + /** + * 刷新用户组织信息 + * @param userInfoId + * @param organizeId + * @param userName + */ + void refreshRefUserOrganize(Long userInfoId, Long organizeId, String userName); + + /** + * 根据Key 删除数据 + * @param id + */ + @ApiOperation(value = "删除用户",notes = "根据UserInfoId 删除用户信息") + void deleteSysUserInfoById(Long id); + + /** + * 根据id批量删除岗位 + * @param ids id数组 + * @return + */ + @ApiOperation(value = "删除用户-批量",notes = "根据UserInfoId 批量删除用户信息") + void deleteSysUserInfoByIds(Long[] ids); + + /** + * 根据Key 数据 + * @param id + * @return + */ + @ApiOperation(value = "查询用户信息",notes = "根据 UserInfoId查询用户信息") + SysUserInfo getSysUserInfoById(Long id); + + /** + * 查询所有数据 + * @return + */ + @ApiOperation(value = "查询用户信息",notes = "查询所有用户信息") + List listSysUserInfo(); + + /** + * 复杂查询 + * @param userInfo + * @param pager + * @return + */ + @ApiOperation(value = "查询用户信息",notes = "根据复杂查询条件查询用户信息(分页信息)") + ListPager querySysUserInfo(SysUserInfo userInfo, Pager pager); + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java new file mode 100644 index 0000000..a1e5cb9 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -0,0 +1,178 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.*; +import org.apache.shiro.authc.AuthenticationException; +import java.util.List; + +/** + * @Description : 用户账号服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 16:21 + * @Modify : + **/ +public interface ISysUserService { + + /** + * 用户登录 + * @param loginName 登录名 + * @param password 登录密码 + * @param languageCode 界面语言 + * @return + */ + SessionUser queryUserLogin(String loginName, String password, String languageCode) throws AuthenticationException; + + /** + * 修改权限状态 + * @param id 修改权限状态 + * @param status 状态 + * @param user 当前会话用户 + * @return + */ + void updateSysUserStatus(Long id, int status, SessionUser user); + + /** + * 批量修改用户状态 + * @param ids + * @param status + * @param user + */ + void updateBatchSysUserStatus(Long[] ids, int status, SessionUser user); + + /** + * 修改用户信息 + * @param sysUser + */ + void updateSysUser(SysUser sysUser) throws Exception; + + /** + * 修改用户密码 + * @param userId 需要修改的用户ID + * @param password 旧密码 + * @param newPwd 新密码 + */ + void updateSysUserPassword(Long userId,String password,String newPwd) throws Exception; + + /** + * 刷新用户登录信息 + * @param userId + */ + void refreshUserLoginInformation(Long userId); + + /** + * 新增用户信息 + * @param sysUser 新增用户 + * @return + */ + SysUser insertSysUser(SysUser sysUser)throws Exception; + + /** + * 刷新用户角色关系 + * @param sysUser + * @param roleIds + * @param userName + */ + void refreshSysRefUserRole(SysUser sysUser, Long[] roleIds , String userName); + + /** + * 根据Key 删除数据 + * @param id + * @return + */ + void deleteSysUserById(Long id); + + /** + * 批量删除用户 逻辑删除 + * @param ids 需要删除的用户ID + * @param user 当前会话用户 + */ + void deleteBatchSysUserById(Long[] ids, SessionUser user); + + /** + * 查询所有数据 + * @return + */ + List list(); + + /** + * 复杂查询 + * @param user + * @param pager + * @return + */ + ListPager querySysUserByPager(SysUser user, Pager pager); + + /** + * 根据id 数据 + * @param id + * @return + */ + SysUser getSysUserById(Long id); + + /** + * 获取用户详细信息 + * @param id + * @return + */ + SysUserInfo getSysUserInfoById(Long id); + + /** + * 根据登录名称 获取用户信息 + * @param loginName + * @return + */ + SysUser getSysUserByLoginName(String loginName); + + /** + * 根据手机号查询账号 + * @param email + * @return + */ + SysUser getSysUserByEmail(String email); + + /** + * 根据手机号查询账号 + * @param phone + * @return + */ + SysUser getSysUserByPhone(String phone); + + /** + * 查出用户角色关系 + * @param userId + * @return + */ + List findSysRefUserRoleByUserId(Long userId); + + /** + * 判断用户名是否存在 + * @param userLoginName + * @param id + * @return + */ + boolean checkSysUserLoginName(String userLoginName, long id); + + /** + * 判断邮箱是否存在 + * @param email + * @param id + * @return + */ + boolean checkSysUserEmail(String email,long id); + + /** + * 判断手机是否存在 + * @param phone + * @param id + * @return + */ + boolean checkSysUserPhone(String phone,long id); + + /** + * 用户唯一教研 + * @param user + */ + void checkSysUserOnly(SysUser user); +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISystemResourceService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISystemResourceService.java new file mode 100644 index 0000000..640183e --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISystemResourceService.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; + +import java.util.List; + +/** + * @Description : 系统资源相关服务,所有sys开头的对象都可在此服务中处理 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-11 16:59 + * @Modify: + **/ +public interface ISystemResourceService { + + SysLocaleLanguage insertSysLocaleLanguage(SysLocaleLanguage lang); + + SysLocaleLanguage updateSysLocaleLanguage(SysLocaleLanguage lang); + + void deleteSysLocaleLanguageById(long id); + + List listSysLocaleLanguage(SysLocaleLanguage lang); + + ListPager listSysLocaleLanguageByPager(SysLocaleLanguage lang, Pager pager); + + SysLocaleResource insertSysLocaleResource(SysLocaleResource res); + + SysLocaleResource updateSysLocaleResource(SysLocaleResource res); + + void deleteSysLocaleResourceById(long id); + + void deleteSysLocaleResourceByIds(Long[] ids); + + ListPager listSysLocaleResourceByPager(SysLocaleResource res,Pager pager); + + List listSysLocaleResource(SysLocaleResource res); + + SysLocaleResource getSysLocaleResourceByLanguage(int resourceType,String langCode,String langKey); +} diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml new file mode 100644 index 0000000..50107af --- /dev/null +++ b/modules/i3plus-core-apiservice/pom.xml @@ -0,0 +1,206 @@ + + + + i3plus-core + i3plus.core + 1.0-DEV-SNAPSHOT + ../../pom.xml + + 4.0.0 + + i3plus-core-apiservice + jar + + + + + i3plus.icloud + i3plus-icloud-core + + + + i3plus.icloud + i3plus-icloud-wms + + + + + i3plus.pojo + i3plus-pojo-platform + + + + i3plus.pojo + i3plus-pojo-model + + + i3plus.pojo + i3plus-pojo-base + + + + + i3plus.core + i3plus-core-api + + + + + impp.framework + impp-framework-boot + + + i3plus.platform + i3plus-platform-common + + + + + mysql + mysql-connector-java + + + + + org.apache.tomcat.embed + tomcat-embed-jasper + + + + org.apache.commons + commons-lang3 + + + + + org.apache.shiro + shiro-core + + + org.apache.shiro + shiro-spring + + + org.apache.shiro + shiro-web + + + org.apache.shiro + shiro-ehcache + + + + + com.alibaba + fastjson + + + + + net.sf.ehcache + ehcache-core + + + i3plus.pojo + i3plus-pojo-mes + + + org.slf4j + slf4j-api + + + + + org.springframework.boot + spring-boot-starter-test + test + + + spring-boot-starter-logging + org.springframework.boot + + + + + junit + junit + test + + + + javax.mail + mail + + + + org.jdom + jdom2 + + + jaxen + jaxen + + + + org.apache.poi + poi + + + org.apache.poi + poi-ooxml + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + cn.estsh.ImppGo + JAR + + + + + repackage + + + + + + + maven-resources-plugin + + utf-8 + true + + + + + src/main/java + src/test/java + + + src/main/resources + true + + **/*.xlsx + + + + src/main/resources + false + + **/*.xlsx + + + + + + + \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java new file mode 100644 index 0000000..2ba0cf6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java @@ -0,0 +1,201 @@ +package cn.estsh.i3plus.core.apiservice.auth; + +import cn.estsh.i3plus.core.apiservice.auth.realm.AdminAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.DefaultModularRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.SaAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.UserAuthRealm; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.impp.framework.boot.auth.filter.AdminFilter; +import cn.estsh.impp.framework.boot.auth.filter.SaAdminFilter; +import cn.estsh.impp.framework.boot.auth.filter.UserFilter; +import cn.estsh.impp.framework.boot.configuration.RedisConfig; +import org.apache.shiro.authc.pam.ModularRealmAuthenticator; +import org.apache.shiro.cache.CacheManager; +import org.apache.shiro.realm.Realm; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; +import javax.servlet.Filter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @Description : shiro权限配置 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 18:25 + * @Modify: + **/ +@Configuration +@AutoConfigureAfter(RedisConfig.class) //2类配置,延后加载 +public class ShiroAuthConfiguration { + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + @Value("${filter.shiro.admin.loginuri}") + private String adminLoginUri; + + @Value("${filter.shiro.admin.filteruri}") + private String adminFilterUri; + + @Value("${filter.shiro.saadmin.loginuri}") + private String saAdminLoginUri; + + @Value("${filter.shiro.saadmin.filteruri}") + private String saAdminFilterUri; + + @Value("${filter.shiro.user.loginuri}") + private String userLoginUri; + + @Value("${filter.shiro.user.filteruri}") + private String userFilterUri; + + //平台控制缓存 + @Resource(name = "imppSessionEhCacheManager") + private CacheManager getEhCacheManage; + + //平台控制会话 + @Resource(name = "imppSessionManager") + private DefaultWebSessionManager getSessionManage; + + @Bean + public AdminAuthRealm adminAuthRealm(){ + return new AdminAuthRealm(); + } + + @Bean + public SaAuthRealm saAuthRealm(){ + return new SaAuthRealm(); + } + + @Bean + public UserAuthRealm userAuthRealm(){ + return new UserAuthRealm(); + } + + public Map supportRealmMap(){ + //支持的授权规则 + Map realms = new HashMap(); + realms.put(CommonEnumUtil.USER_TYPE.USER.getCode(),userAuthRealm()); + realms.put(CommonEnumUtil.USER_TYPE.ADMIN.getCode(),adminAuthRealm()); + realms.put(CommonEnumUtil.USER_TYPE.SA.getCode(),saAuthRealm()); + + return realms; + } + + @Bean + public ModularRealmAuthenticator modularRealmAuthenticator(){ + return new DefaultModularRealm(supportRealmMap()); + } + + @Bean + public SecurityManager securityManager(){ + LOGGER.info("【app-shiro-加载securityManager】"); + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + securityManager.setAuthenticator(modularRealmAuthenticator()); + securityManager.setRealms(supportRealmMap().values()); + securityManager.setCacheManager(getEhCacheManage); //缓存管理 + securityManager.setSessionManager(getSessionManage); //会话管理 + //securityManager.setRememberMeManager(getRememberManager()); + return securityManager; + } + + @Bean + public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { + ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean(); + factoryBean.setSecurityManager(securityManager); + + Map filterMap = new HashMap(); + filterMap.put("user_filter", new UserFilter()); + filterMap.put("admin_filter", new AdminFilter()); + filterMap.put("saadmin_filter", new SaAdminFilter()); + factoryBean.setFilters(filterMap); + + Map filterChain = new LinkedHashMap(); + //不需要过滤的路径,直接通过 + filterChain.put(userLoginUri, "anon"); + filterChain.put(adminLoginUri, "anon"); + filterChain.put(saAdminLoginUri, "anon"); + + //需要过滤的路径 + filterChain.put(userFilterUri, "user_filter"); + filterChain.put(adminFilterUri, "admin_filter"); + filterChain.put(saAdminFilterUri, "saadmin_filter"); + + factoryBean.setFilterChainDefinitionMap(filterChain); + + LOGGER.info("【app-shiro授权过滤】加载完成..."); + return factoryBean; + } + + /** 缓存等配置在impp平台中设置 **/ +// /** +// * 缓存管理 +// * @return +// */ +// @Bean(name = "ehCacheManager") +// public CacheManager getEhCacheManage() { +// LOGGER.info("【shiro-加载缓存cacheManager】"); +// EhCacheManager em = new EhCacheManager(); +// em.setCacheManagerConfigFile("classpath:cache_session.xml"); +// return em; +// } +// +// @Bean(name = "sessionManager") +// public DefaultWebSessionManager getSessionManage() { +// LOGGER.info("【shiro-加载sessionManager】"); +// DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); +// sessionManager.setSessionValidationScheduler(getExecutorServiceSessionValidationScheduler()); +// sessionManager.setSessionValidationSchedulerEnabled(true); +// sessionManager.setDeleteInvalidSessions(true); +// sessionManager.setSessionIdCookieEnabled(true); +// sessionManager.setSessionIdCookie(getSessionIdCookie()); +// sessionManager.setSessionDAO(getShiroSessionRedisDaoImpl()); +// sessionManager.setGlobalSessionTimeout(30 * 60 * 1000); //30分钟有效期(以sessionDao中的有效时间为准) +// +// // 可以添加session 创建、删除的监听器 +// return sessionManager; +// } +// +// @Bean +// public ShiroSessionRedisDaoImpl getShiroSessionRedisDaoImpl(){ +// LOGGER.info("【shiro-加载缓存redisSessionManager】"); +// ShiroSessionRedisDaoImpl shiroSessionRedisDao = new ShiroSessionRedisDaoImpl(); +// +// LOGGER.info("【shiro-加载缓存cacheManager】"); +// shiroSessionRedisDao.setLocalCacheManager(getEhCacheManage() ); +// return shiroSessionRedisDao; +// } +// +// /** +// * 授权验证监听任务 +// * @return +// */ +// @Bean(name = "sessionValidationScheduler") +// public ExecutorServiceSessionValidationScheduler getExecutorServiceSessionValidationScheduler() { +// LOGGER.info("【shiro-加载sessionValidationScheduler】"); +// ExecutorServiceSessionValidationScheduler scheduler = new ExecutorServiceSessionValidationScheduler(); +// scheduler.setInterval(3 * 60 * 1000); //每3分钟执行一次验证 +// return scheduler; +// } +// +// @Bean(name = "sessionIdCookie") +// public SimpleCookie getSessionIdCookie() { +// LOGGER.info("【shiro-加载sessionIdCookie】"); +// SimpleCookie cookie = new SimpleCookie("sid"); +// cookie.setHttpOnly(true); +// cookie.setMaxAge(-1); +// +// return cookie; +// } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/AdminAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/AdminAuthRealm.java new file mode 100644 index 0000000..abc89e6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/AdminAuthRealm.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 验证规则 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class AdminAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(AdminAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public AdminAuthRealm(){ + //添加支持的token + this.setAuthenticationTokenClass(AdminToken.class); + } + + //权限验证 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + //令牌确认 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckAdminLogin((AdminToken) authenticationToken); + LOGGER.info("管理员令牌验证:{}",sessionUser); + return new SimpleAuthenticationInfo(sessionUser,((AdminToken) authenticationToken).getLoginPwd(),this.getName()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java new file mode 100644 index 0000000..c7c1c9d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm; + +import cn.estsh.i3plus.core.apiservice.controller.DemoAuthController; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.pam.ModularRealmAuthenticator; +import org.apache.shiro.realm.Realm; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collection; +import java.util.Map; + +/** + * @Description : 验证规则模块封装 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 18:37 + * @Modify: + **/ +public class DefaultModularRealm extends ModularRealmAuthenticator { + private static final Logger LOGGER = LoggerFactory.getLogger(DemoAuthController.class); + private Map definedRealms; + + public DefaultModularRealm(Map definedRealms) { + this.definedRealms = definedRealms; + } + + protected AuthenticationInfo doMultiRealmAuthentication(Collection realms, AuthenticationToken token) { + return super.doMultiRealmAuthentication(realms, token); + } + + public Map getDefinedRealms() { + return this.definedRealms; + } + + public void setDefinedRealms(Map definedRealms) { + this.definedRealms = definedRealms; + } + + protected AuthenticationInfo doAuthenticate(AuthenticationToken token) throws AuthenticationException { + Realm realm; + if (token instanceof SaAdminToken) { + //超级管理员 + realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.SA.getCode()); + } else if (token instanceof AdminToken) { + //管理员 + realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.ADMIN.getCode()); + } else if (token instanceof UserToken) { + //用户 + realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.USER.getCode()); + } else { + throw new AuthenticationException("不存在TOKEN,请联系管理员("+token+")"); + } + + return this.doSingleRealmAuthentication(realm, token); + } + + protected AuthenticationInfo doSingleRealmAuthentication(Realm realm, AuthenticationToken token) { + if (!realm.supports(token)) { + throw new AuthenticationException("TOKEN类型异常,请联系管理员"); + } else { + return realm.getAuthenticationInfo(token); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/SaAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/SaAuthRealm.java new file mode 100644 index 0000000..7d43bac --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/SaAuthRealm.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 验证规则 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class SaAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(SaAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public SaAuthRealm(){ + //添加支持的token + this.setAuthenticationTokenClass(SaAdminToken.class); + } + + //权限验证 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + //令牌确认 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckSaAdminLogin((SaAdminToken) authenticationToken); + LOGGER.info("超级管理员令牌验证:{}",sessionUser); + return new SimpleAuthenticationInfo(sessionUser,((SaAdminToken) authenticationToken).getLoginPwd(),this.getName()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/UserAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/UserAuthRealm.java new file mode 100644 index 0000000..5e7d147 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/UserAuthRealm.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 验证规则 + * @Reference :- + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class UserAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(UserAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public UserAuthRealm(){ + //添加支持的token + this.setAuthenticationTokenClass(UserToken.class); + } + + //权限验证 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + //令牌确认 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckUserLogin((UserToken) authenticationToken); + LOGGER.info("{}-用户令牌验证:{}",this.getName(),sessionUser); + return new SimpleAuthenticationInfo(sessionUser,((UserToken) authenticationToken).getLoginPwd(),this.getName()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/i3PlusCoreConfig.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/i3PlusCoreConfig.java new file mode 100644 index 0000000..cf85915 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/configuration/i3PlusCoreConfig.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.core.apiservice.configuration; + +import cn.estsh.i3plus.core.apiservice.listener.SysResourceBindleListener; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description : 资源配置文件绑定 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-12 18:41 + * @Modify: + **/ +@Configuration +public class i3PlusCoreConfig { + @Bean + //资源绑定监听 + public SysResourceBindleListener messageConvertListener(){ + return new SysResourceBindleListener(); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoAuthController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoAuthController.java new file mode 100644 index 0000000..2608546 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoAuthController.java @@ -0,0 +1,135 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 18:17 + * @Modify: + **/ +@RestController +@Api(description="登陆授权demo") +@RequestMapping(CoreBaseController.BASE_URL + "/demo") +public class DemoAuthController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(DemoAuthController.class); + + @Autowired + private ISystemLoginService systemLoginService; + + @GetMapping(value="/login") + @ApiOperation(value="登陆",notes="登陆") + public ResultBean login(String loginName,String loginPwd,String languageCode){ + LOGGER.info("用户登陆:{},{},{}",loginName,loginPwd,languageCode); + try { + SessionUser sUser = systemLoginService.queryUserLogin(loginName,loginPwd,languageCode); + LOGGER.info("会员登陆:{}",sUser); + AuthUtil.setSessionObject("languageCode",languageCode); + return new ResultBean(true,""); + } catch (ImppBusiException e) { + return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + } + } + + /** + * + * @return + */ + @GetMapping(value="/logout") + @ApiOperation(value="登出",notes="登出") + public ResultBean logout(){ + LOGGER.info("用户退出..."); + try { + AuthUtil.logout(); + return new ResultBean(true,""); + } catch (ImppBusiException e) { + return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + } + } + + /** + * + * @return + */ + @GetMapping(value="/get-user-info") + @ApiOperation(value="登出",notes="登出") + public ResultBean getUserInfo(HttpServletRequest request){ + LOGGER.info("获取用户信息...lang:{}",AuthUtil.getSessionAttribute("languageCode")); + try { + SessionUser sUser = AuthUtil.getSessionUser(); + LOGGER.info("用户:{}",sUser); + Map map = new HashMap(); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String key = (String) headerNames.nextElement(); + String value = request.getHeader(key); + System.out.println("k : "+key + " , v : " + value); + } + + return new ResultBean(true,"",sUser); + } catch (ImppBusiException e) { + return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + } + } + + @GetMapping(value="/adlogin") + @ApiOperation(value="管理员登陆",notes="管理员登陆") + public ResultBean adlogin(String loginName,String loginPwd,String languageCode){ + LOGGER.info("管理员登陆:{},{},{}",loginName,loginPwd,languageCode); + + try { + systemLoginService.queryAdminLogin(loginName,EncryptTool.hexMD5(loginPwd),languageCode); + + return new ResultBean(true,""); + } catch (Exception e) { + e.printStackTrace(); + return new ResultBean(true,""); + } + } + + @GetMapping(value="/operate/index") + @ApiOperation(value="用户方法",notes="") + public ResultBean userIndex(){ + LOGGER.info("用户方法"); + + return new ResultBean(true,""); + } + + @GetMapping(value="/manager/index") + @ApiOperation(value="管理员方法",notes="") + public ResultBean adminIndex(){ + LOGGER.info("管理员方法"); + + return new ResultBean(true,""); + } + + @GetMapping(value="/samanager/index") + @ApiOperation(value="超级管理员方法",notes="") + public ResultBean saIndex(){ + LOGGER.info("超级管理员方法"); + + return new ResultBean(true,""); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java new file mode 100644 index 0000000..ae62e50 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoEurekaController.java @@ -0,0 +1,104 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.impp.framework.boot.eureka.EurekaClientHealthCheck; +import cn.estsh.impp.framework.boot.util.ResultBean; +import com.netflix.appinfo.ApplicationInfoManager; +import com.netflix.appinfo.EurekaInstanceConfig; +import com.netflix.discovery.EurekaClient; +import com.netflix.discovery.EurekaClientConfig; +import com.netflix.discovery.shared.Applications; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : + * @Reference : + * @Author : Alwaysfrin + * @CreateDate : 2018-11-19 19:56 + * @Modify: + **/ +@RestController +@Api(description="微服功能demo") +@RequestMapping("/demo-eureka-service") +@ConditionalOnExpression("'${eureka.client.enabled}' == 'true'") +public class DemoEurekaController { + + private static final Logger LOGGER = LoggerFactory.getLogger(DemoEurekaController.class); + + @Autowired + private EurekaClient eurekaClient; + + @Autowired + private ApplicationInfoManager applicationInfoManager; + + @Autowired + private EurekaClientHealthCheck healthCheck; + + /** + * 停止微服 + * @return + */ + @GetMapping(value="/stop") + @ApiOperation(value="停止微服",notes = "停止当前微服") + public ResultBean stopServer() { + LOGGER.info("请求停止微服。。。"); + eurekaClient.shutdown(); + return new ResultBean(true); + } + + /** + * 显示微服信息 + * @return + */ + @GetMapping(value="/show") + @ApiOperation(value="显示微服",notes = "显示微服") + public ResultBean show() { + LOGGER.info("【加载微服配置】"); + LOGGER.info("applicationInfoManager:{}",applicationInfoManager); + LOGGER.info("getEurekaInstanceConfig:{}",applicationInfoManager.getEurekaInstanceConfig()); + + EurekaInstanceConfig config = applicationInfoManager.getEurekaInstanceConfig(); + LOGGER.info(config.getAppname()); + + Applications app = eurekaClient.getApplications(); + LOGGER.info("spring dc : "+eurekaClient + ",app:" + app); + + EurekaClientConfig eurekaClientConfig = eurekaClient.getEurekaClientConfig(); + LOGGER.info("eurekaClientConfig:{}",eurekaClientConfig); + + return new ResultBean(true); + } + + /** + * 改变微服状态 + * @return + */ + @GetMapping(value="/health-status") + @ApiOperation(value="微服健康状态",notes = "查看微服健康状态") + public ResultBean healthStatus() { + LOGGER.info("【微服状态】{}",healthCheck.isHealth()); + + return new ResultBean(true,"状态:" + healthCheck.isHealth()); + } + + /** + * 改变微服状态 + * @return + */ + @GetMapping(value="/change-status") + @ApiOperation(value="改变微服状态",notes = "改变微服状态(true,正常使用.false,停止使用)") + public ResultBean changeStatus(boolean status) { + LOGGER.info("【改变微服状态】{}",status); + + healthCheck.setHealth(status); + + return new ResultBean(true); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoMongoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoMongoController.java new file mode 100644 index 0000000..d051389 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoMongoController.java @@ -0,0 +1,117 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogOperateService; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLogOperate; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 系统资源服务demo + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 10:34 + * @Modify: + **/ +@RestController +@Api(description="系统服务demo") +@RequestMapping(CoreBaseController.BASE_URL + "/demo-mongo-service") +public class DemoMongoController extends CoreBaseController{ + private static final Logger LOGGER = LoggerFactory.getLogger(DemoMongoController.class); + + @Autowired + private ISysLogOperateService logOperateService; + + @PostMapping(value="/logoperate/insert") + @ApiOperation(value="添加操作日志",notes = "添加操作日志,可用于国际化") + public ResultBean insertLogOperate(SysLogOperate logOperate) { + try { + logOperateService.insertSysLogOperate(logOperate); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep).build(); + }catch(Exception e){ + LOGGER.error(e.getMessage(),e); + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + /** + * 修改系统语言,可用于国际化 + * @return + */ + @DeleteMapping(value="/logoperate/delete/{id}") + @ApiOperation(value="删除日志",notes = "删除日志") + public ResultBean deleteLog(@PathVariable String id) { + try { + logOperateService.deleteSysLogOperateById(Long.parseLong(id)); + return ResultBean.success("删除日志成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep).build(); + }catch(Exception e){ + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/logoperate/query") + @ApiOperation(value="查询日志",notes = "查询日志") + public ResultBean queryLanguage(SysLogOperate logOperate,Pager pager) { + try { + List logList = logOperateService.listSysLogOperate(); + return ResultBean.success("操作成功").setResultList(logList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/logoperate/operate-user-name") + @ApiOperation(value="查询日志",notes = "查询日志") + public ResultBean queryLanguage(String OperateUserName) { + try { + List logList = logOperateService.listSysLogOperateByOperateUserName(OperateUserName); + + long count = logOperateService.countAllSysLogOperate(); + LOGGER.info("=log size= " + count); + + return ResultBean.success("操作成功").setResultList(logList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/logoperate/get/{id}") + @ApiOperation(value="根据id查询日志",notes = "根据id查询日志") + public ResultBean getLogById(@PathVariable String id) { + try { + logOperateService.getSysLogOperateById(Long.parseLong(id)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoRedisMqController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoRedisMqController.java new file mode 100644 index 0000000..e16f953 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoRedisMqController.java @@ -0,0 +1,235 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.core.apiservice.mq.I3CoreQueueConfig; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.i3plus.pojo.mes.MachineFactory; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import com.rabbitmq.client.Channel; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.Locale; +import java.util.concurrent.TimeoutException; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 10:34 + * @Modify: + **/ +@RestController +@Api(description="复杂对象服务demo") +@RequestMapping(CoreBaseController.BASE_URL + "/demo") +public class DemoRedisMqController extends CoreBaseController{ + private static final Logger LOGGER = LoggerFactory.getLogger(DemoRedisMqController.class); + + /** + * 缓存 + */ + @Resource(name="redisCore") + private ImppRedis redisCore; + + /** + * rabbitMQ队列 + */ + //@Autowired + //private AmqpTemplate rabbitTemplate; + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * mq工厂,用于生产ack消息 + */ + @Autowired + private CachingConnectionFactory mqFactory; + + @GetMapping(value="/put-cache") + @ApiOperation(value="缓存",notes="放入数据") + public ResultBean putCache(){ + //放入缓存 + redisCore.putObject("machineFactory",new MachineFactory("111","nnnn")); + redisCore.putObject("wms","123123123"); + + return new ResultBean(true,"已放入缓存"); + } + + @GetMapping(value="/get-cache") + @ApiOperation(value="缓存",notes="获取数据") + public ResultBean getCache(){ + MachineFactory mf = (MachineFactory) redisCore.getObject("machineFactory"); + System.out.println("1===== " + mf); + System.out.println("2===== " + redisCore.getObject("wms")); + + return new ResultBean(true,mf); + } + + @GetMapping(value="/send-mq") + @ApiOperation(value="队列",notes="发送") + public ResultBean sendMQ(String data){ + String context = "hello : " + data; + + System.out.println("发送DEMO_STR_QUEUE数据 : " + context); + this.rabbitTemplate.convertAndSend(I3CoreQueueConfig.DEMO_STR_QUEUE, context); + + System.out.println("发送DEMO_HANDLE_QUEUE数据 : " + context); + this.rabbitTemplate.convertAndSend(I3CoreQueueConfig.DEMO_HANDLE_QUEUE, context); + + System.out.println("发送Object数据 : " + context); + this.rabbitTemplate.convertAndSend(I3CoreQueueConfig.DEMO_OBJ_QUEUE, new MachineFactory("111mq","rabbit")); + + return new ResultBean(true,"操作成功"); + } + + @GetMapping(value="/get-mq-handle") + @ApiOperation(value="手动获取队列",notes="接收队列") + public ResultBean getHandleMQ(){ + Object data = this.rabbitTemplate.receiveAndConvert(I3CoreQueueConfig.DEMO_HANDLE_QUEUE); + if(data != null) { + LOGGER.info("获取队列数据:" + data); + } + + Object message = this.rabbitTemplate.receiveAndConvert(I3CoreQueueConfig.DEMO_STR_QUEUE); + if(message != null){ + LOGGER.info("获取str数据:" + data); + } + + message = this.rabbitTemplate.receiveAndConvert(I3CoreQueueConfig.DEMO_OBJ_QUEUE); + if(message != null){ + LOGGER.info("获取obj数据:" + data); + } + + return new ResultBean(true,""); + } + + /** + * 有确认或返回的队列 + * @param type + * @param data + * @return + * @throws IOException + * @throws TimeoutException + */ + @GetMapping(value="/send-returnmsg") + @ApiOperation(value="队列返回信息",notes="发送") + public ResultBean sendReturnMQ(int type,String data) throws IOException, TimeoutException { + if(type == 1) { + System.out.println("===== in confirm ========"); + rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { + System.out.println("===ReturnSenderDemo ack==="+ack); + if (ack) { + System.out.println("ReturnSenderDemo:消息发送成功 "); + } else { + System.out.println("ReturnSenderDemo:" + cause + correlationData.toString()); + } + }); + }else{ + System.out.println("===== in return ========"); + rabbitTemplate.setReturnCallback((Message message, int i, String s, String s1, String s2) -> { + System.out.println("===ConfirmSenderDemo ack==="+message); + System.out.println("i=" + i + ",s=" + s + ",s1=" + s1 + ",s2=" + s2); + }); + } + String returnMsg = (String) rabbitTemplate.convertSendAndReceive(I3CoreQueueConfig.DEMO_RETURN_QUEUE, data); + System.out.println("===返回数据==="+returnMsg); + return new ResultBean(true,"操作成功"); + } + + /** + * 如果需要进行ack操作,需要添加RabbitListener方法 + * @param data + * @return + * @throws IOException + * @throws TimeoutException + */ + @GetMapping(value="/send-ackmsg") + @ApiOperation(value="ack队列",notes="发送") + public ResultBean sendAckMQ(String data) throws IOException, TimeoutException { + System.out.println("发送ack数据 : " + data); + this.rabbitTemplate.convertAndSend(I3CoreQueueConfig.DEMO_ACK_QUEUE, data); + + return new ResultBean(true,"操作成功"); + } + + @GetMapping(value="/get-ackmsg") + @ApiOperation(value="getack队列",notes="接收") + public ResultBean getAckMQ() throws IOException, TimeoutException { + Channel channel = this.rabbitTemplate.getConnectionFactory().createConnection().createChannel(false); + System.out.println("1====" + channel); + String str = (String) rabbitTemplate.receiveAndConvert(I3CoreQueueConfig.DEMO_ACK_QUEUE); + System.out.println("2=============="+str); + + Message message = rabbitTemplate.receive(I3CoreQueueConfig.DEMO_ACK_QUEUE); + System.out.println("3=============="+message); + try { + /*String data = (String) this.rabbitTemplate.receiveAndConvert(I3CoreQueueConfig.DEMO_ACK_QUEUE); + System.out.println("【client】数据接收成功:" + data); + + if("ack".equals(data)){ + System.out.println("【client】数据抛出异常"); + throw new RuntimeException("【队列抛出异常】" + data); + }*/ + + String data = (String) this.rabbitTemplate.receiveAndConvert(I3CoreQueueConfig.DEMO_ACK_QUEUE); + System.out.println("【client】数据接收成功:" + data); + + if("ackack".equals(data)){ + System.out.println("【client】数据抛出异常"); + throw new RuntimeException("【队列抛出异常】" + data); + } + + //在队列删掉 不会再发了 否则消息服务器以为这条消息没处理掉 后续还会在发 + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + e.printStackTrace(); + //丢弃这条消息 + // channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,false); + // System.out.println("receiver fail"); + try { + channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + return new ResultBean(true,"操作成功"); + } + + @GetMapping(value="/exception-demo") + @ApiOperation(value="异常demo",notes="异常demo") + public ResultBean exceptionDemp() throws IOException, TimeoutException { + String data = "true"; + + if("true".equals(data)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("aaa操作数据出错") + .setErrorSolution("检查数据完整性") + .build(); + } + return new ResultBean(true,"操作成功"); + } + + @GetMapping(value="/international") + @ApiOperation(value="国际化处理",notes="资源配置文件及国际化") + public ResultBean international() { + Locale locale = LocaleContextHolder.getLocale(); + System.out.println(locale.getLanguage() + " " + locale.getCountry()); + + return new ResultBean(true,"操作成功 : " + locale.getLanguage() + " " + locale.getCountry()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoResourceController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoResourceController.java new file mode 100644 index 0000000..321419a --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoResourceController.java @@ -0,0 +1,299 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Locale; + +/** + * @Description : 系统资源服务demo + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 10:34 + * @Modify: + **/ +@RestController +@Api(description="系统服务demo") +@RequestMapping(CoreBaseController.BASE_URL + "/demo-system-service") +public class DemoResourceController extends CoreBaseController { + private static final Logger LOGGER = LoggerFactory.getLogger(DemoResourceController.class); + + /** + * 缓存 + */ + @Resource(name="redisCore") + private ImppRedis redisCore; + + /** + * rabbitMQ队列 + */ + @Autowired + private RabbitTemplate rabbitTemplate; + + @Autowired + private ISystemResourceService systemResourceService; + + @PutMapping(value="/language/insert") + @ApiOperation(value="添加语言",notes = "添加系统语言,可用于国际化") + public ResultBean insertLanguage(SysLocaleLanguage lang) { + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(lang) + .notNull("languageName",lang.getLanguageName()) + .notNull("languageCode",lang.getLanguageCode()); + + //新增初始化 + ConvertBean.modelInitialize(lang,user); + + systemResourceService.insertSysLocaleLanguage(lang); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep).build(); + }catch(Exception e){ + LOGGER.error(e.getMessage(),e); + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + /** + * 修改系统语言,可用于国际化 + * @param lang 国际化语言 + * @return + */ + @PutMapping(value="/language/update") + @ApiOperation(value="修改语言",notes = "修改系统语言,可用于国际化") + public ResultBean updateLanguage(SysLocaleLanguage lang) { + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(lang) + .notNull("languageName",lang.getLanguageName()) + .notNull("languageCode",lang.getLanguageCode()); + + //修改条件 + ConvertBean.modelUpdate(lang,user); + systemResourceService.updateSysLocaleLanguage(lang); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep).build(); + }catch(Exception e){ + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value="/language/query") + @ApiOperation(value="查询语言",notes = "添加系统语言,可用于国际化") + public ResultBean queryLanguage(SysLocaleLanguage lang,Pager pager) { + try { + ListPager listPager = systemResourceService.listSysLocaleLanguageByPager(lang,pager); + return ResultBean.success("操作成功").setListPager(listPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value="/resource/insert") + @ApiOperation(value="添加资源",notes = "添加系统语言,可用于国际化") + public ResultBean insertResource(SysLocaleResource res) { + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(res) + .notNull("resourceKey",res.getResourceKey()) + .notNull("resourceValue",res.getResourceValue()); + + //新增初始化 + ConvertBean.modelInitialize(res,user); + systemResourceService.insertSysLocaleResource(res); + return ResultBean.success("操作成功") + .setResultObject(res) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value="/resource/query") + @ApiOperation(value="查询资源",notes = "分页查询系统资源") + public ResultBean queryResource(SysLocaleResource res,Pager pager) { + try{ + ListPager listPager = systemResourceService.listSysLocaleResourceByPager(res,pager); + return ResultBean.success("操作成功") + .setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/locale-resource/get") + @ApiOperation(value="语言资源匹配",notes="资源配置文件及国际化") + public ResultBean getLocaleResource(int resourceType,String langCode,String resKey) { + try { + ValidatorBean.checkNotZero(resourceType,"请选择资源类型。"); + ValidatorBean.checkNotNull(langCode,"请输入语言编码"); + ValidatorBean.checkNotNull(resKey,"请输入资源编码"); + Locale locale = LocaleContextHolder.getLocale(); + LOGGER.info("当前语言:" + locale.getLanguage() + ",国家:" + locale.getCountry()); + + SysLocaleResource res = systemResourceService.getSysLocaleResourceByLanguage(resourceType, langCode, resKey); + LOGGER.info("获取的资源:" + res); + + return ResultBean.success("保存成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(res); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping (value="/locale-resource/delete") + @ApiOperation(value="删除资源",notes="批量删除资源") + public ResultBean deleteLocaleResource(String[] resourceIds) { + try { + if(resourceIds.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + systemResourceService.deleteSysLocaleResourceByIds(StringTool.getArrayLong(resourceIds)); + + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysUserInfoService userInfoServicer; + + + @GetMapping(value="/dup-id1") + @ApiOperation(value="测试重复ID1",notes="测试重复ID1") + public ResultBean testDuplicatedIdOne(long key) { + try { + LOGGER.info("获取:{}",key); + + SysUser user = userService.getSysUserById(key); + System.out.println("1==="+user.toString()); + + return ResultBean.success("保存成功"); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + + + @GetMapping(value="/dup-id2") + @ApiOperation(value="测试重复ID2",notes="测试重复ID2") + public ResultBean testDuplicatedIdTwo(long key) { + try { + LOGGER.info("获取:{}",key); + + SysUserInfo userInfo = userInfoServicer.getSysUserInfoById(key); + System.out.println("2==="+userInfo.toString()); + + return ResultBean.success("保存成功"); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/dup-id") + @ApiOperation(value="测试重复ID",notes="测试重复ID") + public ResultBean testDuplicatedId(long key) { + try { + LOGGER.info("获取:{}",key); +// SysUser u1 = new SysUser(); +// u1.setId(key); +// SysUserInfo u2 = new SysUserInfo(); +// u2.setId(key); +// System.out.println(u1.equals(u2)); +// System.out.println("1====" + u1.hashCode()); +// System.out.println("2====" + u2.hashCode()); + + SysUser user = userService.getSysUserById(key); +// System.out.println("1==="+user); + SysUserInfo userInfo = userInfoServicer.getSysUserInfoById(key); +// System.out.println("2==="+userInfo); + + return ResultBean.success("保存成功"); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + e.printStackTrace(); + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java new file mode 100644 index 0000000..8cda612 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoScheduleController.java @@ -0,0 +1,105 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.quartz.ScheduleTool; +import cn.estsh.impp.framework.boot.quartz.TaskInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 10:34 + * @Modify: + **/ +@RestController +@Api(description="定时任务demo") +@RequestMapping(CoreBaseController.BASE_URL + "/schedule") +public class DemoScheduleController extends CoreBaseController{ + private static final Logger LOGGER = LoggerFactory.getLogger(DemoScheduleController.class); + + /************ 定时任务demo *********/ + @Autowired + private ScheduleTool scheduleTool; + + @GetMapping(value="/list-task") + @ApiOperation(value="查询定时任务",notes="查询所有定时任务") + public ResultBean listTask(){ + List taskList = scheduleTool.queryJobList(); + for(TaskInfo ti : taskList){ + System.out.println(ti); + } + + return new ResultBean(true,""); + } + + @GetMapping(value="/add-task") + @ApiOperation(value="添加定时任务",notes="添加定时任务") + public ResultBean addTask(String packageName,String className,String jobName,String jobGroup,String cronExpression){ + //String packageName = "cn.estsh.impp.framework.boot.quartz.job"; + //String className = "ImppJob"; + + scheduleTool.addJob(new TaskInfo(packageName,className,jobName,jobGroup,cronExpression,"测试任务")); + + return new ResultBean(true,""); + } + + @GetMapping(value="/delete-task") + @ApiOperation(value="删除定时任务",notes="删除定时任务") + public ResultBean deleteTask(String jobName,String jobGroup){ + scheduleTool.deleteJob(jobName,jobGroup); + + return new ResultBean(true,""); + } + + @GetMapping(value="/pause-task") + @ApiOperation(value="暂停定时任务",notes="暂停定时任务") + public ResultBean pauseJob(String jobName,String jobGroup){ + scheduleTool.pauseJob(jobName,jobGroup); + + return new ResultBean(true,""); + } + + @GetMapping(value="/resume-task") + @ApiOperation(value="继续定时任务",notes="继续定时任务") + public ResultBean resumeJob(String jobName,String jobGroup){ + scheduleTool.resumeJob(jobName,jobGroup); + + return new ResultBean(true,""); + } + + @GetMapping(value="/exceute-task") + @ApiOperation(value="立即执行定时任务",notes="立即执行定时任务") + public ResultBean excuteJob(String jobName,String jobGroup){ + scheduleTool.executeJob(jobName,jobGroup); + + return new ResultBean(true,""); + } + + @GetMapping(value="/stand-by-schedule") + @ApiOperation(value="定时器待机",notes="定时器待机") + public ResultBean restartJob(String jobName,String jobGroup){ + scheduleTool.standBySchedule(); + + return new ResultBean(true,""); + } + + + @GetMapping(value="/start-schedule") + @ApiOperation(value="启动定时器",notes="启动定时器") + public ResultBean startSchedule(String jobName,String jobGroup){ + scheduleTool.startSchedule(); + + return new ResultBean(true,""); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTreeAndExceptionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTreeAndExceptionController.java new file mode 100644 index 0000000..3f8b9f4 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoTreeAndExceptionController.java @@ -0,0 +1,99 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; + +/** + * @Description : 系统资源服务demo + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 10:34 + * @Modify: + **/ +@RestController +@Api(description="树和异常demo") +@RequestMapping(CoreBaseController.BASE_URL + "/demo") +public class DemoTreeAndExceptionController extends CoreBaseController{ + private static final Logger LOGGER = LoggerFactory.getLogger(DemoTreeAndExceptionController.class); + + @Autowired + private ICoreTreeService coreTreeService; + + @GetMapping(value="/tree/department") + @ApiOperation(value="查询部门树",notes="通过部门主键获取部门树,-1为根节点") + public ResultBean listDepartmentTree(long depParentId) { + try { + SysDepartment department = coreTreeService.getSysDepartmentTreeById(depParentId); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(department); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + + @GetMapping(value="/excep") + @ApiOperation(value="异常处理",notes="异常处理") + public ResultBean excepTest(int num) { + try { + if(num == 1){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()) + .setErrorDetail("测试异常") + .setErrorSolution("测试异常解决方案") + .build(); + }else if(num == 2){ + throw new RuntimeException("运行中异常"); + }else if(num == 3){ + System.out.println("分母0异常"); + int i = 0/0; + }else if(num == 4){ + System.out.println("连接异常"); + URLConnection urlCon = new URLConnection(new URL("192.168.1.0")) { + @Override + public void connect() throws IOException { + + } + }; + }else{ + System.out.println("文件异常"); + throw new FileNotFoundException(); + } + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + //业务异常 + return ResultBean.fail(busExcep); + }catch(Exception e){ + //其他异常 + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java new file mode 100644 index 0000000..57161c3 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoUploadController.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.core.apiservice.controller; + +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-28 11:20 + * @Modify: + **/ +@RestController +@Api(description="复杂对象服务demo") +@RequestMapping(CoreBaseController.BASE_URL + "/demo-upload") +public class DemoUploadController extends CoreBaseController{ + private static final Logger LOGGER = LoggerFactory.getLogger(DemoUploadController.class); + + /********************** 文件上传 ***********************/ + + @Autowired + private FastDFSClient dfsClient; + + @GetMapping("/") + public String index() { + return "/index"; + } + + @GetMapping("/index") + public String indexAgain() { + return "/index"; + } + + @GetMapping("/upfile") + public String indexUpload() { + return "/upload"; + } + + @GetMapping("/upload-status") + public String uploadStatus() { + return "/upload-status"; + } + + @PostMapping("/upload") + @ApiOperation(value = "文件上传",notes = "文件上传") + public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { + try { + FastDFSFile dfsFile = dfsClient.saveFile(file); + return ResultBean.success("上传成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(dfsFile); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java new file mode 100644 index 0000000..5aab9ca --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java @@ -0,0 +1,199 @@ +package cn.estsh.i3plus.core.apiservice.controller.base; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.apiservice.controller.DemoAuthController; +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.SysLocaleLanguageService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authc.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + + +/** + * @Description : 用户权限服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 21:01 + * @Modify : + **/ +@RestController +@Api(description="用户所有权限操作服务") +@RequestMapping(CoreBaseController.BASE_URL + "/auth") +public class AuthController extends CoreBaseController { + + public static final Logger LOGGER = LoggerFactory.getLogger(DemoAuthController.class); + + @Autowired + private ISystemLoginService systemLoginService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ICoreTreeService coreTreeService; + + @Autowired + private SysLocaleLanguageService localeLanguageService; + + @GetMapping(value="/login") + @ApiOperation(value="登陆",notes="登陆") + public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, String languageCode){ + LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}",loginName,loginPwd,languageCode); + ResultBean result = null; + try { + ValidatorBean.checkNotNull(loginName,"用户名不能为空"); + ValidatorBean.checkNotNull(loginPwd,"密码不能为空"); + ValidatorBean.checkNotNull(languageCode,"语言不能为空"); + + SessionUser user = userService.queryUserLogin(loginName,loginPwd,languageCode); + + String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId(); + redisCore.deleteKey(redisKey); + + LOGGER.info("会员登陆:{}",user); + AuthUtil.setSessionObject("languageCode",languageCode); + result = new ResultBean(true, "", AuthUtil.getSessionUser()); + result.setUrl("/"); + } catch (IncorrectCredentialsException e) { + // 密码错误 + Integer num = systemLoginService.doLoginPasswordError(loginName); + num = CommonConstWords.USER_LOGIN_ERROR_MAX_NUM - num; + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD); + if(num == 0){ + result.setErrorMsg("密码输入错误。用户已被锁定请联系管理员!"); + }else { + result.setErrorMsg("密码输入错误。再输入错误"+ num +"次,用户将被锁定。"); + } + } catch (CredentialsException e) { + // 用户名或密码错误 + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME); + } catch (LockedAccountException e) { + // 账号已锁定 + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_LOCKING); + } catch (UnknownAccountException e) { + // 用户信息不存在 + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_INFO_NULL); + } catch (AuthenticationException e) { + // 系统异常 + result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + result.setErrorMsg(e.getMessage()); + } catch (ImppBusiException e) { + result = ResultBean.fail(e); + } catch (Exception e) { + result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()) + .setErrorMsg(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription()); + } + return result; + } + + /** + * + * @return + */ + @GetMapping(value="/logout") + @ApiOperation(value="登出",notes="登出") + public ResultBean logout(){ + LOGGER.info("用户退出..."); + try { + AuthUtil.logout(); + return new ResultBean(true,"").build(); + } catch (ImppBusiException e) { + return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + } + } + + /** + * + * @return + */ + @GetMapping(value="/get-user-info") + @ApiOperation(value="获取登录用户信息",notes="获取当前登录用户详细信息") + public ResultBean getUserInfo(){ + LOGGER.info("获取用户信息...lang:{}",AuthUtil.getSessionAttribute("languageCode")); + try { + SessionUser sUser = AuthUtil.getSessionUser(); + LOGGER.info("用户:{}",sUser); + return new ResultBean(true,"",sUser.getUserInfo()); + } catch (ImppBusiException e) { + return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + } + } + + /** + * + * @return + */ + @GetMapping(value="/get-user") + @ApiOperation(value="获取登录用户信息",notes="获取当前登录用户账号详细信息") + public ResultBean getUser(){ + LOGGER.info("获取用户信息...lang:{}",AuthUtil.getSessionAttribute("languageCode")); + try { + SessionUser sUser = AuthUtil.getSessionUser(); + LOGGER.info("用户:{}",sUser); + return new ResultBean(true,"",sUser.getUser()); + } catch (ImppBusiException e) { + return new ResultBean(false,e.getErrorDetail() + ",so:" + e.getErrorSolution()); + } + } + + @GetMapping(value="/find-menu-tree") + @ApiOperation(value="获取登录用户功能权限信息",notes="获取当前登录用户的权限信息") + public ResultBean getUserMenuTree(){ + try { + List listTree = coreTreeService.findSysMenuTreeByParentId(-1); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(listTree); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/update-language") + @ApiOperation(value="修改语言",notes="修改用户会话语言") + public ResultBean updateLanguage(String code){ + try { + SysLocaleLanguage language = localeLanguageService.getSysLocaleLanguageByCode(code); + if(language != null){ + AuthUtil.setSessionLanguage(language.getLanguageCode()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("操作失败").setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()).setErrorMsg("语言信息不存在"); + } + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SimpleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SimpleController.java new file mode 100644 index 0000000..8b95721 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SimpleController.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.core.apiservice.controller.base; + +import cn.estsh.i3plus.core.api.iservice.base.IDataSimpleService; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.i3plus.pojo.mes.MachineFactory; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-05 16:40 + * @Modify: + **/ +@RestController +@Api(tags="SimpleController",description="简单服务demo") +@RequestMapping(CoreBaseController.BASE_URL +"/simple-service") +public class SimpleController extends CoreBaseController{ + private Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private IDataSimpleService dataSimpleService; + + @PutMapping(value="/insert") + @ApiOperation(value="service服务",notes="返回内容添加service") + public ResultBean insertFactory(@RequestParam("name")String name, @RequestParam("code")String code){ + MachineFactory machineFactory = new MachineFactory(); + machineFactory.setFactoryName(name); + machineFactory.setFactoryCode(code); + dataSimpleService.saveMachineFactory(machineFactory); + + return new ResultBean(true,"工厂已保存"); + } + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/FactoryStoreController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/FactoryStoreController.java new file mode 100644 index 0000000..e74a533 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/FactoryStoreController.java @@ -0,0 +1,48 @@ +//package cn.estsh.i3plus.core.apiservice.controller.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.IDataMoreService; +//import cn.estsh.i3plus.pojo.platform.bean.FactoryStore; +//import cn.estsh.impp.framework.base.controller.CoreBaseController; +//import cn.estsh.impp.framework.boot.util.ResultBean; +//import io.swagger.annotations.Api; +//import io.swagger.annotations.ApiOperation; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.List; +// +///** +// * @Description : +// * @Reference : +// * @Author : alwaysfrin +// * @CreateDate : 2018-09-05 16:48 +// * @Modify: +// **/ +//@RestController +//@Api(description="复杂对象服务demo") +//@RequestMapping(CoreBaseController.BASE_URL +"/factory-store") +//public class FactoryStoreController extends CoreBaseController { +// private Logger LOGGER = LoggerFactory.getLogger(this.getClass()); +// +// @PostMapping(value="/insert/{name}/{code}") +// @ApiOperation(value="service服务",notes="返回内容添加service") +// public ResultBean insertFactory(@PathVariable("name")String name, @PathVariable("code")String code){ +// FactoryStore fs = new FactoryStore(); +// fs.setStoreName(name); +// fs.setStoreCode(code); +//// dataMoreService.(fs); +// +// return new ResultBean(true,"工厂已保存"); +// } +// +// +// @GetMapping(value="/list") +// @ApiOperation(value="查询服务",notes="返回列表") +// public ResultBean list(){ +// List fsList = null; +// +// return new ResultBean(true,"查询结果:" + fsList.size(),fsList); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java new file mode 100644 index 0000000..f0ce24b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java @@ -0,0 +1,229 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.core.apiservice.util.MailUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysConfig; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 系统参数管理服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 13:15 + * @Modify : + **/ +@RestController +@Api(description = "系统参数管理服务") +@RequestMapping(CoreBaseController.BASE_URL +"/sys-config") +public class SysConfigController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysConfigController.class); + + @Autowired + private ISysConfigService sysConfigService; + @Autowired + private MailUtil mailUtil; + + @PostMapping("/insert") + @ApiOperation(value = "添加系统参数",notes = "添加系统参数") + public ResultBean insertSysConfig(SysConfig sysConfig) { + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件验证 + ValidatorBean.beginValid(sysConfig) + .notNull("name",sysConfig.getName()) + .notNull("configCode",sysConfig.getConfigCode()) + .notNull("configType",sysConfig.getConfigType()) + .notNull("configValue",sysConfig.getConfigValue()); + + //修改初始化 + ConvertBean.modelInitialize(sysConfig,user); + + sysConfigService.insertSysConfig(sysConfig); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "根据id删除系统参数", notes = "根据id删除系统参数") + public ResultBean deleteSysConfig(@PathVariable("id") String id) { + try { + sysConfigService.deleteSysConfigById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改系统参数",notes = "修改系统参数") + public ResultBean updateSysConfig(SysConfig sysConfig){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件验证 + ValidatorBean.beginValid(sysConfig) + .notNull("name",sysConfig.getName()) + .notNull("configCode",sysConfig.getConfigCode()) + .notNull("configType",sysConfig.getConfigType()) + .notNull("configValue",sysConfig.getConfigValue()); + + //添加初始化 + ConvertBean.modelUpdate(sysConfig,user); + + sysConfigService.updateSysConfig(sysConfig); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部系统参数",notes = "查询全部系统参数") + public ResultBean findSysConfigAll(){ + try { + List sysConfigList = sysConfigService.ListSysConfig(); + return ResultBean.success("查询成功") + .setResultList(sysConfigList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询系统参数",notes = "根据id查询系统参数") + public ResultBean getSysConfigById(@PathVariable("id") String id){ + try { + ValidatorBean.checkNotNull(id,"id不能为空"); + + SysConfig sysConfig = sysConfigService.getSysConfigById(Long.parseLong(id)); + if (sysConfig != null) { + return ResultBean.success("查询成功") + .setResultObject(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/query") + @ApiOperation(value = "系统参数复杂查询,分页,排序",notes = "系统参数复杂查询,分页,排序") + public ResultBean querySysConfigByPager(SysConfig sysConfig,Pager pager) { + try { + ListPager sysConfigListPager = sysConfigService.querySysConfigByPager(sysConfig,pager); + return ResultBean.success("查询成功").setListPager(sysConfigListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get-code/{code}") + @ApiOperation(value = "根据代码获取系统配置") + public ResultBean getSysConfigByCode(@PathVariable("code") String code){ + try { + ValidatorBean.checkNotNull(code,"配置项代码不能为空"); + + SysConfig sysConfig = sysConfigService.getSysConfigByCode(code); + if(sysConfig == null){ + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } else{ + return ResultBean.success("查询成功").setResultObject(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/find-mail") + @ApiOperation(value = "查询邮件配置") + public ResultBean findMailSysConfig(){ + try { + List sysConfig = sysConfigService.findMailConfig(); + if(sysConfig == null){ + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } else{ + return ResultBean.success("查询成功").setResultList(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping("/update-code/{code}/{value}") + @ApiOperation(value = "根据code修改系统配置") + public ResultBean updateSysConfigByCode(@PathVariable("code") String code,@PathVariable("value") String value){ + try{ + ValidatorBean.checkNotNull(code,"配置项代码不能为空"); + ValidatorBean.checkNotNull(value,"值不能为空"); + + sysConfigService.updateSysConfigByCode(code,value); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/send-test-mail/{to}") + @ApiOperation(value = "邮件测试") + public ResultBean sendTestMail(@PathVariable("to") String to){ + try { + ValidatorBean.checkNotNull(to,"收件人不能为空"); + + mailUtil.init(); + mailUtil.setSubject("测试邮件"); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getDescription()); + mailUtil.setBody("测试邮件"); + mailUtil.setTo(to); + mailUtil.send(); + return ResultBean.success("测试邮件已发送").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java new file mode 100644 index 0000000..fbde097 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java @@ -0,0 +1,203 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 部门管理服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-24 21:20 + * @Modify : + **/ +@RestController +@Api(description = "部门管理服务") +@RequestMapping(CoreBaseController.BASE_URL +"/department") +public class SysDepartmentController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysDepartmentController.class); + + @Autowired + public ISysDepartmentService departmentService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "添加部门", notes = "返回内容添加部门") + public ResultBean insertSysDepartment(SysDepartment department) { + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(department) + .notNull("name", department.getName()) + .notNull("departmentCode", department.getDepartmentCode()) + .checkNotZero("organizeId",department.getOrganizeId()); + + //新增初始化 + ConvertBean.modelInitialize(department, user); + if(department.getParentId() == null || department.getParentId() <= 0){ + department.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + department.setParentNameRdd("顶级部门"); + } + + departmentService.insertSysDepartment(department); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改部门", notes = "根据部门id修改信息") + public ResultBean updateSysDepartmentById(SysDepartment department) { + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(department) + .checkNotZero("id", department.getId()) + .notNull("departmentName", department.getName()) + .notNull("departmentCode", department.getDepartmentCode()) + .checkNotZero("organizeId",department.getOrganizeId()); + + ConvertBean.modelUpdate(department, user); + if(department.getParentId() == null || department.getParentId() <= 0){ + department.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + department.setParentNameRdd("顶级部门"); + } + + departmentService.updateSysDepartment(department); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除部门", notes = "根据部门id删除信息") + public ResultBean deleteSysDepartment(@PathVariable("id") String id) { + try { + //条件验证 + ValidatorBean.checkNotNull(id, "id为空。"); + + departmentService.deleteSysDepartmentById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询所有部门", notes = "查询所有部门") + public ResultBean findSysDepartmentAll() { + try { + List departmentList = departmentService.listSysDepartment(); + return ResultBean.success("操作成功").setResultList(departmentList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询部门", notes = "根据id查询部门") + public ResultBean getSysDepartmentById(@PathVariable("id") String id) { + try { + ValidatorBean.checkNotNull(id, "角色id 不能为空"); + + SysDepartment department = departmentService.getSysDepartmentById(Long.parseLong(id)); + + ValidatorBean.beginValid(department); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(department); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "查询部门", notes = "组合查询部门信息外加分页信息") + public ResultBean querySysDepartment(SysDepartment department, Pager pager) { + try { + ListPager departmentListPager = departmentService.findSysDepartmentByPager(department, pager); + return ResultBean.success("查询成功") + .setListPager(departmentListPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteSysDepartmentByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + departmentService.deleteSysDepartmentByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java new file mode 100644 index 0000000..efd4fc1 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDictionaryController.java @@ -0,0 +1,225 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 字典管理服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-28 23:54 + * @Modify : + **/ +@RestController +@Api(description = "字典管理服务") +@RequestMapping(CoreBaseController.BASE_URL +"/sys-dictionary") +public class SysDictionaryController extends CoreBaseController{ + public static final Logger LOGGER = LoggerFactory.getLogger(SysConfigController.class); + + @Autowired + public ISysDictionaryService sysDictionaryService; + + @PostMapping("/insert") + @ApiOperation(value = "添加字典",notes = "添加字典") + public ResultBean insertSysDictionary(SysDictionary sysDictionary) { + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件验证 + ValidatorBean.beginValid(sysDictionary) + .notNull("name",sysDictionary.getName()) + .notNull("dictionaryCode",sysDictionary.getDictionaryCode()) + .notNull("dictionaryValue",sysDictionary.getDictionaryValue()); + + //新增初始化 + ConvertBean.modelInitialize(sysDictionary,user); + + sysDictionaryService.insertSysDictionary(sysDictionary); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping("/update") + @ApiOperation(value = "修改字典",notes = "修改字典") + public ResultBean updateSysDictionary(SysDictionary sysDictionary) { + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件验证 + ValidatorBean.beginValid(sysDictionary) + .notNull("name",sysDictionary.getName()) + .notNull("dictionaryCode",sysDictionary.getDictionaryCode()) + .notNull("dictionaryValue",sysDictionary.getDictionaryValue()); + + //修改初始化 + ConvertBean.modelUpdate(sysDictionary,user); + + sysDictionaryService.updateSysDictionary(sysDictionary); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping("/delete/{id}") + @ApiOperation(value = "根据id删除字典",notes = "根据id删除字典") + public ResultBean updateSysDictionary(@PathVariable("id") String id) { + try { + // 条件验证 + ValidatorBean.checkNotNull(id,"id不能为空"); + + sysDictionaryService.deleteSysDictionaryById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询所有字典", notes = "查询所有字典") + public ResultBean findSysDictionaryAll() { + try { + List sysDictionaryList = sysDictionaryService.listSysDictionary(); + return ResultBean.success("查询成功").setResultList(sysDictionaryList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询字典", notes = "根据id查询字典") + public ResultBean getSysDictionaryById(@PathVariable("id") String id) { + try { + // 条件判断 + ValidatorBean.checkNotNull(id,"id不能为空"); + + SysDictionary sysDictionary = sysDictionaryService.getSysDictionaryById(Long.parseLong(id)); + if (sysDictionary != null) { + return ResultBean.success("查询成功").setResultObject(sysDictionary).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("字典不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + } catch (ImppBusiException busExcep) { + busExcep.printStackTrace(); + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + e.printStackTrace(); + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/find/{code}") + @ApiOperation(value = "根据父级code查询字典项", notes = "根据父级code查询字典项") + public ResultBean findSysDictionaryByParentCode(@PathVariable("code") String code) { + try { + List sysDictionaryList = sysDictionaryService.findSysDictionaryByParentCode(code); + return ResultBean.success("查询成功").setResultList(sysDictionaryList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping("/query") + @ApiOperation(value = "字典复杂查询,分页,排序",notes = "字典复杂查询,分页,排序") + public ResultBean querySysDictionaryByPager(SysDictionary sysDictionary, Pager pager) { + try { + ListPager sysDictionaryListPager = sysDictionaryService.querySysDictionaryByPager(sysDictionary,pager); + return ResultBean.success("查询成功").setListPager(sysDictionaryListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping("/find/top") + @ApiOperation(value = "查询顶级字典项",notes = "查询顶级字典项") + public ResultBean findSysDictionaryByTop() { + try { + List sysDictionaryList = sysDictionaryService.findSysDictionaryByTop(); + return ResultBean.success("查询成功") + .setResultList(sysDictionaryList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping("/batch-delete") + @ApiOperation(value = "批量删除消息",notes = "批量删除消息") + public ResultBean deleteSysDictionaryByIds(String[] ids){ + try{ + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + sysDictionaryService.deleteSysDictionaryByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java new file mode 100644 index 0000000..349dfa6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -0,0 +1,156 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Description : 系统对外枚举服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 15:58 + * @Modify : + **/ +@RestController +@Api(description = "系统枚举服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-enum") +public class SysEnumController extends CoreBaseController{ + + @GetMapping("/method-level") + @ApiOperation(value = "功能类型", notes = "查询全部功能类型功能") + public ResultBean getEnumMethodLevel(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.METHOD_LEVEL.values())); + } + + @GetMapping("/user-data-status") + @ApiOperation(value = "数据功能状态", notes = "查询全部数据状态功能") + public ResultBean getEnumUserDataStatus(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.DATA_STATUS.values())); + } + + @GetMapping("/data-status") + @ApiOperation(value = "数据功能状态", notes = "查询全部数据状态功能") + public ResultBean getEnumDataStatus(){ + List enumList = new ArrayList(); + enumList.add(CommonEnumUtil.DATA_STATUS.ENABLE); + enumList.add(CommonEnumUtil.DATA_STATUS.DISABLE); + return new ResultBean(true, "操作成功",enumList); + } + + @GetMapping("/organize-type") + @ApiOperation(value = "组织类型", notes = "查询全部组织类型功能") + public ResultBean getEnumOrganizeType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.ORGANIZE_YTPE.values())); + } + + @GetMapping("/task-method-type") + @ApiOperation(value = "任务类型", notes = "查询全部任务类型功能") + public ResultBean getTaskMethodType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.TASK_METHOD_TYPE.values())); + } + + @GetMapping("/user-type") + @ApiOperation(value = "用户类型", notes = "查询全部用户类型功能") + public ResultBean getUserType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.USER_TYPE.values())); + } + + @GetMapping("/user-status") + @ApiOperation(value = "用户账号状态", notes = "查询全部用户账号功能") + public ResultBean getUserStatus(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.USER_STATUS.values())); + } + + @GetMapping("/log-level") + @ApiOperation(value = "日志等级", notes = "日志等级") + public ResultBean getLogLevel(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.LOG_LEVEL.values())); + } + + @GetMapping("/soft-type") + @ApiOperation(value = "软件类型", notes = "软件类型") + public ResultBean getSoftType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.SOFT_TYPE.values())); + } + + @GetMapping("/operate-type") + @ApiOperation(value = "操作日志类型", notes = "操作日志类型") + public ResultBean getOperateType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.OPERATE_TYPE.values())); + } + + @GetMapping("/user-message-status") + @ApiOperation(value = "用户消息状态", notes = "用户消息状态") + public ResultBean getUserMessageStatus(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.MESSAGE_STATUS.values())); + } + + @GetMapping("/user-message-type") + @ApiOperation(value = "用户消息类型", notes = "用户消息类型") + public ResultBean getUserMessageType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.MESSAGE_TYPE.values())); + } + + @GetMapping("/tool-conn-type") + @ApiOperation(value = "硬件连接类型", notes = "硬件连接类型") + public ResultBean getToolConnType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.TOOL_CONN_TYPE.values())); + } + + @GetMapping("/tool-data-type") + @ApiOperation(value = "硬件数据类型", notes = "硬件数据类型") + public ResultBean getToolDataType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.TOOL_DATA_TYPE.values())); + } + + @GetMapping("/sys-config-type") + @ApiOperation(value = "系统参数类型", notes = "系统参数") + public ResultBean getSysParamType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(ImppEnumUtil.SYS_CONFIG_TYPE.values())); + } + + @GetMapping("/sys-locale-resource-type") + @ApiOperation(value = "系统资源类型") + public ResultBean getSysLocaleResourceType(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.values())); + } + + @GetMapping("/user-sex") + @ApiOperation(value = "用户性别", notes = "用户性别") + public ResultBean getUserSex(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.USER_ESX.values())); + } + + @GetMapping("/user-info-status") + @ApiOperation(value = "用户状态", notes = "用户状态") + public ResultBean getUserInfoStatus(){ + return new ResultBean(true, "操作成功", + Arrays.asList(CommonEnumUtil.USER_INFO_STATUS.values())); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java new file mode 100644 index 0000000..61cc61c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysFileController.java @@ -0,0 +1,289 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLConnection; +import java.util.List; + +/** + * @Description : 文件资源服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 16:34 + * @Modify : + **/ +@RestController +@Api(description = "文件资源服务") +@RequestMapping(CoreBaseController.BASE_URL +"/sys-file") +public class SysFileController extends CoreBaseController{ + public static final Logger LOGGER = LoggerFactory.getLogger(SysFileController.class); + + @Autowired + private ISysFileService sysFileService; + + @Autowired + private ISysDictionaryService dictionaryService; + + @Autowired + private FastDFSClient dfsClient; + + @PutMapping(value = "/update") + @ApiOperation(value = "修改文件资源",notes = "修改文件资源") + public ResultBean updateSysFile(SysFile sysFile){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件验证 + ValidatorBean.beginValid(sysFile).notNull("name",sysFile.getName()); + + sysFileService.updateSysFile(sysFile); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "根据id删除文件资源",notes = "根据id删除文件资源") + public ResultBean deleteSysFileById(@PathVariable("id") String id){ + try { + sysFileService.deleteSysFileById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部文件资源",notes = "查询全部文件资源") + public ResultBean findSysFileAll(SysFile sysFile){ + try { + List sysFileList = sysFileService.listSysFile(); + return ResultBean.success("查询成功") + .setResultList(sysFileList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询文件资源",notes = "根据id查询文件资源") + public ResultBean getSysFileById(@PathVariable("id") String id){ + try { + SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); + return ResultBean.success("查询成功") + .setResultObject(sysFile) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "文件资源复杂查询,分页,排序",notes = "文件资源复杂查询,分页,排序") + public ResultBean querySysFileByPager(SysFile sysFile, Pager pager){ + try { + ListPager sysFileListPager = sysFileService.querySysFileByPager(sysFile,pager); + return ResultBean.success("查询成功").setListPager(sysFileListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "批量删除文件资源",notes = "批量删除文件资源") + public ResultBean deleteSysFileByIds(String[] ids){ + try{ + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + sysFileService.deleteSysFileByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PostMapping("/upload") + @ApiOperation(value = "文件上传",notes = "文件上传") + public ResultBean singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { + try { + if(file.isEmpty()){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要上传的文件。") + .build(); + } + + boolean checkFileN = dictionaryService.checkFileName(file.getOriginalFilename()); + if(!checkFileN){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode()) + .setErrorDetail("文件格式不支持") + .setErrorSolution("请到字典管理中添加文件类型") + .build(); + } + + + FastDFSFile dfsFile = dfsClient.saveFile(file); + String filePath = dfsClient.getHostUi() + "/" + dfsFile.getDfsGroupName() + "/" + dfsFile.getDfsFileName(); + SysDictionary dictionary = dictionaryService.getSysDictionaryByParentCodeAndCode( + CommonConstWords.DICTIONARY_FILE_TYPE, + StringTool.getStringFileSuffix(file.getOriginalFilename(),false)); + + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(dfsFile.getDfsGroupName()); + sysFile.setDfsFileName(dfsFile.getDfsFileName()); + sysFile.setFileSize(dfsFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(file.getOriginalFilename()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + sysFile.setUserId(getSessionUser().getUserId()); + sysFile.setDownloadNum(0); + + SysFile fileDb = sysFileService.insertSysFile(sysFile); + + return ResultBean.success("上传成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(fileDb); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping("/download/{id}") + @ApiOperation(value = "文件下载",notes = "文件下载") + public ResultBean singleDownload(@PathVariable("id")String id, HttpServletResponse response) { + try { + ValidatorBean.checkIsNumber(id,"文件ID不能为空"); + + SysFile sysFile = sysFileService.getSysFileById(Long.parseLong(id)); + if(sysFile == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("文件不存在") + .build(); + } + + InputStream fis = dfsClient.downFile(sysFile.getDfsGroupName(), sysFile.getDfsFileName()); + + if(fis == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("文件已过期") + .build(); + } + + response.setContentType("application/force-download");// 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + sysFile.getFileOriginalName());// 设置文件名 + response.addHeader("Content-type", "application/octet-stream");// 设置文件名 + + BufferedInputStream bis = null; + try { + bis = new BufferedInputStream(fis); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bis != null) { + try { + bis.close(); + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + sysFile.setDownloadNum(sysFile.getDownloadNum() + 1); + return ResultBean.success("下载").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + +} \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java new file mode 100644 index 0000000..66c03ab --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleLanguageController.java @@ -0,0 +1,199 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleLanguageService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 系统语言服务 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-12 15:15 + * @Modify: + **/ +@RestController +@Api(description = "系统语言服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-locale-language") +public class SysLocaleLanguageController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysFileController.class); + + @Autowired + private ISysLocaleLanguageService sysLocaleLanguageService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "添加系统语言",notes = "添加系统语言") + public ResultBean insertSysLocaleLanguage(SysLocaleLanguage sysLocaleLanguage){ + try { + //条件验证 + ValidatorBean.beginValid(sysLocaleLanguage) + .notNull("languageName", sysLocaleLanguage.getLanguageName()) + .notNull("languageCode", sysLocaleLanguage.getLanguageCode()); + + //新增初始化 + sysLocaleLanguage.setIsDefault(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + sysLocaleLanguage.setLanguageStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + sysLocaleLanguageService.insertSysLocaleLanguage(sysLocaleLanguage); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改系统语言",notes = "修改系统语言") + public ResultBean updateSysLocaleLanguage(SysLocaleLanguage sysLocaleLanguage){ + try { + //条件验证 + ValidatorBean.beginValid(sysLocaleLanguage) + .checkNotZero("id",sysLocaleLanguage.getId()) + .notNull("languageName", sysLocaleLanguage.getLanguageName()) + .notNull("languageCode", sysLocaleLanguage.getLanguageCode()); + + sysLocaleLanguageService.updateSysLocaleLanguage(sysLocaleLanguage); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "根据id删除系统语言",notes = "根据id删除系统语言") + public ResultBean deleteSysLocaleLanguageById(@PathVariable("id") String idStr){ + try { + //条件验证 + ValidatorBean.checkNotNull(idStr,"id不能为空"); + + sysLocaleLanguageService.deleteSysLocaleLanguageById(Long.parseLong(idStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部系统语言",notes = "查询全部系统语言") + public ResultBean listSysLocaleLanguage(){ + try { + List sysLocaleLanguageList = sysLocaleLanguageService.listSysLocaleLanguage(); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(sysLocaleLanguageList); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "系统语言复杂查询,分页,排序",notes = "系统语言复杂查询,分页,排序") + public ResultBean querySysLocaleLanguageByPager(SysLocaleLanguage sysLocaleLanguage, Pager pager){ + try { + ListPager sysLocaleLanguageListPager = sysLocaleLanguageService.querySysLocaleLanguageByPager(sysLocaleLanguage,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(sysLocaleLanguageListPager); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/default/{id}") + @ApiOperation(value = "设置默认语言",notes = "设置默认语言") + public ResultBean updateSysLocaleLanguageDefaultById(@PathVariable("id") String idStr){ + try { + //条件验证 + ValidatorBean.checkNotNull(idStr,"id不能为空"); + + sysLocaleLanguageService.updateSysLocaleLanguageDefaultById(Long.parseLong(idStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/batch-delete") + @ApiOperation(value = "根据id批量删除") + public ResultBean deleteSysLocaleLanguageByIds(String[] idsStr){ + try { + if(idsStr.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + sysLocaleLanguageService.deleteSysLocaleLanguageByIds(StringTool.getArrayLong(idsStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/status/{id}/{status}") + @ApiOperation(value = "根据id修改语言状态") + public ResultBean updateSysLocaleLanguageStatusById(@PathVariable("id") String idStr,@PathVariable("status") Integer status){ + try { + //条件校验 + ValidatorBean.checkNotNull(idStr,"id不能为空"); + ValidatorBean.checkIsNumber(status,"状态不能为空"); + + sysLocaleLanguageService.updateSysLocaleLanguageStatusById(Long.parseLong(idStr),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/batch-status") + @ApiOperation(value = "根据批量修改语言状态") + public ResultBean updateSysLocaleLanguageStatusByIds(String[] idsStr,Integer status){ + try { + if(idsStr.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + ValidatorBean.checkNotZero(status,"状态不能为0"); + + sysLocaleLanguageService.updateSysLocaleLanguageStatusByIds(StringTool.getArrayLong(idsStr),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java new file mode 100644 index 0000000..b79e05e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java @@ -0,0 +1,195 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleResourceService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; + +/** + * @Description :系统语言资源服务 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-12 16:34 + * @Modify: + **/ +@RestController +@Api(description = "系统语言资源服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-locale-resource") +public class SysLocaleResourceController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysFileController.class); + + @Resource(name="redisRes") + private ImppRedis redisRes; + + @Autowired + private ISysLocaleResourceService sysLocaleResourceService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增语言资源",notes = "新增语言资源") + public ResultBean insertSysLocaleResource(SysLocaleResource sysLocaleResource){ + try { + //条件验证 + ValidatorBean.beginValid(sysLocaleResource) + .notNull("resourceKey",sysLocaleResource.getResourceKey()) + .notNull("languageCode",sysLocaleResource.getLanguageCode()) + .checkNotZero("resourceType",sysLocaleResource.getResourceType()) + .notNull("resourceValue",sysLocaleResource.getResourceValue()); + + //新增初始化 +// ConvertBean.modelInitialize(sysLocaleResource, sessionUser); + sysLocaleResource.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + sysLocaleResource = sysLocaleResourceService.insertSysLocaleResource(sysLocaleResource); + + // 放入缓存 + HashMap resource = new HashMap(); + resource.put(sysLocaleResource.getLanguageCode(),sysLocaleResource.getResourceValue()); + redisRes.putHashMap(sysLocaleResource.getResourceKey(),resource,0); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改语言资源",notes = "修改语言资源") + public ResultBean updateSysLocaleResource(SysLocaleResource sysLocaleResource){ + try { + //条件验证 + ValidatorBean.beginValid(sysLocaleResource) + .checkNotZero("id",sysLocaleResource.getId()) + .notNull("resourceKey",sysLocaleResource.getResourceKey()) + .notNull("languageCode",sysLocaleResource.getLanguageCode()) + .checkNotZero("resourceType",sysLocaleResource.getResourceType()) + .notNull("resourceValue",sysLocaleResource.getResourceValue()); + + //修改初始化 +// ConvertBean.modelUpdate(sysLocaleResource, sessionUser); + + sysLocaleResourceService.updateSysLocaleResource(sysLocaleResource); + + // 放入缓存 + HashMap resource = new HashMap(); + resource.put(sysLocaleResource.getLanguageCode(),sysLocaleResource.getResourceValue()); + redisRes.putHashMap(sysLocaleResource.getResourceKey(),resource,0); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "根据id删除系统语言资源",notes = "根据id删除系统语言资源") + public ResultBean deleteSysLocaleResourceById(@PathVariable("id") String idStr){ + try { + //条件验证 + ValidatorBean.checkNotNull(idStr,"id不能为空"); + + sysLocaleResourceService.deleteSysLocaleResourceById(Long.parseLong(idStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部语言资源",notes = "查询全部语言资源") + public ResultBean listSysLocaleResource(){ + try { + List sysLocaleLanguageList = sysLocaleResourceService.listSysLocaleResource(); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(sysLocaleLanguageList); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "语言资源复杂查询,分页,排序",notes = "语言资源复杂查询,分页,排序") + public ResultBean querySysLocaleResourceByPager(SysLocaleResource sysLocaleResource, Pager pager){ + try { + ListPager sysLocaleLanguageListPager = sysLocaleResourceService.querySysLocaleResourceByPager(sysLocaleResource,pager); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(sysLocaleLanguageListPager); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "批量删除系统语言资源",notes = "批量删除系统语言资源") + public ResultBean deleteSysLocaleResourceByIds(String[] idsStr){ + try { + if(idsStr.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + sysLocaleResourceService.deleteSysLocaleResourceByIds(StringTool.getArrayLong(idsStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "batch-insert") + @ApiOperation(value = "批量添加系统资源") + public ResultBean insertSysLocaleResourceList(@RequestBody List sysLocaleResourcesList){ + try { + if(sysLocaleResourcesList.size() == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + sysLocaleResourceService.insertSysLocaleResourceList(sysLocaleResourcesList); + + HashMap resource; + for (SysLocaleResource item:sysLocaleResourcesList) { + resource = new HashMap(); + resource.put(item.getLanguageCode(),item.getResourceValue()); + redisRes.putHashMap(item.getResourceKey(),resource,0); + } + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java new file mode 100644 index 0000000..7f866e1 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogExceptionController.java @@ -0,0 +1,49 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogExceptionService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLogException; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 系统异常日志服务 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-19 18:42 + * @Modify: + **/ +@RestController +@Api(description = "系统异常日志服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-log-exception") +public class SysLogExceptionController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogExceptionController.class); + + @Autowired + private ISysLogExceptionService sysLogExceptionService; + + @GetMapping(value = "/query") + @ApiOperation(value = "异常日志复杂查询,分页,排序",notes = "异常日志复杂查询,分页,排序") + public ResultBean querySysLogOperateByPager(SysLogException sysLogException, Pager pager){ + try { + ListPager logExceptionList = sysLogExceptionService.querySysLogExceptionByPager(sysLogException, pager); + return ResultBean.success("查询成功").setListPager(logExceptionList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java new file mode 100644 index 0000000..d16a574 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogOperateController.java @@ -0,0 +1,114 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogOperateService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLogOperate; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.websocket.server.PathParam; +import java.util.List; + +/** + * @Description : 操作日志服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 14:08 + * @Modify : + **/ +@RestController +@Api(description = "操作日志") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-log-operate") +public class SysLogOperateController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogOperateController.class); + + @Autowired + private ISysLogOperateService logOperateService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "添加操作日志",notes = "添加操作日志") + public ResultBean insertSysLogOperateController(SysLogOperate logOperate){ + try { + logOperateService.insertSysLogOperate(logOperate); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete") + @ApiOperation(value = "根据id删除操作日志",notes = "根据id删除操作日志") + public ResultBean deleteSysLogOperateById(String id){ + try { + // 条件验证 + ValidatorBean.checkNotNull(id,"id不能为空!"); + + logOperateService.deleteSysLogOperateById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部操作日志",notes = "查询全部操作日志") + public ResultBean findSysLogOperateAll(){ + try { + List logOperateList = logOperateService.listSysLogOperate(); + return ResultBean.success("查询成功").setResultList(logOperateList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询操作日志",notes = "根据id查询操作日志") + public ResultBean getSysLogOperateById(@PathParam("id") String id){ + try{ + SysLogOperate logOperate = logOperateService.getSysLogOperateById(Long.parseLong(id)); + if (logOperate != null) { + return ResultBean.success("查询成功") + .setResultObject(logOperate) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("操作日志不存在") + .setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "操作日志复杂查询,分页,排序",notes = "操作日志复杂查询,分页,排序") + public ResultBean querySysLogOperateByPager(SysLogOperate logOperate, Pager pager){ + try { + ListPager logSystemList = logOperateService.querySysLogOperateByPager(logOperate, pager); + return ResultBean.success("查询成功").setListPager(logSystemList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java new file mode 100644 index 0000000..2941e13 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLogSystemController.java @@ -0,0 +1,112 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLogSystem; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 系统日志服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 10:50 + * @Modify : + **/ +@RestController +@Api(description = "系统日志服务") +@RequestMapping(CoreBaseController.BASE_URL +"/sys-log-system") +public class SysLogSystemController extends CoreBaseController{ + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogSystemController.class); + + @Autowired + private ISysLogSystemService logSystemService; + + + @PostMapping(value = "/insert") + @ApiOperation(value="新增系统日志",notes = "新增系统日志") + public ResultBean insertSysLogSystem(SysLogSystem logSystem) { + try { + logSystemService.insertSysLogSystem(logSystem); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete") + @ApiOperation(value = "删除系统日志",notes = "删除系统日志") + public ResultBean deleteSysLogSystemById(String id) { + try { + // 条件校验 + ValidatorBean.checkNotNull(id,"id不能为空"); + + logSystemService.deleteSysLogSystemById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部系统日志",notes = "查询全部系统日志") + public ResultBean findSysLogSystemAll(){ + try { + List logSystemList = logSystemService.listSysLogSystem(); + return ResultBean.success("查询成功").setResultList(logSystemList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get") + @ApiOperation(value = "根据id查询系统日志",notes = "根据id查询系统日志") + public ResultBean getSysLogSystemById(String id){ + try { + SysLogSystem logSystem = logSystemService.getSysLogSystemById(Long.parseLong(id)); + return ResultBean.success("查询成功").setResultObject(logSystem).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 系统日志分页复杂查询 + * @param logSystem + * @param pager + * @return + */ + @GetMapping("/query") + @ApiOperation(value = "系统日志分页复杂查询",notes = "系统日志分页复杂查询") + public ResultBean querySysLogSystemByPager(SysLogSystem logSystem, Pager pager){ + try { + ListPager logSystemList = logSystemService.querySysLogSystemByPager(logSystem, pager); + return ResultBean.success("查询成功").setListPager(logSystemList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java new file mode 100644 index 0000000..a926a31 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java @@ -0,0 +1,231 @@ + package cn.estsh.i3plus.core.apiservice.controller.busi; + + import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; + import cn.estsh.i3plus.platform.common.convert.ConvertBean; + import cn.estsh.i3plus.platform.common.tool.StringTool; + import cn.estsh.i3plus.pojo.base.bean.ListPager; + import cn.estsh.i3plus.pojo.base.common.Pager; + import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; + import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; + import cn.estsh.i3plus.pojo.platform.bean.SysMenu; + import cn.estsh.impp.framework.base.controller.CoreBaseController; + import cn.estsh.impp.framework.boot.exception.ImppBusiException; + import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; + import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; + import cn.estsh.impp.framework.boot.util.ResultBean; + import cn.estsh.impp.framework.boot.util.ValidatorBean; + import io.swagger.annotations.Api; + import io.swagger.annotations.ApiOperation; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.web.bind.annotation.*; + + import java.util.List; + +/** + * @Description : 系统功能对外接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 15:18:14.982 + * @Modify : + **/ +@RestController +@Api(description = "系统功能服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-menu") +public class SysMenuController extends CoreBaseController { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysMenuController.class); + + @Autowired + private ISysMenuService sysMenuService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增系统功能", notes = "系统功能") + public ResultBean insertSysMenu(SysMenu menu) { + try { + //条件验证 + ValidatorBean.beginValid(menu) + .notNull("name", menu.getName()) + .notNull("menuCode", menu.getMenuCode()) + .notNull("menuType", menu.getMenuType()); + + //新增初始化 + ConvertBean.modelInitialize(menu, getSessionUser()); + if(menu.getParentId() == null || menu.getParentId().intValue() == 0){ + menu.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + } + menu.setMenuStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); + + menu = sysMenuService.insertSysMenu(menu); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(menu); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep).build(); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改系统功能", notes = "系统功能") + public ResultBean updateSysMenu(SysMenu sysMenu) { + try { + // 数据校验 + ValidatorBean.beginValid(sysMenu) + .notNull("id", sysMenu.getId()) + .notNull("menuType", sysMenu.getMenuType()) + .notNull("menuCode", sysMenu.getMenuCode()) + .notNull("name", sysMenu.getName()); + + ConvertBean.modelUpdate(sysMenu, getSessionUser()); + + sysMenuService.updateSysMenu(sysMenu); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep).build(); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除系统功能", notes = "删除系统功能") + public ResultBean deleteSysMenu(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkIsNumber(id, "系统功能id 不能为空"); + + sysMenuService.deleteSysMenuById(Long.parseLong(id)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询所有系统功能", notes = "查询所有系统功能") + public ResultBean findAll() { + try { + List list = sysMenuService.findSysMenuAll(); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/query") + @ApiOperation(value="查询权限",notes="组合查询权限,外带分页功能") + public ResultBean querySysMenu(SysMenu menu, Pager pager){ + try{ + ListPager listPager = sysMenuService.querySysMenu(menu, pager); + + return ResultBean.success("操作成功").setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "查询系统功能", notes = "查询根据ID查询系统功能") + public ResultBean getById(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "功能id 不能为空"); + + SysMenu sysMenu = sysMenuService.getSysMenuById(Long.parseLong(id)); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(sysMenu); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + + } + + @PutMapping(value = "/status") + @ApiOperation(value = "修改系统功能状态", notes = "根据ID修改系统功能状态") + public ResultBean updateStatus(String id,int status) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "功能id 不能为空"); + ValidatorBean.checkNotZero(status, "功能状态不能为空"); + + sysMenuService.updateSysMenuStatus(Long.parseLong(id),status,getSessionUser()); + return new ResultBean(true); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/batch-status") + @ApiOperation(value = "批量修改系统功能状态", notes = "根据ID修改系统功能状态") + public ResultBean updateBatchStatus(String[] ids,int status) { + try { + // 数据校验 + ids = ConvertBean.modelSafeArrayNumber(ids,true); + ValidatorBean.checkNotNull(ids, "功能id 不能为空"); + ValidatorBean.checkNotZero(status, "功能状态不能为空"); + + sysMenuService.updateSysMenuStatusByIds(StringTool.getArrayLong(ids),status,getSessionUser()); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteSysMenuByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + sysMenuService.deleteSysMenuByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java new file mode 100644 index 0000000..1b350ed --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java @@ -0,0 +1,294 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * @Description : 消息管理服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 19:03 + * @Modify : + **/ +@RestController +@RequestMapping(CoreBaseController.BASE_URL) +@Api(description = "消息管理服务") +public class SysMessageController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysMessageController.class); + + @Autowired + private ISysMessageService sysMessageService; + + @PostMapping(value = "/sys-message/insert") + @ApiOperation(value = "新增消息",notes = "新增消息") + public ResultBean insertSysMessage(SysMessage sysMessage){ + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 条件校验 + ValidatorBean.beginValid(sysMessage) + .notNull("messageTitle",sysMessage.getMessageTitle()) + .notNull("messageContent",sysMessage.getMessageContent()) + .checkNotZero("messageType",sysMessage.getMessageType()) + .notNull("messageReceiversId",sysMessage.getMessageReceiversId()); + + // 设置发件人名称 + sysMessage.setMessageSenderId(getSessionUser().getUserId()); + sysMessage.setMessageSenderNameRdd(getSessionUser().getUserName()); + sysMessage.setMessageSendTime(sdf.format(new Date())); + sysMessage.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getValue()); + + ConvertBean.modelInitialize(sysMessage,getSessionUser()); + + sysMessageService.doSendSysMessage(sysMessage); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/sys-message/delete/{id}") + @ApiOperation(value = "根据id删除消息",notes = "根据id删除消息") + public ResultBean deleteSysMessageById(@PathVariable("id") String id){ + try { + // 条件校验 + ValidatorBean.checkNotNull(id,"id不能为空"); + + sysMessageService.deleteSysMessageById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/sys-message/update") + @ApiOperation(value = "修改信息",notes = "修改信息") + public ResultBean updateSysMessage(SysMessage sysMessage){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件校验 + ValidatorBean.beginValid(sysMessage) + .notNull("messageTitle",sysMessage.getMessageTitle()) + .notNull("messageContent",sysMessage.getMessageContent()) + .checkNotZero("messageType",sysMessage.getMessageType()); + + sysMessageService.updateSysMessage(sysMessage); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/sys-message/list") + @ApiOperation(value = "查询全部消息",notes = "查询全部消息") + public ResultBean findSysMessageAll(){ + try { + List sysMessageList = sysMessageService.listSysMessage(); + return ResultBean.success("查询成功").setResultList(sysMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/sys-message/get/{id}") + @ApiOperation(value = "根据id查询消息",notes = "根据id查询消息") + public ResultBean getSysMessageById(@PathVariable("id") String idStr){ + try { + SysMessage sysMessageList = sysMessageService.getSysMessageById(Long.parseLong(idStr)); + if (sysMessageList != null) { + return ResultBean.success("查询成功").setResultObject(sysMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/sys-message/query") + @ApiOperation(value = "消息复杂查询,分页,排序",notes = "消息复杂查询,分页,排序") + public ResultBean querySysMessageByPager(SysMessage sysMessage, Pager pager){ + try { + ListPager sysMessageListPager = sysMessageService.querySysMessageByPager(sysMessage,pager); + return ResultBean.success("查询成功").setListPager(sysMessageListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/sys-message/batch-delete") + @ApiOperation(value = "批量删除消息",notes = "批量删除消息") + public ResultBean deleteSysMessageByIds(String[] ids){ + try{ + // 条件判断 + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + sysMessageService.deleteSysMessageByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/user-message/query-inbox") + @ApiOperation(value = "查询用户收件箱,分页,排序") + public ResultBean queryInboxByPager(SysRefUserMessage sysRefUserMessage,Pager pager){ + try { + // 设置消息类型为站内信 + sysRefUserMessage.setMessageTypeRdd(ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()); + sysRefUserMessage.setReceiverId(getSessionUser().getUser().getId()); + + ListPager userMessageList = sysMessageService.querySysRefUserMessageByPager(sysRefUserMessage,pager); + return ResultBean.success("查询成功").setListPager(userMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/user-message/query-outbox") + @ApiOperation(value = "查询用户发件箱,分页,排序") + public ResultBean querySysRefUserMessageByPager(SysMessage sysMessage,Pager pager){ + try { + // 发件人为当前用户 + sysMessage.setMessageSenderId(getSessionUser().getUser().getId()); + + ListPager sysMessageListPager = sysMessageService.querySysMessageByPager(sysMessage,pager); + return ResultBean.success("查询成功").setListPager(sysMessageListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/user-message/find-unread") + @ApiOperation(value = "查看用户未读站内信") + public ResultBean findUnreadUserMessage(){ + try { + List userMessageList = sysMessageService.findSysRefUserMessageByUserIdAndStatus(getSessionUser().getUserInfo().getId(), + ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); + return ResultBean.success("查询成功").setResultList(userMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/user-message/get/{id}") + @ApiOperation(value = "根据id查询消息",notes = "根据id查询消息") + public ResultBean getUserMessageById(@PathVariable("id") String idStr){ + try { + ValidatorBean.checkNotNull(idStr,"id"); + + SysMessage userMessage =sysMessageService.getSysMessageByRefUserMessageId(Long.parseLong(idStr)); + if (userMessage != null) { + return ResultBean.success("查询成功").setResultObject(userMessage).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/user-message/batch-status") + @ApiOperation(value = "批量切换消息状态",notes = "批量切换消息状态") + public ResultBean updateSysMessageStatusByIds(String[] ids,Integer status){ + try{ + // 条件判断 + ValidatorBean.checkNotZero(status,"状态不能为空"); + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要操作的资源。") + .build(); + } + sysMessageService.updateSysRefUserMessageStatusByIds(StringTool.getArrayLong(ids),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/user-message/delete-inbox/{id}") + @ApiOperation(value = "根据id删除用户消息") + public ResultBean deleteUserMessageById(@PathVariable("id") String idStr){ + try { + sysMessageService.deleteSysRefUserMessageStatusByIds(new Long[]{Long.parseLong(idStr)}); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/user-message/batch-delete-inbox") + @ApiOperation(value = "根据id批量删除用户消息") + public ResultBean deleteUserMessageByIds(String[] idsStr){ + try { + sysMessageService.deleteSysRefUserMessageStatusByIds(StringTool.getArrayLong(idsStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java new file mode 100644 index 0000000..b1a696e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrderNoRuleController.java @@ -0,0 +1,355 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService; +import cn.estsh.i3plus.core.apiservice.util.ExcelUtil; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient; +import cn.estsh.impp.framework.boot.fastdfs.FastDFSFile; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.netflix.discovery.converters.Auto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description :系统单号规则管理服务 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 18:20 + * @Modify: + **/ +@RestController +@Api(description = "系统单号规则管理服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-order-no-rule") +public class SysOrderNoRuleController extends CoreBaseController { + + @Autowired + ISysOrderNoRuleService sysOrderNoRuleService; + @Autowired + ISysDictionaryService sysDictionaryService; + @Autowired + ISysConfigService sysConfigService; + @Autowired + ISysFileService sysFileService; + @Autowired + private FastDFSClient dfsClient; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增单号规则") + public ResultBean insertSysOrderNoRule(SysOrderNoRule sysOrderNoRule){ + try { + // 添加校验 + validatorSysOrderNoRule(sysOrderNoRule); + + sysOrderNoRule.setOrderNoRuleStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + sysOrderNoRule.setSerialNo(CommonEnumUtil.PARENT.DEFAULT.getValue()); + + sysOrderNoRuleService.insertSysOrderNoRule(sysOrderNoRule); + return ResultBean.success("操作成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改单号规则") + public ResultBean updateSysOrderNoRule(SysOrderNoRule sysOrderNoRule){ + try { + ValidatorBean.beginValid(sysOrderNoRule) + .notNull("id",sysOrderNoRule.getId()) + .notNull("name",sysOrderNoRule.getName()) + .notNull("orderNoRuleCode",sysOrderNoRule.getOrderNoRuleCode()) + .notNull("orderNoRule",sysOrderNoRule.getOrderNoRule()) + .checkNotZero("serialNoSeed",sysOrderNoRule.getSerialNoSeed()) + .checkNotZero("serialNoIncrement",sysOrderNoRule.getSerialNoIncrement()) + .checkNotZero("serialNoLength",sysOrderNoRule.getSerialNoLength()) + .checkNotZero("isCycle",sysOrderNoRule.getIsCycle()); + + sysOrderNoRuleService.updateSysOrderNoRule(sysOrderNoRule); + return ResultBean.success("操作成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id获取编号规则") + public ResultBean getSysOrderNoRuleById(@PathVariable("id") String idStr){ + try { + ValidatorBean.checkNotNull(idStr,"id不能为空"); + + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.getSysOrderNoRuleById(Long.parseLong(idStr)); + if (sysOrderNoRule != null) { + return ResultBean.success("查询成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "根据id删除单号规则") + public ResultBean deleteSysOrderNoRuleById(@PathVariable("id") String idStr){ + try { + ValidatorBean.checkNotNull(idStr,"id不能为空"); + + sysOrderNoRuleService.deleteSysOrderNoRuleById(Long.parseLong(idStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get-order-no/{code}") + @ApiOperation(value = "根据单号规则代码,获取单号") + public ResultBean getOrderNo(@PathVariable("code") String code){ + try { + ValidatorBean.checkNotNull(code,"code不能为空"); + + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleService.getSysOrderNoRuleCode(code); + return ResultBean.success("查询成功").setResultObject(sysOrderNoRule).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "单号规则复杂查询,分页,排序") + public ResultBean querySysOrderNoRuleByPager(SysOrderNoRule sysOrderNoRule, Pager pager){ + try { + ListPager sysOrderNoRuleList = sysOrderNoRuleService.querySysOrderNoRuleByPager(sysOrderNoRule, pager); + return ResultBean.success("查询成功").setListPager(sysOrderNoRuleList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/status/{id}/{status}") + @ApiOperation(value = "根据id修改规则状态") + public ResultBean updateSysOrderNoRuleStatusById(@PathVariable("id") String id,@PathVariable("status") Integer status){ + try { + ValidatorBean.checkNotNull(id,"code不能为空"); + ValidatorBean.checkNotZero(status,"code不能为空"); + + sysOrderNoRuleService.updateSysOrderNoRuleCodeStatusById(Long.parseLong(id),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "批量删除单号规则") + public ResultBean deleteSysOrderNoRuleByIds(String[] idsStr){ + try { + if(idsStr.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + sysOrderNoRuleService.deleteSysOrderNoRuleByIds(StringTool.getArrayLong(idsStr)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/batch-status") + @ApiOperation(value = "根据id批量修改规则状态") + public ResultBean updateSysOrderNoRuleStatusByIds(String[] idsStr,Integer status){ + try { + if(idsStr.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + ValidatorBean.checkIsNumber(status,"状态不能为空!"); + + sysOrderNoRuleService.updateSysOrderNoRuleByIds(StringTool.getArrayLong(idsStr),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/export") + @ApiOperation(value = "导出单号规则") + public ResultBean exportSysOrderNoRule(SysOrderNoRule sysOrderNoRule, String[] colName){ + try { + Pager pager = new Pager(); + pager.setCurrentPage(1); + pager.setPageSize(Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_EXPORT_MAX_ROW).getConfigValue())); + ListPager listPager; + String[] fileAbsolutePath; + List result = new ArrayList(); + do { + listPager = sysOrderNoRuleService.querySysOrderNoRuleByPager(sysOrderNoRule, pager); + pager = listPager.getObjectPager(); + + // 上传至文件服务器 + FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + pager.getCurrentPage() + ".xls", + ExcelUtil.exportData(listPager.getObjectList(),SysOrderNoRule.class,colName),"xls"); + + fileAbsolutePath = dfsClient.upload(fastDFSFile); + + // 保证系统文件表中 + String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; + SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( + CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(fileAbsolutePath[0]); + sysFile.setDfsFileName(fileAbsolutePath[1]); + sysFile.setFileSize(fastDFSFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(fastDFSFile.getName()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + sysFile.setDownloadNum(0); + result.add(sysFileService.insertSysFile(sysFile)); + + pager.setCurrentPage(pager.getCurrentPage() + 1); + } while (pager.getCurrentPage() <= pager.getTotalPages()); + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(result); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/import") + @ApiOperation(value = "导入单号规则") + public ResultBean importSysOrderNoRule(@RequestParam("file") MultipartFile file){ + try { + List sysOrderNoRuleList = ExcelUtil.importData(file.getOriginalFilename(),file.getInputStream(),SysOrderNoRule.class); + for (SysOrderNoRule item : sysOrderNoRuleList) { + //校验及初始化数据 + validatorSysOrderNoRule(item); + item.setOrderNoRuleStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + item.setSerialNo(CommonEnumUtil.PARENT.DEFAULT.getValue()); + + sysOrderNoRuleService.insertSysOrderNoRule(item); + } + + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/down-template") + @ApiOperation(value = "下载导入模板") + public ResultBean downSysOrderNoRuleTemplate(){ + try { + FastDFSFile fastDFSFile = new FastDFSFile(SysOrderNoRule.class.getSimpleName() + "ImportTemplate.xls", + ExcelUtil.importTemplate(SysOrderNoRule.class),"xls"); + + String[] fileAbsolutePath = dfsClient.upload(fastDFSFile); + + // 保证系统文件表中 + String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1]; + SysDictionary dictionary = sysDictionaryService.getSysDictionaryByParentCodeAndCode( + CommonConstWords.DICTIONARY_FILE_TYPE,fastDFSFile.getExt()); + + SysFile sysFile = new SysFile(); + sysFile.setDfsGroupName(fileAbsolutePath[0]); + sysFile.setDfsFileName(fileAbsolutePath[1]); + sysFile.setFileSize(fastDFSFile.getContent().length); + sysFile.setFilePath(filePath); + sysFile.setFileOriginalName(fastDFSFile.getName()); + sysFile.setFileTypeId(dictionary.getId()); + sysFile.setFileTypeName(dictionary.getName()); + sysFile.setDownloadNum(0); + sysFileService.insertSysFile(sysFile); + + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysFile); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/get-col") + @ApiOperation(value = "获取单号规则字段") + public ResultBean getSysOrderNoRuleColName(){ + try { + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(ExcelUtil.getColName(SysOrderNoRule.class)); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 对象添加校验 + * @param sysOrderNoRule 校验对象 + * @throws NoSuchFieldException + */ + private void validatorSysOrderNoRule(SysOrderNoRule sysOrderNoRule) throws NoSuchFieldException { + ValidatorBean.beginValid(sysOrderNoRule) + .notNull("name",sysOrderNoRule.getName()) + .notNull("orderNoRuleCode",sysOrderNoRule.getOrderNoRuleCode()) + .notNull("orderNoRule",sysOrderNoRule.getOrderNoRule()) + .checkNotZero("serialNoSeed",sysOrderNoRule.getSerialNoSeed()) + .checkNotZero("serialNoIncrement",sysOrderNoRule.getSerialNoIncrement()) + .checkNotZero("serialNoLength",sysOrderNoRule.getSerialNoLength()) + .checkNotZero("isCycle",sysOrderNoRule.getIsCycle()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrganizeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrganizeController.java new file mode 100644 index 0000000..4720e11 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysOrganizeController.java @@ -0,0 +1,215 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysOrganizeService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 组织对外接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:42.972 + * @Modify : + **/ +@RestController +@Api(description = "组织") +@RequestMapping(CoreBaseController.BASE_URL +"/organize") +public class SysOrganizeController extends CoreBaseController{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysOrganizeController.class); + + @Autowired + private ISysOrganizeService organizeService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增组织", notes = "组织") + public ResultBean insertSysOrganize(SysOrganize organize) { + try { + //条件验证 + ValidatorBean.beginValid(organize) + .notNull("name", organize.getName()) + .notNull("organizeCode", organize.getOrganizeCode()) + .notNull("organizeType", organize.getOrganizeType()); + + //新增初始化 + ConvertBean.modelInitialize(organize, AuthUtil.getSessionUser()); + if(organize.getParentId() == null || organize.getParentId() <= 0){ + organize.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + organize.setParentNameRdd("顶级组织"); + } + + organize = organizeService.insertSysOrganize(organize); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(organize); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改组织", notes = "组织") + public ResultBean updateSysOrganize(SysOrganize organize) { + try { + // 数据校验 + ValidatorBean.beginValid(organize) + .notNull("id", organize.getId()) + .notNull("name", organize.getName()) + .notNull("organizeCode", organize.getOrganizeCode()) + .notNull("organizeType", organize.getOrganizeType()); + + ConvertBean.modelUpdate(organize, AuthUtil.getSessionUser()); + if(organize.getParentId() == null || organize.getParentId() <= 0){ + organize.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + organize.setParentNameRdd("顶级组织"); + } + + organizeService.updateSysOrganize(organize); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除组织", notes = "删除组织") + public ResultBean deleteSysOrganize(@PathVariable("id") String idStr) { + try { + // 数据校验 + ValidatorBean.checkIsNumber(idStr.toString(), "您要删除的组织不存在"); + + organizeService.deleteSysOrganizeById(Long.parseLong(idStr)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询SysOrganize", notes = "查询所有组织") + public ResultBean findSysOrganizeAll() { + try { + List list = organizeService.listSysOrganize(); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/query") + @ApiOperation(value="查询组织",notes="组合查询组织外加分页") + public ResultBean queryPosition(SysOrganize organize, Pager pager){ + try{ + ListPager listPager = organizeService.querySysOrganize(organize, pager); + return ResultBean.success("操作成功") + .setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "查询组织", notes = "查询根据ID查询组织") + public ResultBean getBySysOrganizeId(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "角色id 不能为空"); + + SysOrganize organize = organizeService.getSysOrganizeById(Long.parseLong(id)); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(organize); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + e.printStackTrace(); + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/status") + @ApiOperation(value = "修改组织状态", notes = "根据ID修改组织状态") + public ResultBean updateStatus(String id, int status) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "组织id 不能为空"); + ValidatorBean.checkNotZero(status, "组织状态不能为空"); + + organizeService.updateSysOrganizeStatus(Long.parseLong(id), status, AuthUtil.getSessionUser()); + return new ResultBean(true); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteSysOrganizeByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + organizeService.deleteSysOrganizeByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java new file mode 100644 index 0000000..7db1cf4 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPositionController.java @@ -0,0 +1,201 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysPosition; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 岗位信息 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-19 17:05 + * @Modify : + **/ +@RestController +@Api(description = "岗位管理服务") +@RequestMapping(CoreBaseController.BASE_URL +"/position") +public class SysPositionController extends CoreBaseController { + public static final Logger LOGGER = LoggerFactory.getLogger(SysPositionController.class); + + @Autowired + private ISysPositionService positionService; + + @PostMapping(value="/insert") + @ApiOperation(value="添加岗位",notes="返回内容添加岗位") + public ResultBean insertSysPosition(SysPosition position){ + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(position) + .notNull("name",position.getName()) + .notNull("positionCode",position.getPositionCode()); + + ConvertBean.modelInitialize(position,user); + if(position.getParentId() == null || position.getParentId() <= 0){ + position.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + position.setParentNameRdd("顶级岗位"); + } + + SysPosition pos = positionService.insertSysPosition(position); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(pos); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value="/update") + @ApiOperation(value="修改岗位",notes="根据岗位id修改信息") + public ResultBean updateSysPositionById(SysPosition position){ + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(position) + .notNull("id",position.getId()) + .notNull("name",position.getName()) + .notNull("positionCode",position.getPositionCode()); + + //修改初始化 + ConvertBean.modelUpdate(position,user); + if(position.getParentId() == null || position.getParentId() <= 0){ + position.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + position.setParentNameRdd("顶级岗位"); + } + + positionService.updateSysPosition(position); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @DeleteMapping(value="/delete/{id}") + @ApiOperation(value="删除岗位",notes="根据岗位id删除信息") + public ResultBean deleteSysPosition(@PathVariable("id") String id){ + try { + //条件验证 + ValidatorBean.checkNotNull(id,"id为空"); + + positionService.deleteSysPositionById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @GetMapping(value="/list") + @ApiOperation(value="查询所有岗位",notes="查询所有岗位") + public ResultBean findSysPositionAll(){ + try{ + List positionList = positionService.listSysPosition(); + return ResultBean.success("操作成功").setResultList(positionList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/query") + @ApiOperation(value="查询岗位",notes="复杂查询岗位带分页") + public ResultBean querySysPosition(SysPosition position,Pager pager){ + try{ + ListPager listPager = positionService.querySysPosition(position, pager); + return ResultBean.success("操作成功").setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/get/{id}") + @ApiOperation(value="根据id查询岗位",notes="根据id查询岗位") + public ResultBean getSysPositionById(@PathVariable("id") String id){ + try{ + ValidatorBean.checkNotNull(id, "id 不能为空"); + + SysPosition position = positionService.getSysPositionById(Long.parseLong(id)); + ValidatorBean.beginValid(position) + .notNull("id",position.getId()); + + return ResultBean.success("查询成功") + .setResultObject(position) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteSysPositionByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + positionService.deleteSysPositionByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java new file mode 100644 index 0000000..d14399b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java @@ -0,0 +1,298 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysRefRoleMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysRole; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 系统角色对外接口 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.790 + * @Modify : + **/ +@RestController +@Api(description = "系统角色服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-role") +public class SysRoleController extends CoreBaseController{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysRoleController.class); + + @Autowired + private ISysRoleService sysRoleService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增系统角色", notes = "系统角色") + public ResultBean insertSysRole(SysRole role) { + try { + //条件验证 + ValidatorBean.beginValid(role) + .notNull("name", role.getName()); + + //新增初始化 + ConvertBean.modelInitialize(role, AuthUtil.getSessionUser()); + role.setRoleStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); + role.setMenuNumber(0); + role.setModuleNumber(0); + + role = sysRoleService.insertSysRole(role); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(role); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep).build(); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改系统角色", notes = "系统角色") + public ResultBean updateSysRole(SysRole role) { + try { + // 数据校验 + ValidatorBean.beginValid(role) + .notNull("id", role.getId()) + .notNull("name", role.getName()); + + ConvertBean.modelUpdate(role, AuthUtil.getSessionUser()); + + sysRoleService.updateSysRole(role); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep).build(); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除系统角色", notes = "删除系统角色") + public ResultBean deleteSysRole(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "角色id 不能为空"); + + sysRoleService.deleteSysRoleById(Long.parseLong(id)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询SysRole", notes = "查询所有系统角色") + public ResultBean findAll() { + try { + List list = sysRoleService.findSysRoleAll(); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/find-ref-menu/{roleId}") + @ApiOperation(value = "查询角色的所有角色权限关系", notes = "查询角色的所有角色权限关系") + public ResultBean findRefRoleMenu(@PathVariable("roleId") String roleId) { + try { + ValidatorBean.checkNotNull(roleId, "角色id 不能为空"); + + List list = sysRoleService.findSysRefRoleMenuByRoleId(Long.parseLong(roleId)); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/query") + @ApiOperation(value="查询角色",notes="组合查询角色,外带分页功能") + public ResultBean querySysRole(SysRole role, Pager pager){ + try{ + ListPager listPager = sysRoleService.querySysRole(role, pager); + + return ResultBean.success("操作成功").setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "查询系统角色", notes = "查询根据ID查询系统角色") + public ResultBean getById(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "角色id 不能为空"); + + SysRole role = sysRoleService.getSysRoleById(Long.parseLong(id)); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(role); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/status") + @ApiOperation(value = "修改角色状态", notes = "根据ID修改角色状态") + public ResultBean updateStatus(String id, int status) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "角色id 不能为空"); + ValidatorBean.checkNotZero(status, "角色状态不能为空"); + + sysRoleService.updateSysRoleStatus(Long.parseLong(id), status, AuthUtil.getSessionUser()); + return new ResultBean(true); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/batch-status") + @ApiOperation(value = "批量修改系统角色状态", notes = "根据ID修改系统角色状态") + public ResultBean updateBatchStatus(String[] ids,int status) { + try { + ids = ConvertBean.modelSafeArrayNumber(ids,true); + + // 数据校验 + ValidatorBean.checkNotNull(ids, "角色id 不能为空"); + ValidatorBean.checkNotZero(status, "角色状态不能为空"); + + sysRoleService.updateSysRoleStatusByIds(StringTool.getArrayLong(ids),status,AuthUtil.getSessionUser()); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/ref-menu/insert") + @ApiOperation(value = "新增角色权限关系", notes = "新增角色权限关系") + public ResultBean insertRefMenu(String roleId,String[] refIds) { + try { + // 数据校验 + ValidatorBean.checkNotNull(roleId, "角色roleId 不能为空"); + + ConvertBean.modelSafeArrayNumber(refIds,true); + + sysRoleService.refreshSysRoleRef(Long.parseLong(roleId),StringTool.getArrayLong(refIds),AuthUtil.getSessionUser().getUserName()); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/ref-menu/batch-insert") + @ApiOperation(value = "批量新增角色权限关系", notes = "批量新增角色权限关系") + public ResultBean insertBatchRefMenu(String[] roleIds,String[] menuIds) { + try { + roleIds = ConvertBean.modelSafeArrayNumber(roleIds,true); + menuIds = ConvertBean.modelSafeArrayNumber(menuIds,true); + + // 数据校验 + ValidatorBean.checkNotNull(roleIds, "角色roleIds 不能为空"); + + if(roleIds.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请输入需要更新的角色信息。") + .build(); + } + + sysRoleService.refreshBatchSysRoleRef(StringTool.getArrayLong(roleIds),StringTool.getArrayLong(menuIds), + AuthUtil.getSessionUser().getUserName()); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteSysRoleByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + sysRoleService.deleteSysRoleByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java new file mode 100644 index 0000000..df606a9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeController.java @@ -0,0 +1,259 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeExpressionService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTime; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 定时任务服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.982 + * @Modify : + **/ +@RestController +@Api(description = "定时任务服务") +@RequestMapping(CoreBaseController.BASE_URL +"/task-time") +public class SysTaskTimeController extends CoreBaseController{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysTaskTimeController.class); + + @Autowired + private ISysTaskTimeService taskTimeService; + + @Autowired + private ISysTaskTimeExpressionService taskTimeExpressionService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增定时任务", notes = "定时任务") + public ResultBean insertSysTaskTime(SysTaskTime taskTime,Boolean isExecute) { + try { + // 数据校验 + ValidatorBean.beginValid(taskTime) + .notNull("name", taskTime.getName()) + .notNull("groupName",taskTime.getGroupName()) + .notNull("timeExpressionId",taskTime.getTimeExpressionId()) + .notNull("taskMethodType", taskTime.getTaskMethodType()) + .notNull("taskPackage",taskTime.getTaskPackage()) + .notNull("taskClass",taskTime.getTaskClass()); + + SysTaskTimeExpression taskTimeExpression = taskTimeExpressionService + .getSysTaskTimeExpressionById(taskTime.getTimeExpressionId()); + ValidatorBean.checkNotNull(taskTimeExpression,"定时执行策略不存在"); + + taskTime.setTimeExpressionNameRdd(taskTimeExpression.getName()); + taskTime.setTimeExpressionContentRdd(taskTimeExpression.getExpressionContent()); + taskTime.setTaskStartDateTimeRdd(taskTimeExpression.getExpressionStartDatetime()); + taskTime.setTaskEndDateTimeRdd(taskTimeExpression.getExpressionEndDatetime()); + taskTime.setTaskStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); + + taskTime = taskTimeService.insertSysTaskTime(taskTime,taskTimeExpression); + // 立即执行 + if(isExecute != null && isExecute){ + taskTimeService.executeSysTaskTimeById(taskTime.getId()); + } + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTime); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改定时任务", notes = "定时任务") + public ResultBean updateSysTaskTime(SysTaskTime taskTime,Boolean isExecute) { + try { + // 数据校验 + ValidatorBean.beginValid(taskTime) + .notNull("id", taskTime.getId()) + .notNull("name", taskTime.getName()) + .notNull("groupName",taskTime.getGroupName()) + .notNull("timeExpressionId",taskTime.getTimeExpressionId()) + .notNull("taskMethodType", taskTime.getTaskMethodType()) + .notNull("taskPackage",taskTime.getTaskPackage()) + .notNull("taskClass",taskTime.getTaskClass()); + + SysTaskTimeExpression taskTimeExpression = taskTimeExpressionService + .getSysTaskTimeExpressionById(taskTime.getTimeExpressionId()); + ValidatorBean.checkNotNull(taskTimeExpression,"定时执行策略不存在"); + + taskTime.setTimeExpressionNameRdd(taskTimeExpression.getName()); + taskTime.setTimeExpressionContentRdd(taskTimeExpression.getExpressionContent()); + taskTime.setTaskStartDateTimeRdd(taskTimeExpression.getExpressionStartDatetime()); + taskTime.setTaskEndDateTimeRdd(taskTimeExpression.getExpressionEndDatetime()); + taskTime.setTaskStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); + + taskTimeService.updateSysTaskTime(taskTime,taskTimeExpression); + if(isExecute != null && isExecute){ + taskTimeService.executeSysTaskTimeById(taskTime.getId()); + } + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTime); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除定时任务", notes = "删除定时任务") + public ResultBean deleteSysTaskTime(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "定时任务id 不能为空"); + + taskTimeService.deleteSysTaskTimeById(Long.parseLong(id)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询SysTaskTime", notes = "查询所有定时任务") + public ResultBean findSysTaskTimeAll() { + try { + List list = taskTimeService.listSysTaskTime(); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "查询定时任务", notes = "查询根据ID查询定时任务") + public ResultBean getBySysTaskTimeId(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "定时任务id 不能为空"); + + SysTaskTime taskTime = taskTimeService.getSysTaskTimeById(Long.parseLong(id)); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(taskTime); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/status/{id}/{status}") + @ApiOperation(value = "修改定时任务状态", notes = "根据ID修改定时任务状态") + public ResultBean updateQuartzStatus(@PathVariable("id") String idStr,@PathVariable("status") Integer status) { + try { + // 数据校验 + ValidatorBean.checkNotNull(idStr, "id 不能为空"); + ValidatorBean.checkNotZero(status, "状态不能为空"); + + taskTimeService.updateSysTaskTimeStatus(Long.parseLong(idStr),status,AuthUtil.getSessionUser()); + return new ResultBean(true); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/query") + @ApiOperation(value = "定时任务复杂查询,分页,排序",notes = "定时任务复杂查询,分页,排序") + public ResultBean querySysTaskTimeByPager(SysTaskTime taskTime, Pager pager){ + try { + ListPager taskTimeListPager = taskTimeService.querySysTaskTimeByPager(taskTime,pager); + return ResultBean.success("查询成功").setListPager(taskTimeListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/batch-delete") + @ApiOperation(value = "根据id批量删除定时任务",notes = "根据id批量删除定时任务") + public ResultBean deleteSysTaskTimeByIds(String[] ids){ + try{ + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + taskTimeService.deleteSysTaskTimeByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/batch-status") + @ApiOperation(value = "批量修改系统任务状态",notes = "批量修改系统任务状态") + public ResultBean updateSysTaskTimeStatusByIds(String[] ids,Integer status){ + try { + // 数据校验 + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + ValidatorBean.checkNotZero(status,"状态不能为空"); + + taskTimeService.updateSysTaskTimeStatusByIds(StringTool.getArrayLong(ids),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/execute/{id}") + @ApiOperation(value = "立即执行", notes = "立即执行") + public ResultBean executeBySysTaskTimeId(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "定时任务id 不能为空"); + + taskTimeService.executeSysTaskTimeById(Long.parseLong(id)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java new file mode 100644 index 0000000..808c256 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskTimeExpressionController.java @@ -0,0 +1,160 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeExpressionService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 系统时间表达式 服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.838 + * @Modify : + **/ +@RestController +@Api(description = "系统时间表达式") +@RequestMapping(CoreBaseController.BASE_URL +"/task-time-expression") +public class SysTaskTimeExpressionController extends CoreBaseController{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysTaskTimeExpressionController.class); + + @Autowired + private ISysTaskTimeExpressionService taskTimeExpressionService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增系统时间表达式", notes = "系统时间表达式") + public ResultBean insertSysTaskTimeExpression(SysTaskTimeExpression timeExpression) { + try { + // 数据校验 + ValidatorBean.beginValid(timeExpression) + .notNull("name", timeExpression.getName()) + .notNull("expressionContent", timeExpression.getExpressionContent()) + .notNull("expressionStartDatetime",timeExpression.getExpressionStartDatetime()); + + taskTimeExpressionService.insertSysTaskTimeExpression(timeExpression); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改系统时间表达式", notes = "系统时间表达式") + public ResultBean updateSysTaskTimeExpression(SysTaskTimeExpression timeExpression) { + try { + // 数据校验 + ValidatorBean.beginValid(timeExpression) + .notNull("id", timeExpression.getId()) + .notNull("name", timeExpression.getName()) + .notNull("timeExpression", timeExpression.getExpressionContent()); + + taskTimeExpressionService.updateSysTaskTimeExpression(timeExpression); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除系统时间表达式", notes = "删除系统时间表达式") + public ResultBean deleteSysTaskTimeExpression(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "时间表达式id 不能为空"); + + taskTimeExpressionService.deleteSysTaskTimeExpressionById(Long.parseLong(id)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询时间表达式所有", notes = "查询所有系统时间表达式") + public ResultBean findSysTaskTimeExpressionAll() { + try { + List list = taskTimeExpressionService.listSysTaskTimeExpression(); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(list); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "查询系统时间表达式", notes = "查询根据ID查询系统时间表达式") + public ResultBean getSysTaskTimeExpressionById(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "定时任务id 不能为空"); + + SysTaskTimeExpression taskTimeExpression = taskTimeExpressionService.getSysTaskTimeExpressionById(Long.parseLong(id)); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(taskTimeExpression); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("query") + @ApiOperation(value = "时间表达式查询,分页,排序",notes = "时间表达式查询,分页,排序") + public ResultBean querySysTaskTimeExpressionByPager(SysTaskTimeExpression taskTimeExpression, Pager pager){ + try { + ListPager taskTimeExpressionListPager = taskTimeExpressionService.querySysTaskTimeExpressionByPager(taskTimeExpression,pager); + return ResultBean.success("查询成功").setListPager(taskTimeExpressionListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/batch-delete") + @ApiOperation(value = "根据id批量删除时间表达式",notes = "根据id批量删除时间表达式") + public ResultBean deleteSysTaskTimeExpressionByIds(String[] idsStr){ + try{ + if(idsStr.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + + taskTimeExpressionService.deleteSysTaskTimeExpressionByIds(StringTool.getArrayLong(idsStr)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolController.java new file mode 100644 index 0000000..b51cb03 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolController.java @@ -0,0 +1,226 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysToolService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysTool; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.poi.ss.formula.functions.T; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Description : 硬件服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 20:53 + * @Modify : + **/ +@RestController +@Api(description = "硬件服务") +@RequestMapping(CoreBaseController.BASE_URL +"/tool") +public class SysToolController extends CoreBaseController{ + public static final Logger LOGGER = LoggerFactory.getLogger(SysToolController.class); + + @Autowired + private ISysToolService toolService; + + @PostMapping("/insert") + @ApiOperation(value = "添加硬件",notes = "添加硬件") + public ResultBean insertSysTool(SysTool tool){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件校验 + ValidatorBean.beginValid(tool) + .notNull("name",tool.getName()) + .notNull("toolTypeId",tool.getToolTypeId()) + .notNull("toolConnType",tool.getToolConnType()) + .notNull("toolDataType",tool.getToolDataType()) + .notNull("toolIp",tool.getToolIp()) + .notNull("toolPort",tool.getToolPort()); + + // 添加初始化 + tool.setToolStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); + + toolService.insertSysTool(tool); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/update") + @ApiOperation(value = "修改硬件",notes = "修改硬件") + public ResultBean updateSysTool(SysTool tool){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件校验 + ValidatorBean.beginValid(tool) + .notNull("name",tool.getName()) + .notNull("toolTypeId",tool.getToolTypeId()) + .notNull("toolConnType",tool.getToolConnType()) + .notNull("toolDataType",tool.getToolDataType()) + .notNull("toolIp",tool.getToolIp()) + .notNull("toolPort",tool.getToolPort()); + + // 修改初始化 + ConvertBean.modelUpdate(tool,user); + + toolService.updateSysTool(tool); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/delete/{id}") + @ApiOperation(value = "根据id删除硬件",notes = "根据id删除硬件") + public ResultBean deleteSysTool(@PathVariable String id){ + try { + ValidatorBean.checkNotNull(id,"id不能为空"); + + toolService.deleteSysToolById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部",notes = "查询全部") + public ResultBean findSysToolAll(){ + try{ + List toolList = toolService.listSysTool(); + return ResultBean.success("操作成功").setResultList(toolList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询硬件",notes = "根据id查询硬件") + public ResultBean getSysToolById(@PathVariable("id") String id){ + try { + // 条件校验 + ValidatorBean.checkNotNull(id,"id不能为空"); + + SysTool tool = toolService.getSysToolById(Long.parseLong(id)); + if (tool != null) { + return ResultBean.success("查询成功") + .setResultObject(tool) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("硬件不存在") + .setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "硬件类型复杂查询,分页,排序",notes = "硬件类型复杂查询,分页,排序") + public ResultBean querySysToolByPager(SysTool tool, Pager pager){ + try { + ListPager sysSysToolListPager = toolService.querySysToolByPager(tool,pager); + return ResultBean.success("查询成功") + .setListPager(sysSysToolListPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/status") + @ApiOperation(value = "硬件状态",notes = "硬件类型禁用") + public ResultBean updateStatusEnable(String id,Integer status){ + try { + toolService.updateSysToolStatusById(Long.parseLong(id),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping("/batch-delete") + @ApiOperation(value = "批量删除硬件",notes = "批量删除硬件") + public ResultBean deleteSysToolByIds(String[] ids){ + try{ + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + toolService.deleteSysToolByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/batch-status") + @ApiOperation(value = "批量切换硬件状态",notes = "批量切换硬件状态") + public ResultBean updateSysToolStatusByIds(String[] ids,Integer status){ + try{ + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要操作的资源。") + .build(); + } + toolService.updateSysToolStatusByIds(StringTool.getArrayLong(ids),status); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java new file mode 100644 index 0000000..93e00c3 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java @@ -0,0 +1,188 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysToolTypeService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysToolType; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 硬件类型服务 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-28 12:40 + * @Modify : + **/ +@RestController +@Api(description = "硬件类型服务") +@RequestMapping(CoreBaseController.BASE_URL +"/tool-type") +public class SysToolTypeController extends CoreBaseController{ + public static final Logger LOGGER = LoggerFactory.getLogger(SysToolTypeController.class); + + @Autowired + private ISysToolTypeService toolTypeService; + + @PostMapping("/insert") + @ApiOperation(value = "添加硬件类型",notes = "添加硬件类型") + public ResultBean insertSysToolType(SysToolType toolType){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件校验 + ValidatorBean.beginValid(toolType).notNull("name",toolType.getName()); + + // 添加初始化 + ConvertBean.modelInitialize(toolType,user); + + toolTypeService.insertSysToolType(toolType); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping("/update") + @ApiOperation(value = "修改硬件类型",notes = "修改硬件类型") + public ResultBean updateSysToolType(SysToolType toolType){ + try { + // 登录用户 + SessionUser user = AuthUtil.getSessionUser(); + + // 条件校验 + ValidatorBean.beginValid(toolType).notNull("name",toolType.getName()); + + // 添加初始化 + ConvertBean.modelUpdate(toolType,user); + + toolTypeService.updateSysToolType(toolType); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping("/delete/{id}") + @ApiOperation(value = "根据id删除硬件类型",notes = "根据id删除硬件类型") + public ResultBean deleteSysToolType(@PathVariable String id){ + try { + ValidatorBean.checkNotNull(id,"id不能为空"); + + toolTypeService.deleteSysToolTypeById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询全部",notes = "查询全部") + public ResultBean findSysToolTypeAll(){ + try{ + List toolTypeList = toolTypeService.listSysToolType(); + return ResultBean.success("操作成功").setResultList(toolTypeList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/get/{id}") + @ApiOperation(value = "根据id查询硬件类型",notes = "根据id查询硬件类型") + public ResultBean getSysToolTypeById(@PathVariable("id") String id){ + try { + // 条件校验 + ValidatorBean.checkNotNull(id,"id不能为空"); + + SysToolType toolType = toolTypeService.getSysToolTypeById(Long.parseLong(id)); + if (toolType != null) { + return ResultBean.success("查询成功") + .setResultObject(toolType) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("硬件不存在") + .setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + }catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "硬件类型复杂查询,分页,排序",notes = "硬件类型复杂查询,分页,排序") + public ResultBean querySysToolTypeByPager(SysToolType toolType, Pager pager){ + try { + ListPager sysDictionaryListPager = toolTypeService.querySysToolTypeByPager(toolType,pager); + return ResultBean.success("查询成功") + .setListPager(sysDictionaryListPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "批量删除硬件类型",notes = "批量删除硬件类型") + public ResultBean deleteSysToolTypeByIds(String[] ids){ + try{ + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的资源。") + .build(); + } + toolTypeService.deleteSysToolTypeByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTreeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTreeController.java new file mode 100644 index 0000000..de029c9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTreeController.java @@ -0,0 +1,210 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysOrganizeService; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.CommonTreeModel; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.bean.SysPosition; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Description : 系统树服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-29 14:56 + * @Modify : + **/ +@RestController +@Api(description = "树服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-tree") +public class SysTreeController extends CoreBaseController { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogSystemController.class); + + @Autowired + private ICoreTreeService coreTreeService; + + @Autowired + private ISysOrganizeService organizeService; + + @GetMapping(value="/position/get/{id}") + @ApiOperation(value="查询岗位树",notes="通过部门主键获取岗位树,-1为根节点") + public ResultBean listSysPositionTree(@PathVariable("id") long id) { + try { + SysPosition position = coreTreeService.getSysPositionTreeById(id); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(position); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + + @GetMapping(value="/position/list/{parentId}") + @ApiOperation(value="查询岗位树",notes="通过部门主键获取岗位树,-1为根节点") + public ResultBean listSysPositionListTree(@PathVariable("parentId") long parentId) { + try { + List positionList = coreTreeService.findSysPositionTreeByParentId(parentId); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(positionList); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/organize/get/{id}") + @ApiOperation(value="查询组织树",notes="通过部门主键获取组织树,-1为根节点") + public ResultBean listOrganizeTree(@PathVariable("id") long id) { + try { + SysOrganize obj = coreTreeService.getSysOrganizeTreeById(id); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(obj); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/organize/list/{parentId}") + @ApiOperation(value="查询组织树",notes="通过部门主键获取组织树,-1为根节点") + public ResultBean listOrganizeListTree(@PathVariable("parentId") long parentId) { + try { + List resultList = coreTreeService.findSysOrganizeTreeByParentId(parentId); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(resultList); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/department/get/{id}") + @ApiOperation(value="部门树",notes="通过部门主键获取部门树,-1为根节点") + public ResultBean listDepartmentTree(@PathVariable("id") long id) { + try { + SysDepartment obj = coreTreeService.getSysDepartmentTreeById(id); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(obj); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/department/list/{parentId}") + @ApiOperation(value="查询组织树",notes="通过部门主键获取组织树,-1为根节点") + public ResultBean listDepartmentListTree(@PathVariable("parentId") long parentId) { + try { + List resultList = coreTreeService.findSysDepartmentTreeByParentId(parentId); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(resultList); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + + @GetMapping(value="/sys-menu/get/{id}") + @ApiOperation(value="部门树",notes="通过部门主键获取部门树,-1为根节点") + public ResultBean listSysMenuTree(@PathVariable("id") long id) { + try { + SysMenu obj = coreTreeService.getSysMenuTreeById(id); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(obj); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/sys-menu/list/{parentId}") + @ApiOperation(value="查询组织树",notes="通过部门主键获取组织树,-1为根节点") + public ResultBean listSysMenuListTree(@PathVariable("parentId") long parentId) { + try { + List resultList = coreTreeService.findSysMenuTreeByParentId(parentId); + + return ResultBean.success("查询部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(resultList); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/organize-department/list/{parentId}") + @ApiOperation(value="查询组织-部门树",notes="通过部门主键获取组组织-部门,-1为根节点") + public ResultBean listOrganizeDepartmentListTree(@PathVariable("parentId") long parentId) { + try { + List resultList = coreTreeService.findOrganizeDepartment(parentId); + + return ResultBean.success("查询组织-部门树成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(resultList); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java new file mode 100644 index 0000000..4b9dae6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -0,0 +1,474 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.RandomStringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Description : 系统用户操作服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 21:46 + * @Modify : + **/ +@RestController +@Api(description = "系统用户服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-user") +public class SysUserController extends CoreBaseController{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysUserController.class); + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private ISysUserInfoService sysUserInfoService; + + @Autowired + private ISysMessageService sysMessageService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "新增用户", notes = "新增系统用户") + public ResultBean insertSysUser(SysUser sysUser,String[] roleIds) { + try { + ConvertBean.modelSafeArrayNumber(roleIds,true); + + ValidatorBean.beginValid(sysUser) + .numberCheck("userInfoId",sysUser.getUserInfoId()) + .notNull("userLoginName",sysUser.getUserLoginName()) + .notNull("userEmail",sysUser.getUserEmail()) + .notNull("userLoginPassword",sysUser.getUserLoginPassword()); + + if(roleIds == null || roleIds.length <= 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("角色信息不能为空") + .build(); + } + + // 用户唯一校验 + sysUserService.checkSysUserOnly(sysUser); + + SysUserInfo userInfo = sysUserInfoService.getSysUserInfoById(sysUser.getUserInfoId()); + if(userInfo == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户信息不存在请重新操作") + .build(); + } + + //新增初始化 + sysUser.setUserName(userInfo.getName()); + sysUser.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); + sysUser.setDepartmentId(userInfo.getDepartmentId()); + sysUser.setDepartmentNameRdd(userInfo.getDepartmentNameRdd()); + sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + sysUser.setUserType(CommonEnumUtil.USER_TYPE.USER.getValue()); + sysUser.setUserLoginNum(0); + ConvertBean.modelInitialize(sysUser,AuthUtil.getSessionUser()); + + SysUser user = sysUserService.insertSysUser(sysUser); + + // 更新用户关系 + sysUserService.refreshSysRefUserRole(user,StringTool.getArrayLong(roleIds),getSessionUser().getUserName()); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(user); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "修改用户", notes = "修改用户信息") + public ResultBean updateSysUser(SysUser sysUser,String[] roleIds) { + try { + ConvertBean.modelSafeArrayNumber(roleIds,true); + ValidatorBean.beginValid(sysUser) + .numberCheck("id",sysUser.getUserInfoId()) + .numberCheck("userInfoId",sysUser.getUserInfoId()) + .notNull("userLoginName",sysUser.getUserLoginName()) + .notNull("userEmail",sysUser.getUserEmail()); + + if(roleIds == null || roleIds.length <= 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("角色信息不能为空") + .build(); + } + + // 用户唯一校验 + sysUserService.checkSysUserOnly(sysUser); + + // 用户信息封装 + SysUserInfo userInfo = sysUserService.getSysUserInfoById(sysUser.getUserInfoId()); + SysUser user = sysUserService.getSysUserById(sysUser.getId()); + if(userInfo == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户信息不存在请重新操作") + .build(); + } + + // 修改密码 + if(sysUser.getUserLoginPassword() != null && sysUser.getUserLoginPassword().trim().length() > 0){ + String md5 = EncryptTool.hexMD5(sysUser.getUserLoginPassword()); + user.setUserLoginPassword(md5); + } + + user.setUserInfoId(userInfo.getId()); + user.setUserName(userInfo.getName()); + user.setDepartmentId(userInfo.getDepartmentId()); + user.setDepartmentNameRdd(userInfo.getDepartmentNameRdd()); + user.setUserLoginName(sysUser.getUserLoginName()); + user.setUserEmail(sysUser.getUserEmail()); + user.setUserPhone(sysUser.getUserPhone()); + ConvertBean.modelUpdate(sysUser,AuthUtil.getSessionUser()); + + // 更新用户关系 + sysUserService.refreshSysRefUserRole(user, StringTool.getArrayLong(roleIds),getSessionUser().getUserName()); + sysUserService.updateSysUser(user); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(user); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PutMapping(value = "/status") + @ApiOperation(value = "修改用户状态", notes = "根据ID修改用户状态") + public ResultBean updateStatus(String id, int status) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "用户id 不能为空"); + ValidatorBean.checkNotZero(status, "用户状态不能为空"); + + sysUserService.updateSysUserStatus(Long.parseLong(id), status, AuthUtil.getSessionUser()); + return new ResultBean(true); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/batch-status") + @ApiOperation(value = "批量修改系统功能状态", notes = "根据ID修改系统功能状态") + public ResultBean updateBatchStatus(String[] ids,int status) { + try { + ids = ConvertBean.modelSafeArrayNumber(ids,true); + + // 数据校验 + ValidatorBean.checkNotNull(ids, "功能id 不能为空"); + ValidatorBean.checkNotZero(status, "功能状态不能为空"); + + sysUserService.updateBatchSysUserStatus(StringTool.getArrayLong(ids),status,AuthUtil.getSessionUser()); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value = "/update-password") + @ApiOperation(value = "修改密码", notes = "修改当前登录用户密码") + public ResultBean updateSysUserPassword(String password,String newPwd) { + try { + SessionUser sessionUser = AuthUtil.getSessionUser(); + // 数据校验 + ValidatorBean.checkNotNull(password, "旧密码不能为空"); + ValidatorBean.checkNotNull(newPwd, "新密码不能为空"); + + sysUserService.updateSysUserPassword(sessionUser.getUser().getId(),password,newPwd); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @GetMapping(value = "/list") + @ApiOperation(value = "查询所有用户", notes = "查询所有系统用户") + public ResultBean findAll() { + try { + List list = sysUserService.list(); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/query-user-by-pager") + @ApiOperation(value="查询系统用户",notes="组合查询用户,外带分页查询(isValid = 1)") + public ResultBean querySysUserByPager(SysUser user, Pager pager){ + try{ + // 初始化用户查询讯息 + if(null == user) { + user = new SysUser(); + } + user.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); + + ListPager listPager = sysUserService.querySysUserByPager(user, pager); + + return ResultBean.success("操作成功").setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/delete/{id}") + @ApiOperation(value = "删除账号", notes = "删除制定账号信息") + public ResultBean delete(@PathVariable("id") String id) { + try { + // 数据校验 + ValidatorBean.checkNotNull(id, "用户id 不能为空"); + + sysUserService.deleteSysUserById(Long.parseLong(id)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteBatchSysUserByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的用户。") + .build(); + } + + sysUserService.deleteBatchSysUserById(StringTool.getArrayLong(ids),AuthUtil.getSessionUser()); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value = "/find-ref-role/{userId}") + @ApiOperation(value = "查询角色的所有角色权限关系", notes = "查询角色的所有角色权限关系") + public ResultBean findRefRoleMenu(@PathVariable("userId") String userId) { + try { + ValidatorBean.checkNotNull(userId, "用户 id 不能为空"); + List list = sysUserService.findSysRefUserRoleByUserId(Long.parseLong(userId)); + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultList(list); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @PostMapping("/reset-pwd/{id}") + @ApiOperation(value = "密码重置",notes = "根据id重置用户密码") + public ResultBean updateResetPassword(@PathVariable String id){ + try { + SysUser user = sysUserService.getSysUserById(Long.parseLong(id)); + if(user != null){ + String password = RandomStringUtils.random(6, true, false); + user.setUserLoginPassword(EncryptTool.hexMD5(password)); + sysUserService.updateSysUser(user); + + String content = "系统提示:\n" + + "\t"+getSessionUser().getUserName()+"使用密码重置功能帮您重置了【"+user.getUserLoginName()+"】账号的密码," + + "新密码是:"+password+""; + + SysMessage message = new SysMessage(); + message.setMessageTitle("重置密码"); + message.setMessageContent(content); + message.setMessageType(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue()); + message.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.TEXT.getValue()); + message.setMessageSenderId(getSessionUser().getUser().getId()); + message.setMessageSenderNameRdd(getSessionUser().getUserName()); + message.setMessageReceiversId(user.getId().toString()); + message.setMessageReceiversNameRdd(user.getUserName()); + + sysMessageService.doSendSysMessage(message); + + LOGGER.info("系统提示:{} 使用密码重置功能帮{}重置了{}账号的密码,新密码是:{}", + getSessionUser().getUserName(),user.getUserName(),user.getUserLoginName(),password); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else{ + return ResultBean.success("操作失败") + .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) + .setErrorMsg("用户不存在"); + } + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping("/verification/get-email") + @ApiOperation(value = "发送验证码",notes = "发送邮件验证码") + public ResultBean getEmailVerification(String email){ + try { + + SysUser user = sysUserService.getSysUserByEmail(email); + if(user != null){ + String verification = RandomStringUtils.random(6, true, false); + + String redisKey = CommonConstWords.SESSION_VERIFICATION_USER_EMAIL + "_" + getSessionUser().getUserId(); + redisCore.putObject(redisKey, verification + "-" + email, 180); + + String content = "系统提示:\n" + + "\t密码找回验证码:【"+verification+"】"; + + SysMessage message = new SysMessage(); + message.setMessageTitle("验证码"); + message.setMessageContent(content); + message.setMessageType(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue()); + message.setMessageContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.TEXT.getValue()); + message.setMessageSenderId(getSessionUser().getUser().getId()); + message.setMessageSenderNameRdd(getSessionUser().getUserName()); + message.setMessageReceiversId(user.getId().toString()); + message.setMessageReceiversNameRdd(user.getUserName()); + + sysMessageService.doSendSysMessage(message); + + LOGGER.info("系统提示:\t 密码找回验证码【{}】",verification); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else{ + return ResultBean.success("操作失败") + .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) + .setErrorMsg("用户不存在"); + } + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + + @PostMapping("/password/update-verification") + @ApiOperation(value = "修改密码",notes = "通过邮箱的验证码修改密码") + public ResultBean getEmailVerification(String password,String email,String verification){ + try { + ValidatorBean.checkNotNull(verification,"验证码不能为空"); + ValidatorBean.checkNotNull(password,"新密码不能为空"); + ValidatorBean.checkNotNull(email,"邮件不能为空"); + + String redisKey = CommonConstWords.SESSION_VERIFICATION_USER_EMAIL + "_" + getSessionUser().getUserId(); + Object redisValue = redisCore.getObject(redisKey); + if(redisValue != null){ + if(redisValue.toString().indexOf(verification) >= 0 ){ + if(redisValue.toString().indexOf(email) >= 0 ){ + SysUser user = sysUserService.getSysUserByEmail(email); + user.setUserLoginPassword(EncryptTool.hexMD5(password)); + sysUserService.updateSysUser(user); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("操作失败") + .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) + .setErrorMsg("请勿修改邮箱信息"); + } + }else { + return ResultBean.fail("操作失败") + .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) + .setErrorMsg("验证码错误请重新输入"); + } + }else { + return ResultBean.fail("操作失败") + .setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()) + .setErrorMsg("验证码已过期"); + } + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java new file mode 100644 index 0000000..23895c4 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -0,0 +1,240 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.SysOrganizeService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description : 用户信息 服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-11-08 19:57 + * @Modify : + **/ +@RestController +@Api(description = "系统用户服务") +@RequestMapping(CoreBaseController.BASE_URL + "/sys-user-info") +public class SysUserInfoController extends CoreBaseController{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysUserInfoController.class); + + @Autowired + private ISysUserInfoService sysUserInfoService; + + @Autowired + private ISysDepartmentService departmentService; + + @Autowired + private SysOrganizeService organizeService; + + @Autowired + private ISysFileService sysFileService; + + @PostMapping(value="/insert") + @ApiOperation(value="添加用户信息",notes="返回内容添加用户信息") + public ResultBean insertSysUserInfo(SysUserInfo userInfo){ + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(userInfo) + .notNull("name",userInfo.getName()) + .notNull("userEmpNo",userInfo.getUserEmpNo()) + .checkNotZero("departmentId",userInfo.getDepartmentId()) + .checkNotZero("departmentIdList",userInfo.getDepartmentIdList()) + .checkNotZero("positionId",userInfo.getPositionId()); + + ConvertBean.modelInitialize(userInfo,user); + userInfo.setUserInfoStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue()); + SysUserInfo pos = sysUserInfoService.insertSysUserInfo(userInfo); + + sysUserInfoService.refreshRefUserDepartment(pos.getId(), + StringTool.getArrayLong(userInfo.getDepartmentIdList()), + user.getUserName()); + + sysUserInfoService.refreshRefUserPosition(pos.getId(), + new Long[]{userInfo.getPositionId()}, + user.getUserName()); + + SysDepartment department = departmentService.getSysDepartmentById(userInfo.getDepartmentId()); + if(department != null){ + sysUserInfoService.refreshRefUserOrganize(pos.getId(), + department.getOrganizeId(),user.getUserName()); + } + + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(pos); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @PutMapping(value="/update") + @ApiOperation(value="修改用户信息",notes="根据用户信息id修改信息") + public ResultBean updateSysUserInfoById(SysUserInfo userInfo){ + try { + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + //条件验证 + ValidatorBean.beginValid(userInfo) + .notNull("id",userInfo.getId()) + .notNull("name",userInfo.getName()) + .notNull("userEmpNo",userInfo.getUserEmpNo()) + .checkNotZero("departmentId",userInfo.getDepartmentId()) + .checkNotZero("positionId",userInfo.getPositionId()); + + //修改初始化 + ConvertBean.modelUpdate(userInfo,user); + + sysUserInfoService.updateSysUserInfo(userInfo); + + sysUserInfoService.refreshRefUserDepartment(userInfo.getId(), + StringTool.getArrayLong(userInfo.getDepartmentIdList()), user.getUserName()); + + sysUserInfoService.refreshRefUserPosition(userInfo.getId(), + new Long[]{userInfo.getPositionId()}, user.getUserName()); + + SysDepartment department = departmentService.getSysDepartmentById(userInfo.getDepartmentId()); + if(department != null){ + sysUserInfoService.refreshRefUserOrganize(userInfo.getId(), + department.getOrganizeId(),user.getUserName()); + } + + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @DeleteMapping(value="/delete/{id}") + @ApiOperation(value="删除用户信息",notes="根据用户信息id删除信息") + public ResultBean deleteSysUserInfo(@PathVariable("id") String id){ + try { + //条件验证 + ValidatorBean.checkNotNull(id,"id为空"); + + sysUserInfoService.deleteSysUserInfoById(Long.parseLong(id)); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); + return ResultBean.fail(busExcep); + } catch (Exception e) { + LOGGER.error(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getDescription() + ":{}", e.getMessage(), e); + return ResultBean.fail().setCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()); + } + } + + @GetMapping(value="/list") + @ApiOperation(value="查询所有用户信息",notes="查询所有用户信息") + public ResultBean findSysUserInfoAll(){ + try{ + List SysUserInfoList = sysUserInfoService.listSysUserInfo(); + return ResultBean.success("操作成功").setResultList(SysUserInfoList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/query") + @ApiOperation(value="查询用户信息",notes="复杂查询用户信息带分页") + public ResultBean querySysUserInfo(SysUserInfo SysUserInfo, Pager pager){ + try{ + ListPager listPager = sysUserInfoService.querySysUserInfo(SysUserInfo, pager); + return ResultBean.success("操作成功").setListPager(listPager) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @GetMapping(value="/get/{id}") + @ApiOperation(value="根据id查询用户信息",notes="根据id用户信息") + public ResultBean getSysUserInfoById(@PathVariable("id") String id){ + try{ + ValidatorBean.checkIsNumber(id, "id 不能为空"); + + SysUserInfo SysUserInfo = sysUserInfoService.getSysUserInfoById(Long.parseLong(id)); + ValidatorBean.beginValid(SysUserInfo) + .notNull("id",SysUserInfo.getId()); + + return ResultBean.success("查询成功") + .setResultObject(SysUserInfo) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + @DeleteMapping(value = "/batch-delete") + @ApiOperation(value = "根据id批量删除", notes = "根据id批量删除") + public ResultBean deleteSysUserInfoByIds(String[] ids){ + try{ + ids = ConvertBean.modelSafeArrayNumber(ids,true); + if(ids.length == 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要删除的用户信息。") + .build(); + } + sysUserInfoService.deleteSysUserInfoByIds(StringTool.getArrayLong(ids)); + return ResultBean.success("删除成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); + return ResultBean.fail(busExcep); + }catch(Exception e){ + LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); + return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IMachineFactoryDao.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IMachineFactoryDao.java new file mode 100644 index 0000000..f3409ee --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IMachineFactoryDao.java @@ -0,0 +1,45 @@ +package cn.estsh.i3plus.core.apiservice.dao; + +import cn.estsh.i3plus.pojo.mes.MachineFactory; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Description : hql申明查询demo + * 继承了crudrepository,包含了常用hql方法 + * @Reference : 如果需要执行原生sql,则添加 @Query(sql,nativeQuery=true) + * @Author : alwaysfrin + * @CreateDate : 2018-09-05 16:41 + * @Modify: + **/ +//@Repository +public interface IMachineFactoryDao extends CrudRepository { + + //此处findBy开头,会自动根据属性名进行查询 + /*List findByFactoryName(String factoryName); + + @Modifying + @Query("update MachineFactory mf set mf.factoryName = :factoryName where mf.id = :id") + void updateMachineFactoryNameById(long id, String factoryName); + + @Modifying + @Query("delete from MachineFactory mf where id = :id") + void deleteMachineFactoryById(@Param("id") long id); + + //按位查询 + @Query("select mf from MachineFactory mf where factoryName = ?1") + List findMachineFactoryByFactoryName(String factoryName); + + //参数匹配 + @Query("from MachineFactory mf where mf.factoryCode = :factoryCode") + List findMachineFactoryByFactoryCode(@Param("factoryCode") String factoryCode); + + //自定义Hql + @Query("from MachineFactory mf where mf.createDatetime like '2018-01-01%'") + List findMachineFactorySpecial();*/ +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java new file mode 100644 index 0000000..731169a --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.core.apiservice.dao; + +import cn.estsh.i3plus.pojo.platform.bean.*; + +import java.util.List; + +/** + * @Description : 用户权限 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 20:24 + * @Modify : + **/ +public interface IUserPermissionDao { + + /** + * 查询用户所有部门 +` * @param userInfo + * @return + */ + List findDepartmentByUser(SysUserInfo userInfo); + + /** + * 查询用户所有角色 + * @param user + * @return + */ + List findSysRoleByUser(SysUser user); + + /** + * 查询用户所有功能权限 + * @param user + * @return + */ + List findSysMenuByUser(SysUser user); + + /** + * 查询用户所有岗位 + * @param userInfo + * @return + */ + List findPositionByUser(SysUserInfo userInfo); + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java new file mode 100644 index 0000000..111631c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java @@ -0,0 +1,78 @@ +package cn.estsh.i3plus.core.apiservice.daoimpl; + +import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao; +import cn.estsh.i3plus.pojo.platform.bean.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 20:32 + * @Modify : + **/ +@Service +public class UserPermissionDaoImpl implements IUserPermissionDao { + + public static final Logger LOGGER = LoggerFactory.getLogger(UserPermissionDaoImpl.class); + + @Autowired + private EntityManager entityManager; + + @Override + public List findDepartmentByUser(SysUserInfo userInfo) { + LOGGER.info(" 查询用户所有部门 user id:{}", userInfo.getId()); + String hql = "select d from SysRefUserDepartment as rud " + + " left join SysDepartment as d on d.id = rud.departmentId " + + " where rud.userId =:userId"; + return entityManager.createQuery(hql).setParameter("userId",userInfo.getId()).getResultList(); + } + + @Override + public List findSysRoleByUser(SysUser user) { + LOGGER.info(" 查询用户所有角色 user id:{}", user.getId()); + + String hql = "select sr from SysRefUserRole as rur " + + " left join SysRole as sr on sr.id = rur.roleId " + + " where rur.userId =:userId"; + //hql = "select rur from RefUserRole as rur,SysRole as where rur.userId =:userId and sr.id = rur.roleId"; + return entityManager.createQuery(hql).setParameter("userId",user.getId()).getResultList(); + } + + @Override + public List findSysMenuByUser(SysUser user) { + LOGGER.info(" 查询用户所有菜单 user id:{}", user.getId()); + String hql = "select sm from SysRefUserRole as rur " + + " left join SysRefRoleMenu as rrm on rrm.roleId = rur.roleId" + + " left join SysMenu as sm on sm.id = rrm.menuId" + + " where rur.userId =:userId"; + List list = entityManager.createQuery(hql).setParameter("userId", user.getId()).getResultList(); + List result = new ArrayList<>(); + if(list != null && list.size() > 0){ + for (SysMenu menu : list) { + if(!result.contains(menu)){ + result.add(menu); + } + } + } + return result; + } + + @Override + public List findPositionByUser(SysUserInfo userInfo) { + LOGGER.info(" 查询用户所有岗位 user id:{}", userInfo.getId()); + String hql = "select p from SysRefUserPosition as rup " + + " left join SysPosition as p on p.id = rup.positionId" + + " where rup.userId =:userId"; + return entityManager.createQuery(hql).setParameter("userId",userInfo.getId()).getResultList(); + } + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/listener/SysResourceBindleListener.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/listener/SysResourceBindleListener.java new file mode 100644 index 0000000..81261a6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/listener/SysResourceBindleListener.java @@ -0,0 +1,181 @@ +package cn.estsh.i3plus.core.apiservice.listener; + +import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; + +/** + * @Description : 初始化资源配置 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-12 18:43 + * @Modify: + **/ +@Component +public class SysResourceBindleListener implements ApplicationListener { + private static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + @Autowired + public ISystemResourceService systemResourceService; + + @Resource(name="redisRes") + private ImppRedis redisRes; + + @Override + public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { + + /** + * 整体数据结构: + * code + * 先根据code查询,判断是否存在,然后通过语言获取对应的值 + */ + HashMap> resMap = new HashMap(); + HashMap lanMap = null; + + //语言数量 + List langList = systemResourceService.listSysLocaleLanguage(null); + + //查询所有资源 + List resourceList = systemResourceService.listSysLocaleResource(null); + LOGGER.info("【加载平台资源】共有{}个资源,{}种语言。",resourceList.size(),langList.size()); + for(SysLocaleResource res : resourceList) { + //遍历资源,放入map中 + lanMap = resMap.get(res.getResourceKey()); + //判断是否已存在资源信息 + if(lanMap == null){ + lanMap = new HashMap(); + //将key/代码放入 + resMap.put(res.getResourceKey(),lanMap); + } + //根据语言放入 + lanMap.put(res.getLanguageCode(),res.getResourceValue()); + } + + for(String key : resMap.keySet()){ + //放入缓存 + redisRes.putHashMap(key,resMap.get(key),0); + } + + LOGGER.info("【资源配置文件已全部加载:{}个】",resMap.size()); + + /* + //资源集合 + HashMap resMap; + + //模块集合 + HashMap> langModoleMap = new HashMap(); + //功能集合 + HashMap> langMethodMap = new HashMap(); + //按钮集合 + HashMap> langBtnMap = new HashMap(); + //信息集合 + HashMap> langMsgMap = new HashMap(); + //异常集合 + HashMap> langExMap = new HashMap(); + + *//************** 加载国际化 *************//* + for(SysLocaleLanguage lang : langList) { + *//************** 加载模块 *************//* + resource = new SysLocaleResource(); + resource.setResourceType(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.MODULE.getValue()); + resource.setLanguageCode(lang.getLanguageCode()); + resourceList = systemResourceService.listSysLocaleResource(resource); + + if(resourceList.size() > 0) { + LOGGER.info("【{}-{},{}】共有{}个资源。", CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.MODULE.getDescription(), + lang.getLanguageName(), lang.getLanguageCode(), resourceList.size()); + } + resMap = new HashMap(); + for(SysLocaleResource res : resourceList){ + resMap.put(res.getResourceKey(),res.getResourceValue()); + } + langModoleMap.put(lang.getLanguageCode(),resMap); + + *//************** 加载功能 *************//* + resource = new SysLocaleResource(); + resource.setResourceType(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.METHOD.getValue()); + resource.setLanguageCode(lang.getLanguageCode()); + resourceList = systemResourceService.listSysLocaleResource(resource); + + if(resourceList.size() > 0) { + LOGGER.info("【{}-{},{}】共有{}个资源。",CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.METHOD.getDescription(), + lang.getLanguageName(),lang.getLanguageCode(),resourceList.size()); + } + + resMap = new HashMap(); + for(SysLocaleResource res : resourceList){ + resMap.put(res.getResourceKey(),res.getResourceValue()); + } + langMethodMap.put(lang.getLanguageCode(),resMap); + + *//************** 加载按钮 *************//* + resource = new SysLocaleResource(); + resource.setResourceType(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.BUTTON.getValue()); + resource.setLanguageCode(lang.getLanguageCode()); + resourceList = systemResourceService.listSysLocaleResource(resource); + + if(resourceList.size() > 0) { + LOGGER.info("【{}-{},{}】共有{}个资源。", CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.BUTTON.getDescription(), + lang.getLanguageName(), lang.getLanguageCode(), resourceList.size()); + } + + resMap = new HashMap(); + for(SysLocaleResource res : resourceList){ + resMap.put(res.getResourceKey(),res.getResourceValue()); + } + langBtnMap.put(lang.getLanguageCode(),resMap); + + *//************** 加载资源 *************//* + resource = new SysLocaleResource(); + resource.setResourceType(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.COMMON.getValue()); + resource.setLanguageCode(lang.getLanguageCode()); + resourceList = systemResourceService.listSysLocaleResource(resource); + + if(resourceList.size() > 0) { + LOGGER.info("【{}-{},{}】共有{}个资源。", CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.COMMON.getDescription(), + lang.getLanguageName(), lang.getLanguageCode(), resourceList.size()); + } + resMap = new HashMap(); + for(SysLocaleResource res : resourceList){ + resMap.put(res.getResourceKey(),res.getResourceValue()); + } + langMsgMap.put(lang.getLanguageCode(),resMap); + + *//************** 加载异常 *************//* + resource = new SysLocaleResource(); + resource.setResourceType(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.EXCEPTION.getValue()); + resource.setLanguageCode(lang.getLanguageCode()); + resourceList = systemResourceService.listSysLocaleResource(resource); + + if(resourceList.size() > 0) { + LOGGER.info("【{}-{},{}】共有{}个资源。", CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.EXCEPTION.getDescription(), + lang.getLanguageName(), lang.getLanguageCode(), resourceList.size()); + } + resMap = new HashMap(); + for(SysLocaleResource res : resourceList){ + resMap.put(res.getResourceKey(),res.getResourceValue()); + } + langExMap.put(lang.getLanguageCode(),resMap); + } + + redisCore.putHashMap(CommonConstWords.RES_PLAT_MODULE,langModoleMap); + redisCore.putHashMap(CommonConstWords.RES_PLAT_MODULE_METHOD,langMethodMap); + redisCore.putHashMap(CommonConstWords.RES_PLAT_MODULE_BUTTON,langBtnMap); + redisCore.putHashMap(CommonConstWords.RES_LANGUAGE_CONVERT,langMsgMap); + redisCore.putHashMap(CommonConstWords.RES_EXCEPTION_CONVERT,langExMap); + + LOGGER.info("【资源配置文件已全部加载】");*/ + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueConfig.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueConfig.java new file mode 100644 index 0000000..2fb0093 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueConfig.java @@ -0,0 +1,69 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Queue; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description : wms队列 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 16:57 + * @Modify: + **/ +@Configuration +public class I3CoreQueueConfig { + private static final Logger LOGGER = LoggerFactory.getLogger(I3CoreQueueConfig.class); + + public static final String IMPP_MESSAGE_QUEUE = "IMPP_MESSAGE_QUEUE"; + + public static final String IMPP_MESSAGE_MAIL_QUEUE = "IMPP_MESSAGE_MAIL_QUEUE"; + public static final String IMPP_MESSAGE_LETTER_QUEUE = "IMPP_MESSAGE_LETTER_QUEUE"; + + @Bean + public Queue getImppMessageQueue() { + LOGGER.info("【开启平台消息队列】"); + return new Queue(IMPP_MESSAGE_QUEUE); + } + + + /*********** 队列demo ***********/ + + public static final String DEMO_STR_QUEUE = "demo_str_queue"; + @Bean + public Queue getStrQueue() { + //LOGGER.info("【DEMO_STR_QUEUE队列】"); + return new Queue(DEMO_STR_QUEUE); + } + + public static final String DEMO_OBJ_QUEUE = "demo_obj_queue"; + @Bean + public Queue getObjQueue() throws Exception { + //LOGGER.info("【DEMO_OBJ_QUEUE队列】"); + return new Queue(DEMO_OBJ_QUEUE); + } + + public static final String DEMO_HANDLE_QUEUE = "demo_handle_queue"; + @Bean + public Queue getHandleQueue() throws Exception { + //LOGGER.info("【DEMO_HANDLE_QUEUE队列】"); + return new Queue(DEMO_HANDLE_QUEUE); + } + + public static final String DEMO_ACK_QUEUE = "ack_queue"; + @Bean + public Queue getAckQueue() throws Exception { + //LOGGER.info("【DEMO_ACK_QUEUE队列】"); + return new Queue(DEMO_ACK_QUEUE); + } + + public static final String DEMO_RETURN_QUEUE = "return_queue"; + @Bean + public Queue getReturnQueue() throws Exception { + //LOGGER.info("【DEMO_RETURN_QUEUE队列】"); + return new Queue(DEMO_RETURN_QUEUE); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueReceiver.java new file mode 100644 index 0000000..247762c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/I3CoreQueueReceiver.java @@ -0,0 +1,118 @@ +package cn.estsh.i3plus.core.apiservice.mq; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import com.rabbitmq.client.Channel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +/** + * @Description : 获取队列信息后处理 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-26 10:40 + * @Modify: + **/ +@Component +public class I3CoreQueueReceiver { + private static final Logger LOGGER = LoggerFactory.getLogger(I3CoreQueueReceiver.class); + + /** + * 系统邮件处理队列 + * @param msg + * @param channel + * @param message + * 发送:rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_QUEUE, new SysMessage(....)); + */ + @RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_QUEUE) + public void processImppMessage(SysMessage msg, Channel channel, Message message) { + try { + LOGGER.info("【MQ-IMPP_MESSAGE_QUEUE】数据接收成功:{}",msg); + + //信息已处理 + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + LOGGER.error("【MQ-IMPP_MESSAGE_QUEUE】处理出错:{}",e.getMessage(),e); + //丢弃这条消息 + try { + // 未成功处理,重新发送 + channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + + + /********************* 消息队列处理demo *******************/ + + /*@RabbitListener(queues = I3CoreQueueConfig.DEMO_STR_QUEUE) + public void getObjQueue(String data) { + System.out.println("接收数据 : " + data.toString()); + } + + @RabbitListener(queues = I3CoreQueueConfig.DEMO_OBJ_QUEUE) + public void getStrQueue(MachineFactory data) { + System.out.println("强转对象:" + data); + }*/ + + @RabbitListener(queues = I3CoreQueueConfig.DEMO_RETURN_QUEUE) + public Message processReturn(String data, Channel channel, Message message) { + try { + System.out.println("【client】数据接收成功:" + data); + Thread.sleep(1000); + + //告诉服务器收到这条消息 已经被我消费了 可以在队列删掉 这样以后就不会再发了 否则消息服务器以为这条消息没处理掉 后续还会在发 + //消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息 + + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (Exception e) { + System.out.println("出现异常:" + e.getMessage()); + // 错误反馈 + // val1 = 是否批量.true:将一次性拒绝所有小于deliveryTag的消息。 + // val2 = 被拒绝的是否重新列入队列 + try { + channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + //拒绝,同basicNack,只是没有批量这个属性 + //channel.basicReject(message.getMessageProperties().getDeliveryTag(),true); + } + Message returnMsg = null; + try { + returnMsg = new Message("---返回数据---".getBytes("UTF-8"), message.getMessageProperties()); + }catch(Exception e){ + e.printStackTrace(); + } + return message; + } + + @RabbitListener(queues = I3CoreQueueConfig.DEMO_ACK_QUEUE) + public void processAck(String data, Channel channel, Message message) { + try { + System.out.println("【client】数据接收成功:" + data); + + /*if(data.startsWith("ack")){ + System.out.println("【client】数据抛出异常"); + throw new RuntimeException("【队列抛出异常】" + data); + }*/ + //在队列删掉 不会再发了 否则消息服务器以为这条消息没处理掉 后续还会在发 + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + e.printStackTrace(); + //丢弃这条消息 + // channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,false); + // System.out.println("receiver fail"); + try { + // + channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java new file mode 100644 index 0000000..8f19e23 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/LetterQueueReceiver.java @@ -0,0 +1,101 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.apiservice.websocket.MessageWebSocket; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import com.alibaba.fastjson.JSON; +import com.rabbitmq.client.Channel; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.List; + +/** + * @Description : 站内信队列处理 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-15 22:35 + * @Modify: + **/ +@Component +public class LetterQueueReceiver { + private static final Logger LOGGER = LoggerFactory.getLogger(LetterQueueReceiver.class); + + @Autowired + ISysMessageService sysMessageService; + @Autowired + ISysUserService sysUserService; + + /** + * 站内信处理队列 + * @param msg + * @param channel + * @param message + * 发送:rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_QUEUE, new SysMessage(....)); + */ +// @RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_LETTER_QUEUE) + public void processImppMessage(SysMessage msg, Channel channel, Message message) { + try { + LOGGER.info("【MQ-IMPP_MESSAGE_LETTER_QUEUE】数据接收成功:{}",msg); + + msg = sysMessageService.insertSysMessage(msg); + + // 收件人信息 + String[] messageReceiver = msg.getMessageReceiversId().split(","); + String[] receiverName = new String[messageReceiver.length]; + + SysRefUserMessage refUserMessage; + SysUser sysUser; + List userMessage; + + for (int i = 0; i < messageReceiver.length; i++) { + sysUser = sysUserService.getSysUserById(Long.parseLong(messageReceiver[i])); + receiverName[i] = sysUser.getUserName(); + + refUserMessage = new SysRefUserMessage(); + refUserMessage.setMessageId(msg.getId()); + refUserMessage.setMessageTitleRdd(msg.getMessageTitle()); + refUserMessage.setMessageTypeRdd(msg.getMessageType()); + refUserMessage.setMessageSenderNameRdd(msg.getMessageSenderNameRdd()); + refUserMessage.setReceiverId(sysUser.getUserInfoId()); + refUserMessage.setReceiverNameRdd(sysUser.getUserName()); + refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); + refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); + + sysMessageService.insertSysRefUserMessage(refUserMessage); + + userMessage = sysMessageService.findSysRefUserMessageByUserIdAndStatus(sysUser.getUserInfoId(), + ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); + MessageWebSocket.sendMessage(sysUser.getUserInfoId(), + JSON.toJSONString(userMessage) + ); + } + + msg.setMessageReceiversNameRdd(StringUtils.join(receiverName, ",")); + sysMessageService.updateSysMessage(msg); + + + //信息已处理 + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + LOGGER.error("【MQ-IMPP_MESSAGE_LETTER_QUEUE】处理出错:{}",e.getMessage(),e); + //丢弃这条消息 + try { + // 未成功处理,重新发送 + channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java new file mode 100644 index 0000000..587584a --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MailQueueReceiver.java @@ -0,0 +1,97 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.apiservice.util.MailUtil; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import com.rabbitmq.client.Channel; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +/** + * @Description : 邮件队列处理 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-15 22:15 + * @Modify: + **/ +@Component +public class MailQueueReceiver { + private static final Logger LOGGER = LoggerFactory.getLogger(MailQueueReceiver.class); + + @Autowired + ISysMessageService sysMessageService; + @Autowired + ISysUserService sysUserService; + @Autowired + MailUtil mailUtil; + /** + * 系统邮件处理队列 + * @param msg + * @param channel + * @param message + */ +// @RabbitListener(queues = I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE) + public void processImppMail(SysMessage msg, Channel channel, Message message) { + try { + LOGGER.info("【MQ-IMPP_MESSAGE_MAIL_QUEUE】数据接收成功:{}",msg);msg = sysMessageService.insertSysMessage(msg); + mailUtil.init(); + + // 收件人信息 + String[] messageReceiver = msg.getMessageReceiversId().split(","); + String[] receiverName = new String[messageReceiver.length]; + + SysRefUserMessage refUserMessage; + SysUser sysUser; + + for (int i = 0; i < messageReceiver.length; i++) { + sysUser = sysUserService.getSysUserById(Long.parseLong(messageReceiver[i])); + receiverName[i] = sysUser.getUserName(); + + refUserMessage = new SysRefUserMessage(); + refUserMessage.setMessageId(msg.getId()); + refUserMessage.setMessageTitleRdd(msg.getMessageTitle()); + refUserMessage.setMessageTypeRdd(msg.getMessageType()); + refUserMessage.setMessageSenderNameRdd(msg.getMessageSenderNameRdd()); + refUserMessage.setReceiverId(sysUser.getId()); + refUserMessage.setReceiverNameRdd(sysUser.getUserName()); + refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); + refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); + + sysMessageService.insertSysRefUserMessage(refUserMessage); + + // 发送邮件 + mailUtil.setSubject(msg.getMessageTitle()); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.valueOfDescription(msg.getMessageContentType())); + mailUtil.setBody(msg.getMessageContent()); + mailUtil.setTo(sysUser.getUserEmail()); + mailUtil.send(); + } + + msg.setMessageSenderNameRdd(StringUtils.join(receiverName, ",")); + sysMessageService.updateSysMessage(msg); + + //信息已处理 + channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); + } catch (IOException e) { + LOGGER.error("【MQ-IMPP_MESSAGE_MAIL_QUEUE】处理出错:{}",e.getMessage(),e); + //丢弃这条消息 + try { + // 未成功处理,重新发送 + channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java new file mode 100644 index 0000000..18f3bf9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/schedulejob/DemoJob.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.core.apiservice.schedulejob; + +import cn.estsh.impp.framework.base.schedule.BaseImppScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Description : 定时任务 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-30 13:25 + * @Modify: + **/ +@ApiOperation("定时任务demo") +public class DemoJob extends BaseImppScheduleJob { + public static final Logger LOGGER = LoggerFactory.getLogger(DemoJob.class); + + public DemoJob() { + super(DemoJob.class,"定时任务demo"); + } + + @Override + public void executeImppJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + System.out.println("定时任务被执行"); + LOGGER.info("projectName:{},port:{}",applicationProperties.getApplicationName(),applicationProperties.getServerPort()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java new file mode 100644 index 0000000..33a2d5b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/DataSimpleServiceImpl.java @@ -0,0 +1,60 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.core.api.iservice.base.IDataSimpleService; +import cn.estsh.i3plus.core.apiservice.dao.IMachineFactoryDao; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +import cn.estsh.i3plus.pojo.mes.MachineFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-04 17:03 + * @Modify: + **/ +@Service +public class DataSimpleServiceImpl implements IDataSimpleService { + private Logger LOGGER = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private IMachineFactoryDao machineFactoryDao; + + @Override + public void saveMachineFactory(MachineFactory machineFactory) { + //生成主键 + machineFactory.setId(new SnowflakeIdMaker().nextId()); + machineFactoryDao.save(machineFactory); + } +/* + @Override + public void updateMachineFactoryNameById(long id, String factoryName) { + machineFactoryDao.updateMachineFactoryNameById(id,factoryName); + } + + @Override + public void deleteMachineFactoryById(long id) { + machineFactoryDao.deleteMachineFactoryById(id); + } + + @Autowired + private DataSource ds; + + @Override + public List findMachineFactoryByFactoryName(String factoryName) { + return machineFactoryDao.findMachineFactoryByFactoryName(factoryName); + } + + @Override + public List findMachineFactoryByFactoryCode(String factoryCode) { + return machineFactoryDao.findMachineFactoryByFactoryCode(factoryCode); + } + + @Override + public List findMachineFactorySpecial() { + return machineFactoryDao.findMachineFactorySpecial(); + }*/ +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java new file mode 100644 index 0000000..cec1026 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -0,0 +1,161 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.CredentialsException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.LockedAccountException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @Description : 用户登陆方法 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 17:18 + * @Modify: + **/ +@Service +public class SystemLoginService implements ISystemLoginService { + private static final Logger LOGGER = LoggerFactory.getLogger(SystemLoginService.class); + + @Autowired + private SysUserRepository sysUserRDao; + + /** + * 核心的缓存 + */ + @Resource(name="redisCore") + protected ImppRedis redisCore; + + @Override + public SessionUser queryUserLogin(String loginName, String loginPwd, String languageCode) { + //生成令牌 + UserToken ut = new UserToken(loginName,loginPwd,languageCode); + //token验证 + return AuthUtil.login(ut); + } + + @Override + public SessionUser queryAdminLogin(String loginName, String loginPwd, String languageCode) { + //生成令牌 + AdminToken adminToken = new AdminToken(loginName,loginPwd,languageCode); + //token验证 + return AuthUtil.login(adminToken); + } + + @Override + public SessionUser queryCheckUserLogin(UserToken userToken) { + //验证用户 + SysUser user = getUserLoginInfo(userToken.getLoginName(),userToken.getLoginPwd()); + LOGGER.info("【验证用户checkUserLogin】{}",user); + //未抛异常,封装用户 + return packSessionUser(user,CommonEnumUtil.USER_TYPE.USER.getCode(),userToken.getLanguageCode()); + } + + @Override + public SessionUser queryCheckAdminLogin(AdminToken adminToken) { + //验证用户 + SysUser user = getUserLoginInfo(adminToken.getLoginName(),adminToken.getLoginPwd()); + //未抛异常,封装用户 + return packSessionUser(user,CommonEnumUtil.USER_TYPE.ADMIN.getCode(),adminToken.getLanguageCode()); + } + + @Override + public SessionUser queryCheckSaAdminLogin(SaAdminToken saAdminToken) { + //SysUser user = getUserLoginInfo(saAdminToken.getLoginName(),saAdminToken.getLoginPwd()); + SysUser user = null; + /** + * to do + * + * 此处外网获取sa超级管理员用户名密码 + * 或者导入加密证书生成内存超级管理员用户名密码 + */ + return packSessionUser(user,CommonEnumUtil.USER_TYPE.SA.getCode(),saAdminToken.getLanguageCode()); + } + + @Override + public Integer doLoginPasswordError(String loginName) { + SysUser user = sysUserRDao.getByProperty("userLoginName",loginName); + if(user != null){ + String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getId(); + Object redisValue = redisCore.getObject(redisKey); + Integer num = redisValue == null ? 1 : Integer.parseInt(redisValue.toString()) + 1; + + if(num >= CommonConstWords.USER_LOGIN_ERROR_MAX_NUM){ + user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); + redisCore.deleteKey(redisKey); + sysUserRDao.update(user); + }else{ + redisCore.putObject(redisKey,num,24 * 60 * 60); + } + return num; + } + return 0; + } + + /** + * 根据用户名密码查询用户 + * @param loginName + * @param pwd + * @return + */ + public SysUser getUserLoginInfo(String loginName,String pwd) { + SysUser user = sysUserRDao.getByProperty("userLoginName",loginName); + if(user == null){ //用户不存在 + throw new CredentialsException("用户不存在"); + }else { + if(user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()){ + throw new LockedAccountException("账号已被锁定"); + } + try { + // 密码加密 + pwd = EncryptTool.hexMD5(pwd); + } catch (Exception e) { + LOGGER.error("登录密码加密出错。"); + throw new IncorrectCredentialsException("登陆密码错误"); + } + if (!StringUtils.equals(user.getUserLoginPassword(), pwd)) { //密码不符 + LOGGER.error("密码验证错误。"); + throw new IncorrectCredentialsException("登陆密码错误"); + } + + return user; + } + } + + /** + * 封装用户登陆信息 + * @param user + * @param userType + * @param languageCode + * @return + */ + private SessionUser packSessionUser(SysUser user,String userType, String languageCode) { + SessionUser sessionUser = new SessionUser(); + sessionUser.setLanguageCode(languageCode); +// sessionUser.setSiteCode(user.getFactoryCode()); + sessionUser.setUserName(user.getUserName()); + sessionUser.setUserType(userType); +// sessionUser.setUserCode(user.getUserInfo().getLanguageCode()); + + return sessionUser; + } + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java new file mode 100644 index 0000000..287f463 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java @@ -0,0 +1,431 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ModelEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.model.platform.CommonTreeModel; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.bean.SysPosition; +import cn.estsh.i3plus.pojo.platform.repository.SysDepartmentRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysMenuRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysOrganizeRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysPositionRepository; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : Core 树功能实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-24 11:17 + * @Modify : + **/ +@Service +public class CoreTreeService implements ICoreTreeService { + + public static final Logger LOGGER = LoggerFactory.getLogger(CoreTreeService.class); + + @Autowired + private SysDepartmentRepository departmentRDao; + + @Autowired + private SysPositionRepository positionRDao; + + @Autowired + private SysOrganizeRepository organizeRDao; + + @Autowired + private SysMenuRepository menuRDao; + + @Override + public List findSysPositionTreeByParentId(long parentId) { + List result = positionRDao.findByProperty("parentId", parentId); + + // 循环设置子集 + if(result != null && result.size() > 0){ + for (SysPosition position : result) { + findSysPositionChildrenTreePack(position,0); + } + } + + return result; + } + + @Override + public SysPosition getSysPositionTreeById(long id) { + // 查找数据 + SysPosition position = positionRDao.getById(id); + // 数据是否真实存在 + ValidatorBean.checkNotNull(position,"不存在的岗位信息"); + // 递归查询子集 + findSysPositionChildrenTreePack(position, 0); + + return position; + } + + @Override + public void findSysPositionChildrenTreePack(SysPosition parent, int step) { + ++step; + List childList = positionRDao.findByProperty("parentId", parent.getId()); + + if (childList.size() > 0) { + //说明有子集 + for (SysPosition child : childList) { + findSysPositionChildrenTreePack(child, step); + } + } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); + } + + @Override + public void doValidatorSysPositionParentId(SysPosition position) { + findSysPositionChildrenTreePack(position,0); + validatorSysPositionParentId(position.getChildList(),position.getParentId()); + } + + @Override + public List findSysDepartmentTreeByParentId(long parentId) { + List result = departmentRDao.findByProperty("parentId", parentId); + + // 循环设置子集 + if(result != null && result.size() > 0){ + for (SysDepartment department : result) { + findSysDepartmentChildrenTreePack(department,0); + } + } + + return result; + } + + @Override + public SysDepartment getSysDepartmentTreeById(long id) { + // 查找数据 + SysDepartment department = departmentRDao.getById(id); + // 数据是否真实存在 + ValidatorBean.checkNotNull(department,"不存在的部门信息"); + // 递归查询子集 + findSysDepartmentChildrenTreePack(department, 0); + + return department; + } + + @Override + public void findSysDepartmentChildrenTreePack(SysDepartment parent, int step) { + ++step; + List childList = departmentRDao.findByProperty("parentId", parent.getId()); + + if (childList.size() > 0) { + //说明有子集 + for (SysDepartment child : childList) { + findSysDepartmentChildrenTreePack(child, step); + } + } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); + } + + @Override + public void doValidatorSysDepartmentParentId(SysDepartment department) { + findSysDepartmentChildrenTreePack(department,0); + validatorSysDepartmentParentId(department.getChildList(),department.getParentId()); + } + + @Override + public List findSysOrganizeTreeByParentId(long parentId) { + StringBuffer orgHQL = new StringBuffer(); + HqlPack.getNumEqualPack(parentId,"parentId",orgHQL); + HqlPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"organizeSort"}, orgHQL); + List result = organizeRDao.findByHqlWhere(orgHQL.toString()); + + // 循环设置子集 + if(result != null && result.size() > 0){ + for (SysOrganize organize : result) { + findSysOrganizeChildrenTreePack(organize,0); + } + } + + return result; + } + + @Override + public SysOrganize getSysOrganizeTreeById(long id) { + // 查找数据 + SysOrganize organize = organizeRDao.getById(id); + // 数据是否真实存在 + ValidatorBean.checkNotNull(organize,"不存在的组织信息"); + // 递归查询子集 + findSysOrganizeChildrenTreePack(organize, 0); + + return organize; + } + + @Override + public void findSysOrganizeChildrenTreePack(SysOrganize parent, int step) { + ++step; + + StringBuffer orgHQL = new StringBuffer(); + HqlPack.getNumEqualPack(parent.getId(),"parentId",orgHQL); + HqlPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"organizeSort"}, orgHQL); + List childList = organizeRDao.findByHqlWhere(orgHQL.toString()); + + if (childList.size() > 0) { //说明有子集 + for (SysOrganize child : childList) { + findSysOrganizeChildrenTreePack(child, step); + } + } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); + } + + @Override + public void doValidatorSysOrganizeParentId(SysOrganize organize) { + findSysOrganizeChildrenTreePack(organize,0); + validatorSysOrganizeParentId(organize.getChildList(),organize.getParentId()); + } + + @Override + public List findSysMenuTreeByParentId(long parentId) { + List result = menuRDao.findByProperty("parentId", parentId); + + // 循环设置子集 + if(result != null && result.size() > 0){ + for (SysMenu menu : result) { + findSysMenuChildrenTreePack(menu,0); + } + } + + return result; + } + + @Override + public SysMenu getSysMenuTreeById(long id) { + // 查找数据 + SysMenu menu = menuRDao.getById(id); + // 数据是否真实存在 + ValidatorBean.checkNotNull(menu,"不存在的组织信息"); + // 递归查询子集 + findSysMenuChildrenTreePack(menu, 0); + + return menu; + } + + @Override + public void findSysMenuChildrenTreePack(SysMenu parent, int step) { + ++step; + List childList = menuRDao.findByProperty("parentId", parent.getId()); + + if (childList.size() > 0) { //说明有子集 + for (SysMenu child : childList) { + findSysMenuChildrenTreePack(child, step); + } + } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); + } + + @Override + public void doValidatorSysMenuParentId(SysMenu menu) { + findSysMenuChildrenTreePack(menu,0); + validatorSysMenuParentId(menu.getChildList(),menu.getParentId()); + } + + private void validatorSysPositionParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysPosition position : list) { + // 判断子集的ID 是否是 父节点ID + if(position.getId().equals(parentId) || position.getId().equals(position.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级岗位不能为子岗位") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysPositionParentId(position.getChildList(),parentId); + } + } + } + + private void validatorSysDepartmentParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysDepartment department : list) { + // 判断子集的ID 是否是 父节点ID + if(department.getId().equals(parentId) || department.getId().equals(department.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级部门不能为子部门") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysDepartmentParentId(department.getChildList(),parentId); + } + } + } + + private void validatorSysOrganizeParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysOrganize organize : list) { + // 判断子集的ID 是否是 父节点ID + if(organize.getId().equals(parentId) || organize.getId().equals(organize.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级部门不能为子部门") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysOrganizeParentId(organize.getChildList(),parentId); + } + } + } + + private void validatorSysMenuParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysMenu menu : list) { + // 判断子集的ID 是否是 父节点ID + if(menu.getId().equals(parentId) || menu.getId().equals(menu.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级部门不能为子部门") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysMenuParentId(menu.getChildList(),parentId); + } + } + } + + @Override + public List findOrganizeDepartment(long parentId) { + List result = new ArrayList<>(); + + StringBuffer hql = new StringBuffer(); + HqlPack.getNumEqualPack(parentId,"parentId",hql); + HqlPack.getOrderByPack(new Object[]{2}, new String[]{"organizeSort"}, hql); + List list = organizeRDao.findByHqlWhere(hql.toString()); + + // 循环设置子集 + if(list != null && list.size() > 0){ + for (SysOrganize organize : list) { + CommonTreeModel treeModel = new CommonTreeModel(); + treeModel.setBean(organize); + treeModel.setBeanType(ModelEnumUtil.COMMON_TREE_TYPE.TYPE_ORGANIZE.getValue()); + + findOrganizeTreePack(treeModel,0); + + result.add(treeModel); + } + } + + + return result; + } + + @Override + public CommonTreeModel getOrganizeById(long id) { + // 查找数据 + SysOrganize organize = organizeRDao.getById(id); + // 数据是否真实存在 + ValidatorBean.checkNotNull(organize,"不存在的组织信息"); + + CommonTreeModel treeModel = new CommonTreeModel(); + treeModel.setBean(organize); + treeModel.setBeanType(ModelEnumUtil.COMMON_TREE_TYPE.TYPE_ORGANIZE.getValue()); + + // 递归查询子集 + findOrganizeTreePack(treeModel, 0); + return treeModel; + } + + @Override + public void findOrganizeTreePack(CommonTreeModel parent, int step) { + if(null != parent){ + BaseBean bean = parent.getBean(); + List childList = new ArrayList<>(); + CommonTreeModel treeModel = null; + if(bean instanceof SysOrganize){ + SysOrganize organize = (SysOrganize) bean; + + StringBuffer hql = new StringBuffer(); + HqlPack.getNumEqualPack(organize.getId(),"parentId",hql); + HqlPack.getOrderByPack(new Object[]{2}, new String[]{"organizeSort"}, hql); + List organizeList = organizeRDao.findByHqlWhere(hql.toString()); + + if(organizeList != null && organizeList.size() > 0){ + for (SysOrganize org : organizeList) { + treeModel = new CommonTreeModel(); + treeModel.setBean(org); + treeModel.setBeanType(ModelEnumUtil.COMMON_TREE_TYPE.TYPE_ORGANIZE.getValue()); + + findOrganizeTreePack(treeModel,step); + + childList.add(treeModel); + } + } + + StringBuffer depHQL = new StringBuffer(); + HqlPack.getNumEqualPack(organize.getId(),"organizeId",depHQL); + HqlPack.getOrderByPack(new Object[]{2}, new String[]{"departmentSort"}, depHQL); + List departmentList = departmentRDao.findByHqlWhere(depHQL.toString()); + + if(departmentList != null && departmentList.size() > 0){ + for (SysDepartment department : departmentList) { + if(department.getParentId() != null && department.getParentId() < 0){ + treeModel = new CommonTreeModel(); + treeModel.setBean(department); + treeModel.setBeanType(ModelEnumUtil.COMMON_TREE_TYPE.TYPE_DEPARTMENT.getValue()); + + findOrganizeTreePack(treeModel,step); + + childList.add(treeModel); + } + } + } + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getBean().getClass().getName(), parent.getChildList().size(), step); + }else if(bean instanceof SysDepartment){ + SysDepartment department = (SysDepartment) bean; + + StringBuffer depHQL = new StringBuffer(); + HqlPack.getNumEqualPack(department.getId(),"parentId",depHQL); + HqlPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"departmentSort"}, depHQL); + List departmentList = departmentRDao.findByHqlWhere(depHQL.toString()); + + if(departmentList != null && departmentList.size() > 0){ + for (SysDepartment dep : departmentList) { + treeModel = new CommonTreeModel(); + treeModel.setBean(dep); + treeModel.setBeanType(ModelEnumUtil.COMMON_TREE_TYPE.TYPE_DEPARTMENT.getValue()); + + findOrganizeTreePack(treeModel,step); + + childList.add(treeModel); + } + } + } + parent.setChildList(childList); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/DataMoreService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/DataMoreService.java new file mode 100644 index 0000000..21ceb3a --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/DataMoreService.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.IDataMoreService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-04 17:06 + * @Modify: + **/ +@Service +public class DataMoreService implements IDataMoreService { + private Logger LOGGER = LoggerFactory.getLogger(this.getClass()); +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java new file mode 100644 index 0000000..745b9cf --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java @@ -0,0 +1,108 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysConfig; +import cn.estsh.i3plus.pojo.platform.repository.SysConfigRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 系统参数服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 9:25 + * @Modify : + **/ +@Service +public class SysConfigService implements ISysConfigService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysConfigService.class); + + @Autowired + private SysConfigRepository SysConfigRDao; + + @Override + @ApiOperation(value = "添加系统参数") + public void insertSysConfig(SysConfig sysConfig) { + LOGGER.info("系统参数 SYS_CONFIG :{}",sysConfig); + SysConfigRDao.insert(sysConfig); + } + + @Override + @ApiOperation(value = "删除系统参数") + public void deleteSysConfigById(Long id) { + LOGGER.info("系统参数 SYS_CONFIG :{}",id); + SysConfigRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "修改系统参数") + public void updateSysConfig(SysConfig sysConfig) { + LOGGER.info("系统参数 SYS_CONFIG :{}",sysConfig); + SysConfigRDao.update(sysConfig); + } + + @Override + @ApiOperation(value = "查询全部系统参数") + public List ListSysConfig() { + LOGGER.info("系统参数 SYS_CONFIG list"); + return SysConfigRDao.findAll(); + } + + @Override + @ApiOperation(value = "根据id查询系统参数") + public SysConfig getSysConfigById(Long id) { + LOGGER.info("系统参数 SYS_CONFIG id:{}",id); + return SysConfigRDao.getById(id); + } + + @Override + @ApiOperation(value = "系统配置复杂查询分页排序") + public ListPager querySysConfigByPager(SysConfig sysConfig, Pager pager) { + LOGGER.info("系统参数 SYS_CONFIG SysConfig:{},Pager:{}",sysConfig,pager); + if(sysConfig == null) { + pager = PagerHelper.getPager(pager, SysConfigRDao.listCount()); + return new ListPager(SysConfigRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysConfig(sysConfig); + pager = PagerHelper.getPager(pager, SysConfigRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(SysConfigRDao.findByHqlWherePage(hqlPack + sysConfig.orderBy(),pager),pager); + } + } + + @Override + @ApiOperation(value = "查询系统邮件配置项") + public SysConfig getSysConfigByCode(String code) { + return SysConfigRDao.getByProperty("configCode",code); + } + + @Override + @ApiOperation(value = "查询系统邮件配置项") + public List findMailConfig() { + List mailConfig = new ArrayList(); + mailConfig.add(SysConfigRDao.getByProperty("configCode", PlatformConstWords.MAIL_HOST)); + mailConfig.add(SysConfigRDao.getByProperty("configCode", PlatformConstWords.MAIL_PORT)); + mailConfig.add(SysConfigRDao.getByProperty("configCode", PlatformConstWords.MAIL_USER)); + mailConfig.add(SysConfigRDao.getByProperty("configCode", PlatformConstWords.MAIL_PASSWORD)); + mailConfig.add(SysConfigRDao.getByProperty("configCode", PlatformConstWords.MAIL_NICK)); + + return mailConfig; + } + + @Override + @ApiOperation(value = "根据code修改系统配置") + public void updateSysConfigByCode(String code, String value) { + SysConfigRDao.updateByProperties("configCode",value,"configValue",value); + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java new file mode 100644 index 0000000..c925343 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java @@ -0,0 +1,205 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.repository.SysDepartmentRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysOrganizeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 部门服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-24 20:47 + * @Modify : + **/ +@Service +public class SysDepartmentService implements ISysDepartmentService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysDepartmentService.class); + + @Autowired + private SysDepartmentRepository departmentRDao; + + @Autowired + private SysOrganizeRepository organizeRDao; + + @Autowired + private CoreTreeService coreTreeService; + + @Override + public SysDepartment insertSysDepartment(SysDepartment department) { + LOGGER.info("部门信息 SysDepartment department:{}", department); + // 代码唯一校验 + long count = departmentRDao.findByPropertyCount("departmentCode", department.getDepartmentCode()); + if(count <= 0){ + + //冗余父节点信息 + if (department.getParentId() != null && department.getParentId() > 0) { + LOGGER.info("部门信息 DEPARTMENT :{}", department.getParentId()); + SysDepartment parentPosition = departmentRDao.getById(department.getParentId()); + ValidatorBean.checkNotNull(parentPosition,"上级部门信息不存在"); + + department.setParentNameRdd(parentPosition.getName()); + } + + LOGGER.info("组织信息 ORGANIZE :{}", department.getOrganizeId()); + SysOrganize organize = organizeRDao.getById(department.getOrganizeId()); + ValidatorBean.checkNotNull(organize); + + department.setOrganizeNameRdd(organize.getName()); + + LOGGER.info("部门信息 DEPARTMENT {}",department); + return departmentRDao.insert(department); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("部门代码已存在") + .setErrorSolution("请重新输入部门代码") + .build(); + } + } + + @Override + public void deleteSysDepartmentById(Long id) { + LOGGER.info("部门信息 SysDepartment id :{}", id); + // 查询是否存在子级 + LOGGER.info("部门信息 DEPARTMENT :{}", id); + if (departmentRDao.findByPropertyCount("parentId",id) > 0) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关部门信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + } + + // 删除部门 + LOGGER.info("部门信息 DEPARTMENT :{}", id); + departmentRDao.deleteById(id); + } + + @Override + public void deleteSysDepartmentByIds(Long[] ids) { + LOGGER.info("部门信息 DEPARTMENT ids :{}", ids); + long positionCount = departmentRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("parentId",ids)); + if (positionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关部门信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + }else { + departmentRDao.deleteByIds(ids); + } + } + + @Override + public void updateSysDepartment(SysDepartment department) { + LOGGER.info("部门信息 DEPARTMENT department :{}", department); + // 唯一校验 CODE 相同 ID 不同 则视为相同 + List list = departmentRDao.findByProperty("departmentCode", department.getDepartmentCode()); + if(list != null && list.size() > 0){ + for (SysDepartment dep : list) { + if(!dep.getId().equals(department.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("部门代码已存在") + .setErrorSolution("请重新输入部门代码") + .build(); + } + } + } + + // 父节点检查 + coreTreeService.doValidatorSysDepartmentParentId(department); + + // 查询父级部门名称 + if (department.getParentId() != null && department.getParentId() > 0) { + LOGGER.info("部门信息 DEPARTMENT :{}", department.getParentId()); + SysDepartment parentPosition = departmentRDao.getById(department.getParentId()); + ValidatorBean.checkNotNull(parentPosition,"上级部门信息不存在"); + + department.setParentNameRdd(parentPosition.getName()); + } + + // 查询所属组织名称 + LOGGER.info("组织信息 ORGANIZE organizeId:{}", department.getOrganizeId()); + SysOrganize organize = organizeRDao.getById(department.getOrganizeId()); + ValidatorBean.checkNotNull(organize); + + department.setOrganizeNameRdd(organize.getName()); + + // 新增部门 + LOGGER.info("部门信息 DEPARTMENT department:{}",department); + departmentRDao.update(department); + // 修改冗余信息 + departmentRDao.updateByProperties("parentId",department.getId(), + new String[]{"parentNameRdd", "organizeId", "organizeNameRdd"}, + new Object[]{department.getName(), department.getOrganizeId(), department.getOrganizeNameRdd()}); + + } + + @Override + public List listSysDepartment() { + LOGGER.info("部门信息 DEPARTMENT list"); + return departmentRDao.list(); + } + + @Override + public ListPager querySysDepartment(SysDepartment department, Pager pager) { + LOGGER.info("部门 SysDepartment find department :{} page:{}", department, pager); + + if (department == null) { + //不传入实体对象,查询所有 + int count = departmentRDao.listCount(); + pager = PagerHelper.getPager(pager, count); + return new ListPager(departmentRDao.listPager(pager), pager); + } else { + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysDepartment(department); + pager = PagerHelper.getPager(pager, departmentRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(departmentRDao.findByHqlWherePage(hqlPack + department.orderBy(), pager), pager); + } + } + + @Override + public SysDepartment getSysDepartmentById(Long id) { + LOGGER.info("部门信息 DEPARTMENT id:{}",id); + return departmentRDao.getById(id); + } + + @Override + public ListPager findSysDepartmentByPager(SysDepartment department, Pager pager) { + LOGGER.info("部门信息 DEPARTMENT department :{}", department); + LOGGER.info("部门信息 DEPARTMENT pager :{}", pager); + + if (department == null) { + pager = PagerHelper.getPager(pager, departmentRDao.listCount()); + return new ListPager(departmentRDao.listPager(pager),pager); + } else { + String hqlPack = CoreHqlPack.packHqlSysDepartment(department); + pager = PagerHelper.getPager(pager, departmentRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(departmentRDao.findByHqlWherePage( + hqlPack + department.orderBy(),pager),pager); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java new file mode 100644 index 0000000..aa8469b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDictionaryService.java @@ -0,0 +1,179 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.repository.SysDictionaryRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 字典服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-28 23:44 + * @Modify : + **/ +@Service +public class SysDictionaryService implements ISysDictionaryService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysDictionaryService.class); + + @Autowired + private SysDictionaryRepository sysDictionaryRDao; + + @Override + @ApiOperation(value = "添加字典") + public void insertSysDictionary(SysDictionary sysDictionary) { + long repeatCodeCount = sysDictionaryRDao.findByPropertyCount("dictionaryCode",sysDictionary.getDictionaryCode()); + long repeatValueCount = sysDictionaryRDao.findByPropertyCount("dictionaryValue",sysDictionary.getDictionaryValue()); + if (repeatCodeCount > 0 || repeatValueCount > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("字典代码已存在") + .setErrorSolution("请重新输入字典代码") + .build(); + } + + // 查询父级字典名称 + if (sysDictionary.getParentId() != null && sysDictionary.getParentId() > 0) { + LOGGER.info("字典 SYS_DICTIONARY parentId:{}", sysDictionary.getParentId()); + SysDictionary parentSysDictionary = sysDictionaryRDao.getById(sysDictionary.getParentId()); + ValidatorBean.checkNotNull(parentSysDictionary); + + sysDictionary.setParentNameRdd(parentSysDictionary.getName()); + sysDictionary.setParentCodeRdd(parentSysDictionary.getDictionaryCode()); + } else { + sysDictionary.setParentId(CommonEnumUtil.PARENT.DEFAULT.getValue()); + } + + LOGGER.info("字典 SYS_DICTIONARY sysDictionary:{}",sysDictionary); + sysDictionaryRDao.insert(sysDictionary); + } + + @Override + @ApiOperation(value = "根据id删除字典") + public void deleteSysDictionaryById(Long id) { + LOGGER.info("字典 SYS_DICTIONARY id:{}",id); + sysDictionaryRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "修改字典") + public void updateSysDictionary(SysDictionary sysDictionary) { + // 校验唯一 + String hqlPack = CoreHqlPack.packHqlSysDictionaryCode(sysDictionary); + long repeatCodeCount = sysDictionaryRDao.findByHqlWhereCount(hqlPack); + hqlPack = CoreHqlPack.packHqlSysDictionaryValue(sysDictionary); + long repeatValueCount = sysDictionaryRDao.findByHqlWhereCount(hqlPack); + if (repeatCodeCount > 0 || repeatValueCount > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("字典代码已存在") + .setErrorSolution("请重新输入字典代码") + .build(); + } + + // 查询父级字典名称 + if (sysDictionary.getParentId() != null && sysDictionary.getParentId() > 0) { + LOGGER.info("字典 SYS_DICTIONARY parentId:{}", sysDictionary.getParentId()); + SysDictionary parentSysDictionary = sysDictionaryRDao.getById(sysDictionary.getParentId()); + ValidatorBean.checkNotNull(parentSysDictionary); + + sysDictionary.setParentNameRdd(parentSysDictionary.getName()); + sysDictionary.setParentCodeRdd(parentSysDictionary.getDictionaryCode()); + } + + LOGGER.info("字典 SYS_DICTIONARY sysDictionary:{}",sysDictionary); + sysDictionaryRDao.update(sysDictionary); + } + + @Override + @ApiOperation(value = "查询所有字典信息") + public List listSysDictionary() { + LOGGER.info("字典 SYS_DICTIONARY list"); + return sysDictionaryRDao.list(); + } + + @Override + @ApiOperation(value = "根据id查询字典信息") + public SysDictionary getSysDictionaryById(Long id) { + LOGGER.info("字典 SYS_DICTIONARY id:{}",id); + return sysDictionaryRDao.getById(id); + } + + @Override + @ApiOperation(value = "根据父级代码查询字典项信息") + public List findSysDictionaryByParentCode(String parentCode) { + LOGGER.info("字典 SYS_DICTIONARY parentCode:{}",parentCode); + return sysDictionaryRDao.findByProperty("parentCodeRdd",parentCode); + } + + @Override + @ApiOperation(value = "字典复杂查询,分页,排序",notes = "默认查询非顶级字典") + public ListPager querySysDictionaryByPager(SysDictionary sysDictionary, Pager pager) { + sysDictionary = sysDictionary == null ? new SysDictionary():sysDictionary; + + String hqlPack = CoreHqlPack.packHqlSysDictionary(sysDictionary); + pager = PagerHelper.getPager(pager, sysDictionaryRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysDictionaryRDao.findByHqlWherePage(hqlPack + sysDictionary.orderBy(),pager),pager); + } + + @Override + @ApiOperation(value = "查询顶级字典") + public List findSysDictionaryByTop() { + LOGGER.info("字典 SYS_DICTIONARY parentId:{}", CommonEnumUtil.PARENT.DEFAULT.getValue()); + return sysDictionaryRDao.findByProperty("parentId",(long)CommonEnumUtil.PARENT.DEFAULT.getValue()); + } + + @Override + @ApiOperation(value = "批量删除字典") + public void deleteSysDictionaryByIds(Long[] ids) { + LOGGER.info("字典 SYS_DICTIONARY ids:{}", ids.toString()); + sysDictionaryRDao.deleteByIds(ids); + } + + @Override + @ApiOperation(value = "检出文件名称是否符合系统规范") + public boolean checkFileName(String fileName) { + List list = findSysDictionaryByParentCode(CommonConstWords.DICTIONARY_FILE_TYPE); + + if(list != null && list.size()> 0){ + String suffix = StringTool.getStringFileSuffix(fileName,true); + + for (SysDictionary dictionary : list) { + if(suffix.toUpperCase().equals(dictionary.getDictionaryValue().toUpperCase())){ + return true; + } + } + } + return false; + } + + @Override + @ApiOperation(value = "根据父节点 以及当前节点CODE 获取字典信息") + public SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode, String code) { + List list = sysDictionaryRDao.findByProperty(new String[]{"parentCodeRdd","dictionaryCode"}, + new Object[]{parentCode,code}); + if(list != null && list.size() > 0){ + return list.get(0); + } + return null; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java new file mode 100644 index 0000000..fa9c668 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysFileServiceImpl.java @@ -0,0 +1,79 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.repository.SysFileRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 文件资源服务接口 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 16:28 + * @Modify : + **/ +@Service +public class SysFileServiceImpl implements ISysFileService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysFileServiceImpl.class); + + @Autowired + public SysFileRepository sysFileRDao; + + @Override + public SysFile insertSysFile(SysFile sysFile) { + LOGGER.info("文件资源 SYS_FILE :{}",sysFile); + return sysFileRDao.insert(sysFile); + } + + @Override + public void deleteSysFileById(Long id) { + LOGGER.info("文件资源 SYS_FILE id:{}",id); + sysFileRDao.deleteById(id); + } + + @Override + public void updateSysFile(SysFile sysFile) { + LOGGER.info("文件资源 SYS_FILE :{}",sysFile); + sysFileRDao.update(sysFile); + } + + @Override + public List listSysFile() { + LOGGER.info("文件资源 SYS_FILE list"); + return sysFileRDao.list(); + } + + @Override + public SysFile getSysFileById(Long id) { + LOGGER.info("文件资源 SYS_FILE id:{}",id); + return sysFileRDao.getById(id); + } + + @Override + public ListPager querySysFileByPager(SysFile sysFile, Pager pager) { + LOGGER.info("文件资源 SYS_FILE sysFile:{},Pager:{}",sysFile,pager); + if(sysFile == null) { + pager = PagerHelper.getPager(pager, sysFileRDao.listCount()); + return new ListPager(sysFileRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysFile(sysFile); + pager = PagerHelper.getPager(pager, sysFileRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysFileRDao.findByHqlWherePage(hqlPack + sysFile.orderBy(),pager),pager); + } + } + + @Override + public void deleteSysFileByIds(Long[] ids) { + LOGGER.info("文件资源 SYS_FILE ids:{}", ids.toString()); + sysFileRDao.deleteByIds(ids); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java new file mode 100644 index 0000000..6b85de1 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleLanguageService.java @@ -0,0 +1,150 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleLanguageService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleResourceRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description :系统语言 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-12 13:48 + * @Modify: + **/ +@Service +public class SysLocaleLanguageService implements ISysLocaleLanguageService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysLocaleLanguageService.class); + + @Autowired + private SysLocaleLanguageRepository sysLocaleLanguageRDao; + + @Autowired + private SysLocaleResourceRepository sysLocaleResourceRDao; + + @Override + public SysLocaleLanguage insertSysLocaleLanguage(SysLocaleLanguage sysLocaleLanguage) { + LOGGER.info("系统语言 SYS_LOCALE_LANGUAGE SysLocaleLanguage:{}",sysLocaleLanguage); + int count = sysLocaleLanguageRDao.findByPropertyCount("languageCode",sysLocaleLanguage.getLanguageCode()); + if (count > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("语言代码已存在") + .setErrorSolution("请重新输入语言代码") + .build(); + } + + return sysLocaleLanguageRDao.insert(sysLocaleLanguage); + } + + @Override + public void updateSysLocaleLanguage(SysLocaleLanguage sysLocaleLanguage) { + SysLocaleLanguage data = sysLocaleLanguageRDao.getById(sysLocaleLanguage.getId()); + + String hqlPack = CoreHqlPack.packHqlSysLocaleLanguageCode(sysLocaleLanguage); + int count = sysLocaleLanguageRDao.findByHqlWhereCount(hqlPack); + if (count > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("语言代码已存在") + .setErrorSolution("请重新输入语言代码") + .build(); + } + + // 根据资源中的语言代码和名称 + sysLocaleResourceRDao.updateByProperties( + "languageCode", data.getLanguageCode(), + new String[]{"languageCode", "languageNameRdd"}, + new Object[]{sysLocaleLanguage.getLanguageCode(), sysLocaleLanguage.getLanguageName()} + ); + + sysLocaleLanguageRDao.update(sysLocaleLanguage); + } + + @Override + public void deleteSysLocaleLanguageById(Long id) { + SysLocaleLanguage sysLocaleLanguage = sysLocaleLanguageRDao.getById(id); + ValidatorBean.checkNotNull(sysLocaleLanguage,"需要删除的资源不存在"); + + if(sysLocaleResourceRDao.isExitByProperty("languageCode",sysLocaleLanguage.getLanguageCode())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("存在关联资源无法删除") + .build(); + } + + sysLocaleLanguageRDao.deleteById(id); + } + + @Override + public List listSysLocaleLanguage() { + LOGGER.info("系统语言 SYS_LOCALE_LANGUAGE list"); + return sysLocaleLanguageRDao.list(); + } + + @Override + public ListPager querySysLocaleLanguageByPager(SysLocaleLanguage sysLocaleLanguage, Pager pager) { + if(sysLocaleLanguage == null) { + pager = PagerHelper.getPager(pager, sysLocaleLanguageRDao.listCount()); + return new ListPager(sysLocaleLanguageRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysLocaleLanguage(sysLocaleLanguage); + pager = PagerHelper.getPager(pager, sysLocaleLanguageRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysLocaleLanguageRDao.findByHqlWherePage(hqlPack + sysLocaleLanguage.orderBy(),pager),pager); + } + } + + @Override + public void deleteSysLocaleLanguageByIds(Long[] ids) { + if(sysLocaleResourceRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("id",ids)) > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("存在关联资源无法删除") + .build(); + } + + sysLocaleLanguageRDao.deleteByIds(ids); + } + + @Override + public void updateSysLocaleLanguageDefaultById(Long ids) { + sysLocaleLanguageRDao.updateByHqlWhere("and 1=1","isDefault",CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + sysLocaleLanguageRDao.updateByProperties("id",ids, + "isDefault",CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + + @Override + public SysLocaleLanguage getSysLocaleLanguageByCode(String code) { + return sysLocaleLanguageRDao.getByProperty("languageCode",code); + } + + @Override + public void updateSysLocaleLanguageStatusById(Long id, Integer status) { + sysLocaleLanguageRDao.updateByProperties("id",id,"languageStatus",status); + } + + @Override + public void updateSysLocaleLanguageStatusByIds(Long[] ids, Integer status) { + sysLocaleLanguageRDao.updateByHqlWhere(CoreHqlPack.packHqlIds("id",ids),"languageStatus",status); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java new file mode 100644 index 0000000..ae7f1d8 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java @@ -0,0 +1,123 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleResourceService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleResourceRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 系统资源 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-12 14:46 + * @Modify: + **/ +@Service +public class SysLocaleResourceService implements ISysLocaleResourceService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysLocaleLanguageService.class); + + @Autowired + private SysLocaleResourceRepository sysLocaleResourceRDao; + + @Autowired + private SysLocaleLanguageRepository sysLocaleLanguageRDao; + + @Override + @ApiOperation(value = "新增系统资源") + public SysLocaleResource insertSysLocaleResource(SysLocaleResource sysLocaleResource) { + LOGGER.info("系统资源 SYS_LOCALE_RESOURCE SysLocaleResource:{}",sysLocaleResource); + int count = sysLocaleResourceRDao.findByPropertyCount(new String[]{"languageCode","resourceKey"}, + new String[]{sysLocaleResource.getLanguageCode(),sysLocaleResource.getResourceKey()}); + if (count > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("语言资源已存在") + .setErrorSolution("请重新输入语言代码与资源键") + .build(); + } + + // 设置语言名称冗余 + SysLocaleLanguage sysLocaleLanguage = sysLocaleLanguageRDao.getByProperty("languageCode", + sysLocaleResource.getLanguageCode()); + ValidatorBean.checkNotNull(sysLocaleLanguage,"选中的语言不存在"); + sysLocaleResource.setLanguageNameRdd(sysLocaleLanguage.getLanguageName()); + + return sysLocaleResourceRDao.insert(sysLocaleResource); + } + + @Override + public void updateSysLocaleResource(SysLocaleResource sysLocaleResource) { + LOGGER.info("系统资源 SYS_LOCALE_RESOURCE SysLocaleResource:{}",sysLocaleResource); + String hqlPack = CoreHqlPack.packHqlSysLocaleResourceKey(sysLocaleResource); + int count = sysLocaleResourceRDao.findByHqlWhereCount(hqlPack); + if (count > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("语言资源已存在") + .setErrorSolution("请重新输入语言代码与资源键") + .build(); + } + + // 设置语言名称冗余 + SysLocaleLanguage sysLocaleLanguage = sysLocaleLanguageRDao.getByProperty("languageCode", + sysLocaleResource.getLanguageCode()); + ValidatorBean.checkNotNull(sysLocaleLanguage,"选中的语言不存在"); + sysLocaleResource.setLanguageNameRdd(sysLocaleLanguage.getLanguageName()); + + sysLocaleResourceRDao.update(sysLocaleResource); + } + + @Override + public void deleteSysLocaleResourceById(Long id) { + LOGGER.info("系统资源 SYS_LOCALE_RESOURCE id:{}",id); + sysLocaleResourceRDao.deleteById(id); + } + + @Override + public List listSysLocaleResource() { + LOGGER.info("系统资源 SYS_LOCALE_RESOURCE list"); + return sysLocaleResourceRDao.list(); + } + + @Override + public ListPager querySysLocaleResourceByPager(SysLocaleResource sysLocaleResource, Pager pager) { + LOGGER.info("系统资源 SYS_LOCALE_RESOURCE SysLocaleResource:{},Pager:{}",sysLocaleResource,pager); + if(sysLocaleResourceRDao == null) { + pager = PagerHelper.getPager(pager, sysLocaleResourceRDao.listCount()); + return new ListPager(sysLocaleResourceRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysLocaleResource(sysLocaleResource); + pager = PagerHelper.getPager(pager, sysLocaleResourceRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysLocaleResourceRDao.findByHqlWherePage(hqlPack + sysLocaleResource.orderBy(),pager),pager); + } + } + + @Override + public void deleteSysLocaleResourceByIds(Long[] ids) { + LOGGER.info("系统资源 SYS_LOCALE_RESOURCE ids:{}",ids); + sysLocaleResourceRDao.deleteByIds(ids); + } + + @Override + public void insertSysLocaleResourceList(List sysLocaleResourcesList) { + sysLocaleResourceRDao.saveAll(sysLocaleResourcesList); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogExceptionService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogExceptionService.java new file mode 100644 index 0000000..c2c890d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogExceptionService.java @@ -0,0 +1,45 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogExceptionService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysLogException; +import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogExceptionRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreBsonPack; +import io.swagger.annotations.ApiOperation; +import org.bson.conversions.Bson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description :异常日志服务接口实现 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-19 17:30 + * @Modify: + **/ +@Service +public class SysLogExceptionService implements ISysLogExceptionService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogExceptionService.class); + + @Autowired + private SysLogExceptionRepository sysLogExceptionRDao; + + @Override + @ApiOperation(value = "系统异常日志复杂查询,分页,排序") + public ListPager querySysLogExceptionByPager(SysLogException sysLogException, Pager pager) { + if(sysLogException == null) { + pager = PagerHelper.getPager(pager, (int) sysLogExceptionRDao.count()); + return new ListPager(sysLogExceptionRDao.findAll(),pager); + }else{ + Bson bson = CoreBsonPack.packBsonBySysLogException(sysLogException); + pager = PagerHelper.getPager(pager,sysLogExceptionRDao.findByBsonCount(bson)); + //分页,排序 + return new ListPager(sysLogExceptionRDao.findByBsonPager(bson,pager,sysLogException.getOrderByParam() + ,sysLogException.getAscOrDesc()),pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogOperateService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogOperateService.java new file mode 100644 index 0000000..4822f16 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogOperateService.java @@ -0,0 +1,90 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogOperateService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysLogOperate; +import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogOperateRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreBsonPack; +import io.swagger.annotations.ApiOperation; +import org.bson.conversions.Bson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 操作日志服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 13:54 + * @Modify : + **/ +@Service +public class SysLogOperateService implements ISysLogOperateService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogOperateService.class); + + @Autowired + public SysLogOperateRepository logOperateRDao; + + @Override + @ApiOperation(value = "添加操作日志",notes = "添加操作日志") + public SysLogOperate insertSysLogOperate(SysLogOperate logOperate) { + return logOperateRDao.insert(logOperate); + } + + @Override + @ApiOperation(value = "根据id删除日志",notes = "根据id删除日志") + public void deleteSysLogOperateById(Long id) { + logOperateRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "查询全部操作日志",notes = "查询全部操作日志") + public List listSysLogOperate() { + return logOperateRDao.listPager(null); + } + + @Override + public void deleteSysLogOperateByIds(Long[] ids) { + for(Long id : ids){ + logOperateRDao.deleteById(id); + } + } + + @Override + @ApiOperation(value = "根据id查询操作日志",notes = "根据id查询操作日志") + public SysLogOperate getSysLogOperateById(Long id) { + return logOperateRDao.getById(id); + } + + @Override + @ApiOperation(value = "根据操作人姓名模糊查询日志",notes = "根据操作人姓名模糊查询日志") + public List listSysLogOperateByOperateUserName(String operateUserName) { + return logOperateRDao.findByProperty("operateUserName",operateUserName); + } + + @Override + @ApiOperation(value = "查询所有日志数量") + public long countAllSysLogOperate() { + return logOperateRDao.listCount(); + } + + @Override + @ApiOperation(value = "操作日志复杂查询,分页,排序",notes = "操作日志复杂查询,分页,排序") + public ListPager querySysLogOperateByPager(SysLogOperate logOperate, Pager pager) { + if(logOperate == null) { + pager = PagerHelper.getPager(pager, (int) logOperateRDao.count()); + return new ListPager(logOperateRDao.findAll(),pager); + }else{ + Bson bson = CoreBsonPack.packBsonByLogOperate(logOperate); + pager = PagerHelper.getPager(pager,logOperateRDao.findByBsonCount(bson)); + //分页,排序 + return new ListPager(logOperateRDao.findByBsonPager(bson,pager,logOperate.getOrderByParam(),logOperate.getAscOrDesc()),pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java new file mode 100644 index 0000000..9cc58b8 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLogSystemService.java @@ -0,0 +1,72 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysLogSystemService; +import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogSystemRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreBsonPack; +import io.swagger.annotations.ApiOperation; +import org.bson.conversions.Bson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 系统日志服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 10:41 + * @Modify : + **/ +@Service +public class SysLogSystemService implements ISysLogSystemService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysLogSystemService.class); + + @Autowired + private SysLogSystemRepository logSystemRDao; + + @Override + @ApiOperation(value = "添加系统日志",notes = "添加系统日志") + public void insertSysLogSystem(SysLogSystem logSystem) { + logSystemRDao.insert(logSystem); + } + + @Override + @ApiOperation(value = "删除日志",notes = "删除日志") + public void deleteSysLogSystemById(Long id) { + logSystemRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "查询全部日志",notes = "查询全部日志") + public List listSysLogSystem() { + return logSystemRDao.findAll(); + } + + @Override + @ApiOperation(value = "根据id查询系统日志",notes = "根据id查询系统日志") + public SysLogSystem getSysLogSystemById(long id) { + return logSystemRDao.getById(id); + } + + @Override + @ApiOperation(value = "系统日志分页复杂查询",notes = "系统日志分页复杂查询") + public ListPager querySysLogSystemByPager(SysLogSystem logSystem, Pager pager) { + if (logSystem == null) { + pager = PagerHelper.getPager(pager,logSystemRDao.listCount()); + return new ListPager(logSystemRDao.listPager(pager),pager); + } else { + Bson bson = CoreBsonPack.packBsonByLogSystem(logSystem); + pager = PagerHelper.getPager(pager,logSystemRDao.findByBsonCount(bson)); + return new ListPager(logSystemRDao.findByBsonPager(bson,pager,logSystem.getOrderByParam() + ,logSystem.getAscOrDesc()),pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java new file mode 100644 index 0000000..f6e4d09 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java @@ -0,0 +1,192 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.i3plus.pojo.platform.repository.SysRefRoleMenuRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysMenuRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 系统功能业务接口实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 15:18:14.969 + * @Modify : + **/ +@Service +public class SysMenuService implements ISysMenuService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysMenuService.class); + + @Autowired + private SysMenuRepository sysMenuRDao; + + @Autowired + private CoreTreeService coreTreeService; + + @Autowired + private SysRefRoleMenuRepository refRoleMenuRDao; + + @Override + public void updateSysMenu(SysMenu sysMenu) { + LOGGER.info("系统功能 SYS_MENU :{}", sysMenu); + + // 唯一校验 CODE 相同 ID 不同 则视为相同 + List list = sysMenuRDao.findByProperty("menuCode", sysMenu.getMenuCode()); + if(null != list && list.size() > 0){ + for (SysMenu menu : list) { + if(!menu.getId().equals(sysMenu.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("权限代码已存在") + .setErrorSolution("请重新输入权限代码") + .build(); + } + } + } + + // 父节点检查 + coreTreeService.doValidatorSysMenuParentId(sysMenu); + + if (sysMenu.getParentId() != null && sysMenu.getParentId() > 0) { + SysMenu parent = sysMenuRDao.getById(sysMenu.getParentId()); + ValidatorBean.checkNotNull(parent,"上级权限信息不存在"); + sysMenu.setParentNameRdd(parent.getName()); + } + + sysMenuRDao.update(sysMenu); + sysMenuRDao.updateByProperties("parentId",sysMenu.getId(), + "parentNameRdd",sysMenu.getName()); + } + + @Override + public void updateSysMenuStatus(Long id, int status, SessionUser user) { + LOGGER.info("系统功能 SYS_MENU id:{} status:{} user:{}", id,status,user); + SysMenu menu = sysMenuRDao.getById(id); + if(menu != null){ + menu.setMenuStatus(status); + menu.setModifyUser(user.getUserName()); + sysMenuRDao.update(menu); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("数据不存在") + .setErrorSolution("请重新操作") + .build(); + } + } + + @Override + public void updateSysMenuStatusByIds(Long[] ids, int status, SessionUser user) { + LOGGER.info("系统功能 SYS_MENU ids:{} status:{} user:{}", ids, status, user); + StringBuffer where = new StringBuffer(); + + HqlPack.getInPack(StringUtils.join( ids,","), "id", where); + sysMenuRDao.updateByHqlWhere(where.toString(), "menuStatus", status); + } + + @Override + public void deleteSysMenuById(Long id) { + LOGGER.info("系统功能 SYS_MENU Key:{}", id); + long count = sysMenuRDao.findByPropertyCount("parentId",id); + if(count >= 1){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode()) + .setErrorDetail("该数据有子集") + .setErrorSolution("请先删除子集在操作") + .build(); + + } + + refRoleMenuRDao.deleteById(id); + sysMenuRDao.deleteById(id); + } + + @Override + public void deleteSysMenuByIds(Long[] ids) { + LOGGER.info("系统功能 SYS_MENU ids :{}", ids); + long positionCount = sysMenuRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("parentId",ids)); + if (positionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关系统功能信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + }else { + refRoleMenuRDao.deleteByPropertyIn("menuId",ids); + sysMenuRDao.deleteByIds(ids); + } + } + + @Override + public SysMenu insertSysMenu(SysMenu sysMenu) { + LOGGER.info("系统功能 SYS_MENU :{}", sysMenu); + + // 代码唯一校验 + long count = sysMenuRDao.findByPropertyCount("menuCode", sysMenu.getMenuCode()); + if(count <= 0){ + if (sysMenu.getParentId() != null && sysMenu.getParentId() > 0) { + SysMenu parent = sysMenuRDao.getById(sysMenu.getParentId()); + ValidatorBean.checkNotNull(parent,"上级权限信息不存在"); + sysMenu.setParentNameRdd(parent.getName()); + } + return sysMenuRDao.insert(sysMenu); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("功能代码已存在") + .setErrorSolution("请重新输入功能代码") + .build(); + } + } + + @Override + public List findSysMenuAll() { + LOGGER.info("系统功能 SYS_MENU find All"); + return sysMenuRDao.findAll(); + } + + @Override + public SysMenu getSysMenuById(Long id) { + LOGGER.info("系统功能 SYS_MENU find id:{}", id); + return sysMenuRDao.getOne(id); + } + + @Override + public ListPager querySysMenu(SysMenu menu, Pager pager) { + LOGGER.info("系统权限 SysMenu find menu :{} page :{}", menu, pager); + + if (menu == null) { + //不传入实体对象,查询所有 + int count = sysMenuRDao.listCount(); + pager = PagerHelper.getPager(pager, count); + return new ListPager(sysMenuRDao.listPager(pager), pager); + } else { + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysMenu(menu); + pager = PagerHelper.getPager(pager, sysMenuRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysMenuRDao.findByHqlWherePage(hqlPack + menu.orderBy(), pager), pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java new file mode 100644 index 0000000..3b4d9d6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java @@ -0,0 +1,177 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.core.apiservice.mq.I3CoreQueueConfig; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import cn.estsh.i3plus.pojo.platform.repository.SysMessageRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysRefUserMessageRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 消息服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 18:02 + * @Modify : + **/ +@Service +public class SysMessageService implements ISysMessageService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysMessageService.class); + + @Autowired + private SysMessageRepository sysMessageRDao; + + @Autowired + private SysRefUserMessageRepository sysRefUserMessageRDao; + + @Autowired + private SysUserRepository sysUserRDao; + + /** + * rabbitMQ队列 + */ + @Autowired + private RabbitTemplate rabbitTemplate; + + @Override + @ApiOperation(value = "添加消息") + public SysMessage insertSysMessage(SysMessage sysMessage) { + return sysMessageRDao.insert(sysMessage); + } + + @Override + @ApiOperation(value = "删除消息") + public void deleteSysMessageById(Long id) { + LOGGER.info("消息 SYS_MESSAGE id:{}",id); + sysRefUserMessageRDao.deleteByProperty("messageId",id); + sysMessageRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "修改消息") + public void updateSysMessage(SysMessage sysMessage){ + LOGGER.info("消息 SYS_MESSAGE :{}",sysMessage); + sysMessageRDao.update(sysMessage); + } + + @Override + @ApiOperation(value = "查询全部信息") + public List listSysMessage(){ + LOGGER.info("消息 SYS_MESSAGE list"); + return sysMessageRDao.list(); + } + + @Override + @ApiOperation(value = "根据id查询消息") + public SysMessage getSysMessageById(Long id) { + LOGGER.info("消息 SYS_MESSAGE id:{}",id); + return sysMessageRDao.getById(id); + } + + @Override + @ApiOperation(value = "系统消息复杂查询,分页,排序") + public ListPager querySysMessageByPager(SysMessage sysMessage, Pager pager) { + LOGGER.info("消息 SYS_MESSAGE SysMessage:{},Pager:{}",sysMessage,pager); + if(sysMessage == null) { + pager = PagerHelper.getPager(pager, sysMessageRDao.listCount()); + return new ListPager(sysMessageRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysMessage(sysMessage); + pager = PagerHelper.getPager(pager, sysMessageRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysMessageRDao.findByHqlWherePage(hqlPack + sysMessage.orderBy(),pager),pager); + } + } + + @Override + @ApiOperation(value = "批量删除消息") + public void deleteSysMessageByIds(Long[] ids) { + LOGGER.info("消息 SYS_MESSAGE ids:{}", ids.toString()); + sysMessageRDao.deleteByIds(ids); + } + + @Override + @ApiOperation(value = "添加用户消息关系") + public SysRefUserMessage insertSysRefUserMessage(SysRefUserMessage refUserMessage) { + return sysRefUserMessageRDao.insert(refUserMessage); + } + + @Override + @ApiOperation(value = "添加消息并发送") + public void doSendSysMessage(SysMessage sysMessage) { + // 判断消息类型推送到对应的队列 + if(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue() == sysMessage.getMessageType().intValue()){ + rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_MAIL_QUEUE,sysMessage); + }else{ + rabbitTemplate.convertAndSend(I3CoreQueueConfig.IMPP_MESSAGE_LETTER_QUEUE,sysMessage); + } + } + + @Override + @ApiOperation(value = "分页查询用户消息表") + public ListPager querySysRefUserMessageByPager(SysRefUserMessage sysRefUserMessage, Pager pager) { + if(sysRefUserMessage == null) { + pager = PagerHelper.getPager(pager, sysRefUserMessageRDao.listCount()); + return new ListPager(sysRefUserMessageRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysRefUserMessage(sysRefUserMessage); + pager = PagerHelper.getPager(pager, sysRefUserMessageRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysRefUserMessageRDao.findByHqlWherePage(hqlPack + sysRefUserMessage.orderBy(),pager),pager); + } + } + + @Override + @ApiOperation(value = "根据用户id和消息状态和查询用户消息表") + public List findSysRefUserMessageByUserIdAndStatus(Long userId, Integer status) { + return sysRefUserMessageRDao.findByProperty(new String[]{"receiverId","messageStatus","messageTypeRdd"}, + new Object[]{userId,status,ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()}); + } + + @Override + @ApiOperation(value = "根据id查询用户消息") + public SysMessage getSysMessageByRefUserMessageId(Long id) { + SysRefUserMessage sysRefUserMessage = sysRefUserMessageRDao.getById(id); + if (sysRefUserMessage == null){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("数据不存在") + .build(); + } + sysRefUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.READ.getValue()); + sysRefUserMessageRDao.update(sysRefUserMessage); + + return sysMessageRDao.getById(sysRefUserMessage.getMessageId()); + } + + @Override + public void updateSysRefUserMessageStatusByIds(Long[] ids, Integer status) { + StringBuffer where = new StringBuffer(); + HqlPack.getInPack(String.join(",", StringTool.getArrayString(ids)), "id", where); + sysRefUserMessageRDao.updateByHqlWhere(where.toString(), "messageStatus", status); + } + + @Override + public void deleteSysRefUserMessageStatusByIds(Long[] ids) { + sysRefUserMessageRDao.deleteByIds(ids); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java new file mode 100644 index 0000000..2f9ccd9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrderNoRuleService.java @@ -0,0 +1,137 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysOrderNoRuleService; +import cn.estsh.i3plus.core.apiservice.util.OrderNoMakeUtil; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import cn.estsh.i3plus.pojo.platform.repository.SysOrderNoRuleRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 系统单号生成规则接口实现 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 20:04 + * @Modify: + **/ +@Service +public class SysOrderNoRuleService implements ISysOrderNoRuleService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysOrderNoRuleService.class); + + @Autowired + private SysOrderNoRuleRepository sysOrderNoRuleRDao; + + @Override + public SysOrderNoRule insertSysOrderNoRule(SysOrderNoRule sysOrderNoRule) { + if(sysOrderNoRuleRDao.isExitByProperty("orderNoRuleCode",sysOrderNoRule.getOrderNoRuleCode())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("规则代码已存在") + .setErrorSolution("请重新输入规则代码") + .build(); + } + return sysOrderNoRuleRDao.insert(sysOrderNoRule); + } + + @Override + public void updateSysOrderNoRule(SysOrderNoRule sysOrderNoRule) { + // 校验唯一 + String hqlPack = CoreHqlPack.packHqlSysOrderNoRuleCode(sysOrderNoRule); + long repeatCount = sysOrderNoRuleRDao.findByHqlWhereCount(hqlPack); + if (repeatCount > 0){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("规则代码已存在") + .setErrorSolution("请重新输入规则代码") + .build(); + } + sysOrderNoRuleRDao.update(sysOrderNoRule); + } + + @Override + public void deleteSysOrderNoRuleById(Long id) { + sysOrderNoRuleRDao.deleteById(id); + } + + @Override + public SysOrderNoRule getSysOrderNoRuleById(Long id) { + return sysOrderNoRuleRDao.getById(id); + } + + @Override + public ListPager querySysOrderNoRuleByPager(SysOrderNoRule sysOrderNoRule, Pager pager) { + if(sysOrderNoRule == null) { + pager = PagerHelper.getPager(pager, sysOrderNoRuleRDao.listCount()); + return new ListPager(sysOrderNoRuleRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysOrderNoRule(sysOrderNoRule); + pager = PagerHelper.getPager(pager, sysOrderNoRuleRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysOrderNoRuleRDao.findByHqlWherePage(hqlPack + sysOrderNoRule.orderBy(),pager),pager); + } + } + + @Override + public synchronized SysOrderNoRule getSysOrderNoRuleCode(String code) { + SysOrderNoRule sysOrderNoRule = sysOrderNoRuleRDao.getByProperty("orderNoRuleCode",code); + + if (sysOrderNoRule == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("规则代码不存在存在") + .setErrorSolution("请重新输入规则代码") + .build(); + }else if(sysOrderNoRule.getOrderNoRuleStatus() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("单号规则已禁用") + .setErrorSolution("请重新输入规则代码") + .build(); + }else { + sysOrderNoRule = OrderNoMakeUtil.next(sysOrderNoRule); + sysOrderNoRuleRDao.update(sysOrderNoRule); + return sysOrderNoRule; + } + } + + @Override + public void updateSysOrderNoRuleCodeStatusById(Long id, Integer status) { + sysOrderNoRuleRDao.updateByProperties("id",id,"orderNoRuleStatus",status); + } + + @Override + public void deleteSysOrderNoRuleByIds(Long[] ids) { + sysOrderNoRuleRDao.deleteByIds(ids); + } + + @Override + public void updateSysOrderNoRuleByIds(Long[] ids, Integer status) { + StringBuffer where = new StringBuffer(); + HqlPack.getInPack(String.join(",", StringTool.getArrayString(ids)), "id", where); + sysOrderNoRuleRDao.updateByHqlWhere(where.toString(), "orderNoRuleStatus", status); + } + + @Override + public void insertSysOrderNoRuleList(List sysOrderNoRuleList) { + sysOrderNoRuleRDao.saveAll(sysOrderNoRuleList); + } + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java new file mode 100644 index 0000000..2a0f762 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysOrganizeService.java @@ -0,0 +1,170 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysOrganizeService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.repository.SysOrganizeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 组织业务接口实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:42.957 + * @Modify : + **/ +@Service +public class SysOrganizeService implements ISysOrganizeService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysOrganizeService.class); + + @Autowired + private SysOrganizeRepository organizeRDao; + + @Autowired + private CoreTreeService coreTreeService; + + @Override + public void updateSysOrganize(SysOrganize organize) { + LOGGER.info("组织 ORGANIZE :{}", organize); + // 唯一校验 CODE 相同 ID 不同 则视为相同 + List list = organizeRDao.findByProperty("organizeCode", organize.getOrganizeCode()); + if(null != list && list.size() > 0){ + for (SysOrganize org : list) { + if(!org.getId().equals(organize.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("组织代码已存在") + .setErrorSolution("请重新输入组织代码") + .build(); + } + } + } + + // 父节点检查 + coreTreeService.doValidatorSysOrganizeParentId(organize); + + // 冗余父节点 + if(organize.getParentId() != null && organize.getParentId() > 0){ + SysOrganize org = getSysOrganizeById(organize.getParentId()); + ValidatorBean.checkNotNull(org,"上级组织信息不存在"); + + organize.setParentNameRdd(org.getName()); + } + + // 更新数据 + organizeRDao.update(organize); + // 修改冗余信息 + organizeRDao.updateByProperties("parentId",organize.getId(), + "parentNameRdd",organize.getName()); + } + + @Override + public void updateSysOrganizeStatus(Long id, int status, SessionUser user) { + LOGGER.info("组织 ORGANIZE id:{} status:{} user:{}", id,status,user); + SysOrganize organize = organizeRDao.getById(id); + organize.setOrganizeStatus(status); + organize.setModifyUser(user.getUserName()); + organizeRDao.update(organize); + } + + @Override + public void deleteSysOrganizeById(Long id) { + LOGGER.info("组织 ORGANIZE Key:{}", id); + long count = organizeRDao.findByPropertyCount("parentId", id); + if (count >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("存在相关组织信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + } + organizeRDao.deleteById(id); + } + + @Override + public void deleteSysOrganizeByIds(Long[] ids) { + long positionCount = organizeRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("parentId",ids)); + if (positionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关组织信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + }else { + organizeRDao.deleteByIds(ids); + } + } + + @Override + public SysOrganize insertSysOrganize(SysOrganize organize) { + LOGGER.info("组织 ORGANIZE :{}", organize); + + // 代码唯一校验 + long count = organizeRDao.findByPropertyCount("organizeCode", organize.getOrganizeCode()); + if(count <= 0){ + // 冗余信息 + if(organize.getParentId() != null && organize.getParentId() > 0){ + SysOrganize org = getSysOrganizeById(organize.getParentId()); + ValidatorBean.checkNotNull(org,"上级组织信息不存在"); + + organize.setParentNameRdd(org.getName()); + } + + // 插入数据入库 + return organizeRDao.insert(organize); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("组织代码已存在") + .setErrorSolution("请重新输入组织代码") + .build(); + } + } + + @Override + public List listSysOrganize() { + LOGGER.info("组织 ORGANIZE find All"); + return organizeRDao.findAll(); + } + + @Override + public ListPager querySysOrganize(SysOrganize organize, Pager pager) { + LOGGER.info("组织信息 SysOrganize find SysOrganize page"); + + if(organize == null){ + //不传入实体对象,查询所有 + int count = organizeRDao.listCount(); + pager = PagerHelper.getPager(pager,count); + return new ListPager(organizeRDao.listPager(pager),pager); + }else { + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysOrganize(organize); + pager = PagerHelper.getPager(pager,organizeRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(organizeRDao.findByHqlWherePage(hqlPack + organize.orderBy(), pager),pager); + } + } + + @Override + public SysOrganize getSysOrganizeById(Long id) { + LOGGER.info("组织 ORGANIZE find id:{}", id); + return organizeRDao.getById(id); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java new file mode 100644 index 0000000..4cd9f4b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java @@ -0,0 +1,191 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysPosition; +import cn.estsh.i3plus.pojo.platform.repository.SysPositionRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 岗位服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-19 16:36 + * @Modify : + **/ +@Service +public class SysPositionService implements ISysPositionService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysPositionService.class); + + @Autowired + private SysPositionRepository positionRDao; + + @Autowired + private CoreTreeService coreTreeService; + + @Autowired + private SysUserRepository sysUserRDao; + + @Override + public SysPosition insertSysPosition(SysPosition position) { + LOGGER.info("岗位信息 POSITION position:{}", position); + // CODE 唯一校验 + long count = positionRDao.findByPropertyCount("positionCode", position.getPositionCode()); + if(count <= 0){ + // 查询父级岗位名称 + if (position.getParentId() != null && position.getParentId() > 0) { + LOGGER.info("岗位信息 POSITION parentId:{}", position.getParentId()); + + SysPosition parentSysPosition = positionRDao.getById(position.getParentId()); + ValidatorBean.checkNotNull(parentSysPosition,"上级岗位信息不存在"); + position.setParentNameRdd(parentSysPosition.getName()); + } + + // 添加岗位 + LOGGER.info("岗位信息 POSITION position:{}", position); + return positionRDao.insert(position); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("岗位代码已存在") + .setErrorSolution("请重新输入岗位代码") + .build(); + } + } + + @Override + public void updateSysPosition(SysPosition position) { + LOGGER.info("岗位信息 POSITION position:{}", position); + + // 唯一校验 CODE 相同 ID 不同 则视为相同 + List list = positionRDao.findByProperty("positionCode", position.getPositionCode()); + if(null != list && list.size() > 0){ + for (SysPosition pos : list) { + if(!pos.getId().equals(position.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("岗位代码已存在") + .setErrorSolution("请重新输入岗位代码") + .build(); + } + } + } + + // 父节点检查 + coreTreeService.doValidatorSysPositionParentId(position); + + // 查询父级岗位名称 + if (position.getParentId() != null && position.getParentId() > 0) { + LOGGER.info("岗位信息 POSITION parentId:{}", position.getParentId()); + SysPosition parentSysPosition = positionRDao.getById(position.getParentId()); + ValidatorBean.checkNotNull(parentSysPosition,"上级岗位信息不存在"); + + position.setParentNameRdd(parentSysPosition.getName()); + } + + // 修改岗位信息 + LOGGER.info("岗位信息 POSITION position:{}", position); + positionRDao.update(position); + // 修改冗余信息 + positionRDao.updateByProperties("parentId",position.getId(), + "parentNameRdd",position.getName()); + } + + @Override + public void deleteSysPositionById(Long id) { + // 查询是否存在子级 + LOGGER.info("岗位信息 POSITION id:{}", id); + long positionCount = positionRDao.findByPropertyCount("parentId",id); + if (positionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关岗位信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + } + + // 删除岗位信息 + LOGGER.info("岗位信息 POSITION id:{}", id); + positionRDao.deleteById(id); + } + + @Override + public void deleteSysPositionByIds(Long[] ids) { + LOGGER.info("岗位信息 POSITION ids:{}", ids); + long positionCount = positionRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("parentId",ids)); + // 判断是否有子节点 + if (positionCount <= 0) { + positionRDao.deleteByIds(ids); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关岗位信息无法删除!") + .setErrorSolution("请重新操作") + .build(); + } + } + + @Override + public List listSysPosition() { + LOGGER.info("岗位信息 SysPosition list"); + return positionRDao.list(); + } + + @Override + public ListPager querySysPosition(SysPosition position, Pager pager) { + LOGGER.info("岗位信息 SysPosition find SysPosition page"); + + if(position == null){ + //不传入实体对象,查询所有 + int count = positionRDao.listCount(); + pager = PagerHelper.getPager(pager,count); + return new ListPager(positionRDao.listPager(pager),pager); + }else { + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysPosition(position); + pager = PagerHelper.getPager(pager,positionRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(positionRDao.findByHqlWherePage(hqlPack + position.orderBy(), pager),pager); + } + } + + @Override + public SysPosition getSysPositionById(Long id) { + LOGGER.info("岗位信息 SysPosition id:{}", id); + return positionRDao.getById(id); + } + + @Override + public ListPager findSysPositionByPager(SysPosition position, Pager pager) { + LOGGER.info("岗位信息 SysPosition position", position); + LOGGER.info("岗位信息 SysPosition pager:{}", pager); + + if (position == null) { + pager = PagerHelper.getPager(pager, positionRDao.listCount()); + return new ListPager(positionRDao.listPager(pager),pager); + } else { + String hqlPack = CoreHqlPack.packHqlSysPosition(position); + pager = PagerHelper.getPager(pager, positionRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(positionRDao.findByHqlWherePage(hqlPack + position.orderBy(),pager),pager); + } + } + + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java new file mode 100644 index 0000000..be17ad7 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java @@ -0,0 +1,227 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysRefRoleMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysRole; +import cn.estsh.i3plus.pojo.platform.repository.SysMenuRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysRefRoleMenuRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysRoleRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 系统角色业务接口实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.779 + * @Modify : + **/ +@Service +public class SysRoleService implements ISysRoleService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysRoleService.class); + + @Autowired + private SysRoleRepository sysRoleRDao; + + @Autowired + private SysMenuRepository sysMenuRDao; + + @Autowired + private SysRefRoleMenuRepository refRoleMenuRDao; + + @Override + public void updateSysRole(SysRole sysRole) { + LOGGER.info("系统角色 SYS_ROLE :{}", sysRole); + sysRoleRDao.update(sysRole); + } + + @Override + public void updateSysRoleStatus(Long id, int status, SessionUser user) { + LOGGER.info("系统角色 SYS_MENU id:{} status:{} user:{}", id,status,user); + SysRole role = sysRoleRDao.getById(id); + role.setRoleStatus(status); + role.setModifyUser(user.getUserName()); + sysRoleRDao.update(role); + } + + @Override + public void updateSysRoleStatusByIds(Long[] ids, int status, SessionUser user) { + LOGGER.info("系统功能 SYS_MENU ids:{} status:{} user:{}", ids, status, user); + StringBuffer where = new StringBuffer(); + + HqlPack.getInPack(StringUtils.join( ids,","), "id", where); + sysRoleRDao.updateByHqlWhere(where.toString(), "roleStatus", status); + } + + @Override + public void deleteSysRoleById(Long id) { + LOGGER.info("系统角色 SYS_ROLE Key:{}", id); + refRoleMenuRDao.deleteByProperty("roleId",id); + sysRoleRDao.deleteById(id); + } + + @Override + public void deleteSysRoleByIds(Long[] ids) { + LOGGER.info("系统角色 SYS_ROLE ids :{}", ids); + long positionCount = sysRoleRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("parentId",ids)); + if (positionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关系统功能信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + }else { + refRoleMenuRDao.deleteByPropertyIn("roleId",ids); + sysRoleRDao.deleteByIds(ids); + } + } + + @Override + public SysRole insertSysRole(SysRole sysRole) { + LOGGER.info("系统角色 SYS_ROLE :{}", sysRole); + return sysRoleRDao.insert(sysRole); + } + + @Override + public void refreshSysRoleRef(Long roleId,Long[] ids,String userName) { + LOGGER.info("系统角色 SYS_ROLE :{}", roleId); + LOGGER.info("系统角色 List :{}", ids); + + refreshBatchSysRoleRef(new Long[]{roleId}, ids, userName); + } + + @Override + public void refreshBatchSysRoleRef(Long[] roleIds, Long[] ids,String userName) { + LOGGER.info("系统角色 String[] :{}", roleIds); + LOGGER.info("系统角色 List :{}", ids); + + String roleWhere = CoreHqlPack.packHqlIds("id", roleIds); + List roleList = sysRoleRDao.findByHqlWhere(roleWhere); + + if(roleList != null && roleList.size() > 0){ + List moduleListRdd = new ArrayList<>(); + List featuresListRdd = new ArrayList<>(); // 冗余 + List refs = new ArrayList<>(); // 角色权限关系 + + // 封装需要删除的IDS + Long[] rids = new Long[roleList.size()]; + for (int i = 0; i < roleList.size(); i++) { + rids[i] = roleList.get(i).getId(); + } + // 删除角色权限关系 + String deleteWhere = CoreHqlPack.packHqlIds("roleId", roleIds); + List refRoleMenuList = refRoleMenuRDao.findByHqlWhere(deleteWhere); + refRoleMenuRDao.deleteAll(refRoleMenuList); + + if(ids != null && ids.length > 0){ + String menuWhere = CoreHqlPack.packHqlIds("id", ids); + List list = sysMenuRDao.findByHqlWhere(menuWhere); + SysRefRoleMenu ref = null; + + // 插入角色权限关系 + if(list != null && list.size() > 0){ + for (SysMenu menu : list) { + for (SysRole role : roleList) { + ref = new SysRefRoleMenu(); + ref.setRoleId(role.getId()); + ref.setRoleNameRdd(role.getName()); + ref.setMenuNameRdd(menu.getName()); + ref.setMenuId(menu.getId()); + ref.setMenuTypeRdd(menu.getMenuType()); + + ConvertBean.serviceModelInitialize(ref,userName); + + refs.add(ref); + } + + // 冗余信息封装 + if(CommonEnumUtil.METHOD_LEVEL.MODULE.getValue() == menu.getMenuType().intValue()){ + moduleListRdd.add(menu.getName()); + } + if(CommonEnumUtil.METHOD_LEVEL.METHOD.getValue() == menu.getMenuType().intValue()){ + featuresListRdd.add(menu.getName()); + } + } + } + } + + // 冗余信息 + for (SysRole role : roleList) { + role.setModuleNumber(moduleListRdd.size()); + role.setModuleNamesRdd(String.join(",",moduleListRdd)); + + role.setMenuNumber(featuresListRdd.size()); + role.setMenuNamesRdd(String.join(",",featuresListRdd)); + + ConvertBean.serviceModelUpdate(role,userName); + } + + refRoleMenuRDao.saveAll(refs); + sysRoleRDao.saveAll(roleList); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("角色信息不存在") + .setErrorSolution("请重新输入") + .build(); + } + } + + @Override + public List findSysRefRoleMenuByRoleId(Long roleId) { + LOGGER.info("系统角色权限关系 RefRoleMenu find By RoleId"); + return refRoleMenuRDao.findByProperty( + new String[]{"roleId","isValid"}, + new Object[]{roleId,CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()} + ); + } + + @Override + public List findSysRoleAll() { + LOGGER.info("系统角色 SYS_ROLE find All"); + return sysRoleRDao.findAll(); + } + + @Override + public SysRole getSysRoleById(Long id) { + LOGGER.info("系统角色 SYS_ROLE find id:{}", id); + return sysRoleRDao.getOne(id); + } + + @Override + public ListPager querySysRole(SysRole role, Pager pager) { + LOGGER.info("系统角色 SysRole find role :{} page :{}", role, pager); + + if (role == null) { + //不传入实体对象,查询所有 + int count = sysRoleRDao.listCount(); + pager = PagerHelper.getPager(pager, count); + return new ListPager(sysRoleRDao.listPager(pager), pager); + } else { + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysRole(role); + pager = PagerHelper.getPager(pager, sysRoleRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysRoleRDao.findByHqlWherePage(hqlPack + role.orderBy(), pager), pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java new file mode 100644 index 0000000..69b25df --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeExpressionService.java @@ -0,0 +1,105 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeExpressionService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import cn.estsh.i3plus.pojo.platform.repository.SysTaskTimeExpressionRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysTaskTimeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 定时任务时间表达式 业务逻辑实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-24 20:40 + * @Modify : + **/ +@Service +public class SysTaskTimeExpressionService implements ISysTaskTimeExpressionService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysTaskTimeExpressionService.class); + + @Autowired + private SysTaskTimeExpressionRepository taskTimeExpressionRDao; + + @Autowired + private SysTaskTimeRepository taskTimeRDao; + + @Override + @ApiOperation(value = "修改数据") + public void updateSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression) { + LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", taskTimeExpression); + taskTimeExpressionRDao.update(taskTimeExpression); + } + + @Override + @ApiOperation(value = "根据id删除数据") + public void deleteSysTaskTimeExpressionById(Long id) { + LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", id); + taskTimeExpressionRDao.deleteById(id); + } + + @Override + @ApiOperation(value = "新增数据") + public SysTaskTimeExpression insertSysTaskTimeExpression(SysTaskTimeExpression taskTimeExpression) { + LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}", taskTimeExpression); + return taskTimeExpressionRDao.insert(taskTimeExpression); + } + + @Override + @ApiOperation(value = "查询所有数据") + public List listSysTaskTimeExpression() { + LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION list"); + return taskTimeExpressionRDao.list(); + } + + @Override + @ApiOperation(value = "根据ID 查询任务表达式") + public SysTaskTimeExpression getSysTaskTimeExpressionById(Long id) { + LOGGER.info("定时任务时间表达式 TASK_TIME_EXPRESSION :{}" ,id); + return taskTimeExpressionRDao.getById(id); + } + + @Override + @ApiOperation(value = "任务表达式查询,分页,排序") + public ListPager querySysTaskTimeExpressionByPager(SysTaskTimeExpression taskTimeExpression, Pager pager) { + LOGGER.info("文件表达式 TASK_TIME_EXPRESSION taskTimeExpression:{},Pager:{}",taskTimeExpression,pager); + if(taskTimeExpression == null) { + pager = PagerHelper.getPager(pager, taskTimeExpressionRDao.listCount()); + return new ListPager(taskTimeExpressionRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysTaskTimeExpression(taskTimeExpression); + pager = PagerHelper.getPager(pager, taskTimeExpressionRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(taskTimeExpressionRDao.findByHqlWherePage(hqlPack + taskTimeExpression.orderBy(),pager),pager); + } + } + + @Override + @ApiOperation(value = "任务表达式批量删除") + public void deleteSysTaskTimeExpressionByIds(Long[] ids) { + LOGGER.info("文件表达式 SYS_MENU ids:{}", ids); + long count = taskTimeRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("timeExpressionId",ids)); + if(count >= 1){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在关联定时任务无法删除!") + .setErrorSolution("请重新操作") + .build(); + }else { + taskTimeExpressionRDao.deleteByIds(ids); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeRecordingService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeRecordingService.java new file mode 100644 index 0000000..22cb3af --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeRecordingService.java @@ -0,0 +1,57 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeRecordingService; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeRecording; +import cn.estsh.i3plus.pojo.platform.repository.SysTaskTimeRecordingRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 定时任务执行记录业务接口实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:44.011 + * @Modify : + **/ +@Service +public class SysTaskTimeRecordingService implements ISysTaskTimeRecordingService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysTaskTimeRecordingService.class); + + @Autowired + private SysTaskTimeRecordingRepository taskTimeRecordingRDao; + + @Override + public void updateSysTaskTimeRecording(SysTaskTimeRecording taskTimeRecording) { + LOGGER.info("定时任务执行记录 TASK_TIMED_RECORDING :{}", taskTimeRecording); + taskTimeRecordingRDao.update(taskTimeRecording); + } + + @Override + public void deleteSysTaskTimeRecordingById(Long id) { + LOGGER.info("定时任务执行记录 TASK_TIMED_RECORDING Key:{}", id); + taskTimeRecordingRDao.deleteById(id); + } + + @Override + public SysTaskTimeRecording insertSysTaskTimeRecording(SysTaskTimeRecording taskTimeRecording) { + LOGGER.info("定时任务执行记录 TASK_TIMED_RECORDING :{}", taskTimeRecording); + return taskTimeRecordingRDao.insert(taskTimeRecording); + } + + @Override + public List findSysTaskTimeRecordingAll() { + LOGGER.info("定时任务执行记录 TASK_TIMED_RECORDING find All"); + return taskTimeRecordingRDao.findAll(); + } + + @Override + public SysTaskTimeRecording getSysTaskTimeRecordingById(Long id) { + LOGGER.info("定时任务执行记录 TASK_TIMED_RECORDING find id:{}", id); + return taskTimeRecordingRDao.getOne(id); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java new file mode 100644 index 0000000..81e3580 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskTimeService.java @@ -0,0 +1,308 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskTimeService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysRefExpressionTrigger; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTime; +import cn.estsh.i3plus.pojo.platform.bean.SysTaskTimeExpression; +import cn.estsh.i3plus.pojo.platform.repository.SysRefExpressionTriggerRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysTaskTimeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.HashSet; +import java.util.List; + +/** + * @Description : 定时任务业务接口实现 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-22 16:58:43.974 + * @Modify : + **/ +@Service +public class SysTaskTimeService implements ISysTaskTimeService{ + + public static final Logger LOGGER = LoggerFactory.getLogger(SysTaskTimeService.class); + + @Autowired + private SysTaskTimeRepository taskTimeRDao; + + @Autowired + private SysRefExpressionTriggerRepository refExpressionTriggerRDao; + + @Autowired + private Scheduler scheduler; + + @Override + @ApiOperation(value = "修改定时任务") + public void updateSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + SysTaskTime oldSysTaskTime = taskTimeRDao.getById(taskTime.getId()); + + // 更新关系表 + refExpressionTriggerRDao.updateByProperties(new String[]{"triggerName","triggerGroupName"}, + new String[]{oldSysTaskTime.getName(),taskTime.getGroupName()}, + "expressionId",oldSysTaskTime.getTimeExpressionId() + ); + + taskTimeRDao.update(taskTime); + + try { + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(),taskTime.getGroupName()); + System.out.println(scheduler.getTrigger(triggerKey)); + + if (!scheduler.checkExists(triggerKey)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("定时任务不存在") + .setErrorSolution("请重新选择") + .build(); + } + + // 添加定时任务与触发器到quartz表中 + CronScheduleBuilder schedBuilder = CronScheduleBuilder + .cronSchedule(taskTimeExpression.getExpressionContent()) + .withMisfireHandlingInstructionDoNothing(); + TriggerBuilder trigger = TriggerBuilder.newTrigger() + .withIdentity(triggerKey) + .withDescription(taskTimeExpression.getExpressionDescription()) + .withSchedule(schedBuilder) + .startAt(sdf.parse(taskTimeExpression.getExpressionStartDatetime())); + if(taskTimeExpression.getExpressionEndDatetime() != null){ + trigger = trigger.endAt(sdf.parse(taskTimeExpression.getExpressionEndDatetime())); + } + + JobKey jobKey = new JobKey(taskTime.getName(), taskTime.getGroupName()); + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + jobDetail.getJobBuilder().withDescription(taskTime.getTaskDescription()); + + HashSet triggerSet = new HashSet<>(); + triggerSet.add(trigger.build()); + + scheduler.scheduleJob(jobDetail, triggerSet, true); + } catch (SchedulerException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + @Override + @ApiOperation(value = "修改任务状态") + public void updateSysTaskTimeStatus(Long id, int status, SessionUser user) { + LOGGER.info("定时任务 SYS_MENU id:{} status:{} user:{}", id,status,user); + SysTaskTime taskTime = taskTimeRDao.getById(id); + taskTime.setTaskStatus(status); + taskTime.setModifyUser(user.getUserName()); + taskTimeRDao.update(taskTime); + + try { + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(), taskTime.getGroupName()); + if (!scheduler.checkExists(triggerKey)) { + } + + if (status == CommonEnumUtil.DATA_STATUS.ENABLE.getValue()){ + scheduler.resumeTrigger(triggerKey); + } else { + scheduler.pauseTrigger(triggerKey); + } + } catch (SchedulerException e) { + LOGGER.info("重新开始任务-->复杂调度" + e.getMessage()); + e.printStackTrace(); + } + } + + @Override + @ApiOperation(value = "根据根据id删除数据") + public void deleteSysTaskTimeById(Long id) { + try { + SysTaskTime taskTime = taskTimeRDao.getById(id); + ValidatorBean.checkNotNull(taskTime,"定时任务不存在"); + + taskTimeRDao.deleteById(id); + // 删除关系表数据 + refExpressionTriggerRDao.deleteByProperty("expressionId",taskTime.getTimeExpressionId()); + + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(),taskTime.getGroupName()); + if(scheduler.checkExists(triggerKey)){ + scheduler.pauseTrigger(triggerKey); + scheduler.unscheduleJob(triggerKey); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("定时任务不存在") + .setErrorSolution("请重新选择") + .build(); + } + } catch (SchedulerException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode()) + .build(); + } + } + + @Override + @ApiOperation(value = "新增定时任务") + public SysTaskTime insertSysTaskTime(SysTaskTime taskTime, SysTaskTimeExpression taskTimeExpression) { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 唯一校验 + JobKey jobKey = JobKey.jobKey(taskTime.getName(),taskTime.getGroupName()); + TriggerKey triggerKey = TriggerKey.triggerKey(taskTime.getName(),taskTime.getGroupName()); + if (taskTimeRDao.isExitByProperty(new String[]{"name","groupName"},new String[]{taskTime.getName(),taskTime.getGroupName()}) + || scheduler.checkExists(jobKey) || scheduler.checkExists(triggerKey)){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("定时任务已存在") + .setErrorSolution("请重新输入任务名称和组名称") + .build(); + } + + SysRefExpressionTrigger refExpressionTrigger = new SysRefExpressionTrigger(); + refExpressionTrigger.setExpressionId(taskTimeExpression.getId()); + refExpressionTrigger.setTriggerName(taskTime.getName()); + refExpressionTrigger.setTriggerGroupName(taskTime.getGroupName()); + + taskTime = taskTimeRDao.insert(taskTime); + // 添加表达式与触发器关系表 + refExpressionTriggerRDao.insert(refExpressionTrigger); + + // 添加定时任务与触发器到quartz表中 + CronScheduleBuilder schedBuilder = CronScheduleBuilder + .cronSchedule(taskTimeExpression.getExpressionContent()) + .withMisfireHandlingInstructionDoNothing(); + TriggerBuilder trigger = TriggerBuilder.newTrigger() + .withIdentity(triggerKey) + .withDescription(taskTimeExpression.getExpressionDescription()) + .withSchedule(schedBuilder) + .startAt(sdf.parse(taskTimeExpression.getExpressionStartDatetime())); + if(taskTimeExpression.getExpressionEndDatetime() != null){ + trigger = trigger.endAt(sdf.parse(taskTimeExpression.getExpressionEndDatetime())); + } + + Class clazz = (Class) Class.forName(taskTime.getTaskPackage() + "." + taskTime.getTaskClass()); + JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobKey).withDescription(taskTime.getTaskDescription()).build(); + + scheduler.scheduleJob(jobDetail, trigger.build()); + } catch (SchedulerException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode()) + .build(); + } catch (ParseException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode()) + .setErrorDetail("表达式起止时间错误") + .setErrorSolution("请更改表达式起止时间") + .build(); + } catch (ClassNotFoundException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("定时任务包名及类名不正确") + .setErrorSolution("请重新输入定时任务包名及类名") + .build(); + } + return taskTime; + } + + @Override + @ApiOperation(value = "查询所有数据") + public List listSysTaskTime() { + LOGGER.info("定时任务 TASK_TIME find All"); + return taskTimeRDao.findAll(); + } + + @Override + @ApiOperation(value = "根据id 数据") + public SysTaskTime getSysTaskTimeById(Long id) { + LOGGER.info("定时任务 TASK_TIME find id:{}", id); + return taskTimeRDao.getOne(id); + } + + @Override + @ApiOperation(value = "定时任务复制查询,分页,排序") + public ListPager querySysTaskTimeByPager(SysTaskTime taskTime, Pager pager) { + LOGGER.info("定时任务 TASK_TIME SysTaskTime:{},Pager:{}",taskTime,pager); + if(taskTime == null) { + pager = PagerHelper.getPager(pager, taskTimeRDao.listCount()); + return new ListPager(taskTimeRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysTaskTime(taskTime); + pager = PagerHelper.getPager(pager, taskTimeRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(taskTimeRDao.findByHqlWherePage(hqlPack + taskTime.orderBy(),pager),pager); + } + } + + @Override + @ApiOperation(value = "根据id批量删除定时任务") + public void deleteSysTaskTimeByIds(Long[] ids) { + LOGGER.info("定时任务 TASK_TIME ids:{}", ids.toString()); + taskTimeRDao.deleteByIds(ids); + } + + @Override + @ApiOperation(value = "批量修改定时任务状态") + public void updateSysTaskTimeStatusByIds(Long[] ids, Integer status) { + LOGGER.info("定时任务 TASK_TIME ids:{},status:{}",ids,status); + StringBuffer where = new StringBuffer(); + HqlPack.getInPack(StringUtils.join( ids,","), "id", where); + + taskTimeRDao.updateByHqlWhere(where.toString(), "taskStatus", status); + } + + @Override + @ApiOperation(value = "修改最后时间") + public void doSysTaskTimeLastDateByNameAndGroupName(String lastDate, String name, String groupName) { + taskTimeRDao.updateByProperties( + new String[]{"name","groupName"},new String[]{name,groupName}, + "lastRunDateTime",lastDate); + } + + @Override + @ApiOperation(value = "立即执行") + public void executeSysTaskTimeById(Long id) { + SysTaskTime taskTime = taskTimeRDao.getById(id); + JobKey jobKey = JobKey.jobKey(taskTime.getName(),taskTime.getGroupName()); + try { + if (scheduler.checkExists(jobKey)) { + scheduler.triggerJob(jobKey); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("定时任务不存在") + .setErrorSolution("请重新输入任务名称和组名称") + .build(); + } + } catch (SchedulerException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode()) + .build(); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java new file mode 100644 index 0000000..b2c87f2 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolService.java @@ -0,0 +1,116 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysToolService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.SysTool; +import cn.estsh.i3plus.pojo.platform.bean.SysToolType; +import cn.estsh.i3plus.pojo.platform.repository.SysToolRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysToolTypeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 硬件服务接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-25 20:29 + * @Modify : + **/ +@Service +public class SysToolService implements ISysToolService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysToolService.class); + + @Autowired + private SysToolRepository toolRDao; + + @Autowired + private SysToolTypeRepository toolTypeRDao; + + @Override + public SysTool insertSysTool(SysTool tool) { + // 查询硬件类型名称 + LOGGER.info("硬件类型 TOOL_TYPE :{}", tool); + SysToolType toolType = toolTypeRDao.getById(tool.getToolTypeId()); + ValidatorBean.checkNotNull(toolType); + + tool.setToolTypeNameRdd(toolType.getName()); + + LOGGER.info("硬件 TOOL tool:{}",tool); + return toolRDao.insert(tool); + } + + @Override + public void deleteSysToolById(Long id) { + LOGGER.info("硬件 TOOL id:{}",id); + toolRDao.deleteById(id); + } + + @Override + public void updateSysTool(SysTool tool) { + // 查询硬件类型名称 + LOGGER.info("硬件类型 TOOL_TYPE :{}", tool); + SysToolType toolType = toolTypeRDao.getById(tool.getToolTypeId()); + ValidatorBean.checkNotNull(toolType); + + tool.setToolTypeNameRdd(toolType.getName()); + + LOGGER.info("硬件 TOOL :{}",tool); + toolRDao.update(tool); + } + + @Override + public List listSysTool() { + LOGGER.info("硬件 TOOL list"); + return toolRDao.list(); + } + + @Override + public SysTool getSysToolById(Long id) { + LOGGER.info("硬件 TOOL id:{}",id); + return toolRDao.getById(id); + } + + @Override + public ListPager querySysToolByPager(SysTool tool, Pager pager) { + LOGGER.info("硬件 TOOL SysTool:{},Pager:{}",tool,pager); + if(tool == null) { + pager = PagerHelper.getPager(pager, toolRDao.listCount()); + return new ListPager(toolRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysTool(tool); + pager = PagerHelper.getPager(pager, toolRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(toolRDao.findByHqlWherePage(hqlPack + tool.orderBy(),pager),pager); + } + } + + @Override + public void updateSysToolStatusById(Long id, Integer status) { + LOGGER.info("硬件 TOOL id:{},status:{}",id,status); + toolRDao.updateByProperties("id",id,"toolStatus", status); + } + + @Override + public void deleteSysToolByIds(Long[] ids) { + LOGGER.info("消息 SYS_MESSAGE ids:{}", ids.toString()); + toolRDao.deleteByIds(ids); + } + + @Override + public void updateSysToolStatusByIds(Long[] ids, Integer status) { + LOGGER.info("硬件 TOOL ids:{},status:{}",ids,status); + StringBuffer where = new StringBuffer(); + HqlPack.getInPack(StringUtils.join( ids,","), "id", where); + + toolRDao.updateByHqlWhere(where.toString(), "toolStatus", status); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolTypeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolTypeService.java new file mode 100644 index 0000000..0bb6347 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysToolTypeService.java @@ -0,0 +1,107 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysToolTypeService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysToolType; +import cn.estsh.i3plus.pojo.platform.repository.SysToolRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysToolTypeRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description : 硬件类型接口实现 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-28 12:35 + * @Modify : + **/ +@Service +public class SysToolTypeService implements ISysToolTypeService { + public static final Logger LOGGER = LoggerFactory.getLogger(SysToolTypeService.class); + + @Autowired + private SysToolTypeRepository toolTypeRDao; + + @Autowired + private SysToolRepository toolRDao; + + @Override + public void insertSysToolType(SysToolType toolType) { + LOGGER.info("硬件类型 TOOL_TYPE toolType:{}",toolType); + toolTypeRDao.insert(toolType); + } + + @Override + public void deleteSysToolTypeById(Long id) { + LOGGER.info("硬件类型 TOOL_TYPE id:{}",id); + long count = toolRDao.findByPropertyCount("toolTypeId",id); + if(count >= 1){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在关联硬件无法删除!") + .setErrorSolution("请重新操作") + .build(); + } + + toolTypeRDao.deleteById(id); + } + + @Override + public void updateSysToolType(SysToolType toolType) { + LOGGER.info("硬件类型 TOOL_TYPE toolType:{}",toolType); + toolTypeRDao.update(toolType); + // TODO 修改硬件对象中冗余的硬件类型名称 + } + + @Override + public List listSysToolType() { + LOGGER.info("硬件类型 TOOL_TYPE list"); + return toolTypeRDao.list(); + } + + @Override + public SysToolType getSysToolTypeById(Long id) { + LOGGER.info("硬件类型 TOOL_TYPE id:{}",id); + return toolTypeRDao.getById(id); + } + + @Override + public ListPager querySysToolTypeByPager(SysToolType toolType, Pager pager) { + LOGGER.info("硬件类型 TOOL_TYPE SysToolType:{},Pager:{}",toolType,pager); + if(toolType == null) { + pager = PagerHelper.getPager(pager, toolTypeRDao.listCount()); + return new ListPager(toolTypeRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysToolType(toolType); + pager = PagerHelper.getPager(pager, toolTypeRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(toolTypeRDao.findByHqlWherePage(hqlPack + toolType.orderBy(),pager),pager); + } + } + + @Override + public void deleteSysToolTypeByIds(Long[] ids) { + LOGGER.info("硬件类型 TOOL_TYPE ids:{}", ids.toString()); + long count = toolRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("toolTypeId",ids)); + if(count >= 1){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在关联硬件无法删除!") + .setErrorSolution("请重新操作") + .build(); + }else { + toolTypeRDao.deleteByIds(ids); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserInfoService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserInfoService.java new file mode 100644 index 0000000..256cb42 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserInfoService.java @@ -0,0 +1,230 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.repository.*; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 用户信息 服务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-11-08 19:44 + * @Modify : + **/ +@Service +public class SysUserInfoService implements ISysUserInfoService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysUserInfoService.class); + + @Autowired + private SysUserInfoRepository sysUserInfoRDao; + + @Autowired + private SysUserRepository sysUserRepository; + + @Autowired + private SysDepartmentRepository departmentRDao; + + @Autowired + private SysRefUserDepartmentRepository refUserDepartmentRDao; + + @Autowired + private SysPositionRepository positionRDao; + + @Autowired + private SysRefUserPositionRepository refUserPositionRDao; + + @Autowired + private SysOrganizeRepository organizeRDao; + + /*** + * @param userInfo + * @return + */ + @Override + public SysUserInfo insertSysUserInfo(SysUserInfo userInfo) { + LOGGER.info("用户信息 SysUserInfo userInfo:{}",userInfo); + + return sysUserInfoRDao.insert(userInfo); + } + + @Override + public void updateSysUserInfo(SysUserInfo userInfo) { + LOGGER.info("用户信息 SysUserInfo userInfo:{}",userInfo); + sysUserInfoRDao.update(userInfo); + } + + @Override + public void refreshRefUserDepartment(Long userInfoId, Long[] departmentIds, String userName) { + LOGGER.info("用户信息 SysUserInfo userInfoId:{} departmentIds:{} userName:{}",userInfoId,departmentIds,userName); + + SysUserInfo userInfo = sysUserInfoRDao.getById(userInfoId); + if(userInfo != null ){ + // 查询部门信息 + StringBuffer where = new StringBuffer(); + HqlPack.getInPack(StringUtils.join(departmentIds,","),"id",where); + List departmentList = departmentRDao.findByHqlWhere(where.toString()); + + // 删除用户部门关系 + refUserDepartmentRDao.deleteByProperty("userId",userInfo.getId()); + + if(departmentList != null && departmentList.size() >0){ + List list = new ArrayList<>(); + List nameList = new ArrayList<>(); + SysRefUserDepartment ref = null; + for (SysDepartment department : departmentList) { + ref = new SysRefUserDepartment(); + ref.setDepartmentId(department.getId()); + ref.setDepartmentNameRdd(department.getName()); + ref.setUserId(userInfo.getId()); + ref.setUserNameRdd(userInfo.getName()); + ref.setCreateUser(userName); + ref.setCreateDatetime(TimeTool.getNowTime(true)); + list.add(ref); + + nameList.add(department.getName()); + } + + userInfo.setDepartmentNameRdd(String.join(",",nameList)); + + refUserDepartmentRDao.saveAll(list); + sysUserInfoRDao.save(userInfo); + + LOGGER.info("用户信息 SysUserInfo RefUserDepartmentRDao Insert Size :{}",list.size()); + } + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户信息不存在") + .setErrorSolution("请重新操作") + .build(); + } + } + + @Override + public void refreshRefUserPosition(Long userInfoId, Long[] positionIds , String userName) { + LOGGER.info("用户信息 SysUserInfo userInfoId:{} positionIds:{} userName:{}",userInfoId,positionIds,userName); + + SysUserInfo userInfo = sysUserInfoRDao.getById(userInfoId); + if(userInfo != null ){ + // 查询部门信息 + StringBuffer where = new StringBuffer(); + HqlPack.getInPack(StringUtils.join(positionIds,","),"id",where); + List positionList = positionRDao.findByHqlWhere(where.toString()); + + // 删除用户岗位关系 + refUserPositionRDao.deleteByProperty("userId",userInfo.getId()); + + if(positionList != null && positionList.size() >0){ + List list = new ArrayList<>(); + List nameList = new ArrayList<>(); + SysRefUserPosition ref = null; + for (SysPosition position : positionList) { + ref = new SysRefUserPosition(); + ref.setUserId(userInfo.getId()); + ref.setUserNameRdd(userInfo.getName()); + ref.setPositionId(position.getId()); + ref.setPositionNameRdd(position.getName()); + ref.setCreateUser(userName); + ref.setCreateDatetime(TimeTool.getNowTime(true)); + list.add(ref); + + nameList.add(position.getName()); + } + + userInfo.setPositionNameRdd(String.join(",",nameList)); + + refUserPositionRDao.saveAll(list); + sysUserInfoRDao.save(userInfo); + + LOGGER.info("用户信息 SysUserInfo RefUserPositionRDao Insert Size :{}",list.size()); + } + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户信息不存在") + .setErrorSolution("请重新操作") + .build(); + } + } + + @Override + public void refreshRefUserOrganize(Long userInfoId, Long organizeId, String userName) { + LOGGER.info("用户信息 SysUserInfo userInfoId:{} organizeId:{} userName:{}",userInfoId,organizeId,userName); + SysUserInfo userInfo = sysUserInfoRDao.getById(userInfoId); + if(userInfo != null ){ + SysOrganize organize = organizeRDao.getById(organizeId); + if(organize != null ){ + + userInfo.setOrganizeId(organize.getId()); + userInfo.setOrganizeNameRdd(organize.getName()); + userInfo.setModifyUser(userName); + userInfo.setModifyDatetime(TimeTool.getNowTime(true)); + + sysUserInfoRDao.update(organize); + } + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户信息不存在") + .setErrorSolution("请重新操作") + .build(); + } + } + + @Override + public void deleteSysUserInfoById(Long id) { + LOGGER.info("用户信息 SysUserInfo id:{}",id); + sysUserInfoRDao.deleteById(id); + } + + @Override + public void deleteSysUserInfoByIds(Long[] ids) { + LOGGER.info("用户信息 SysUserInfo ids:{}",ids); + sysUserInfoRDao.deleteByIds(ids); + } + + @Override + public SysUserInfo getSysUserInfoById(Long id) { + return sysUserInfoRDao.getById(id); + } + + @Override + public List listSysUserInfo() { + return sysUserInfoRDao.findAll(); + } + + @Override + public ListPager querySysUserInfo(SysUserInfo userInfo, Pager pager) { + LOGGER.info("定时任务 TASK_TIME TaskTime:{},Pager:{}",userInfo,pager); + if(userInfo == null) { + pager = PagerHelper.getPager(pager, sysUserInfoRDao.listCount()); + return new ListPager(sysUserInfoRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysUserInfo(userInfo); + pager = PagerHelper.getPager(pager, sysUserInfoRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysUserInfoRDao.findByHqlWherePage(hqlPack + userInfo.orderBy(),pager),pager); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java new file mode 100644 index 0000000..7bb481e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -0,0 +1,551 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.repository.*; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.CredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 平台用户业务 + * @Reference : + * @Author : wei.peng + * @Date : 2018-10-25 17:45 + * @Modify : + **/ +@Service +public class SysUserService implements ISysUserService { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysUserService.class); + + @Autowired + private SysUserRepository sysUserRDao; + + @Autowired + private SysUserInfoRepository sysUserInfoRDao; + + @Autowired + private IUserPermissionDao userPermissionDao; + + @Autowired + private SysOrganizeRepository organizeRDao; + + @Autowired + private SysRoleRepository sysRoleRDao; + + @Autowired + private SysRefUserRoleRepository refUserRoleRDao; + + @Autowired + private SysRefUserDepartmentRepository refUserDepartmentRDao; + + @Autowired + private SysRefUserPositionRepository refUserPositionRDao; + + @Autowired + private SysFileRepository sysFileRDao; + + @Autowired + private SysDepartmentRepository sysDepartmentRDao; + + @Autowired + private SysPositionRepository sysPositionRDao; + + @Override + @ApiOperation(value = "用户登录", notes = "用户登录功能实现") + public SessionUser queryUserLogin(String loginName, String password, String languageCode) throws AuthenticationException { + LOGGER.debug("平台用户 SYS_USER loginName:{} \t password:{} \t languageCode:{}", loginName, password, languageCode); + + UserToken token = new UserToken(loginName,password,languageCode); + SessionUser sessionUser = AuthUtil.login(token); + SysUser user = this.getSysUserByLoginName(loginName); + + if(user == null){ + throw new CredentialsException("用户不存在"); + } + + + packSessionUser(sessionUser, user, user.getUserType(), languageCode); + AuthUtil.setSessionUser(sessionUser); + refreshUserLoginInformation(user.getId()); + return sessionUser; + } + + @Override + @ApiOperation(value = "修改账号", notes = "修改账号状态") + public void updateSysUserStatus(Long id, int status, SessionUser user) { + LOGGER.debug("平台用户 SYS_USER id:{} status:{} modifyUser:{}", id, status, user.getUserName()); + SysUser sysUser = sysUserRDao.getById(id); + sysUser.setUserStatus(status); + sysUser.setModifyUser(user.getUserName()); + sysUserRDao.update(sysUser); + } + + @Override + @ApiOperation(value = "修改账号", notes = "批量修改账号状态") + public void updateBatchSysUserStatus(Long[] ids, int status, SessionUser user) { + LOGGER.debug("平台用户 SYS_USER DELETE By ids :{} status:{}, SessionUser :{}", ids,status,user); + + String where = CoreHqlPack.packHqlIds("id", ids); + List list = sysUserRDao.findByHqlWhere(where); + if(null != list && list.size() > 0){ + for (SysUser sysUser : list) { + sysUser.setUserStatus(status); + sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.modelUpdate(sysUser,user); + } + sysUserRDao.saveAll(list); + } + } + + @Override + @ApiOperation(value = "修改账号", notes = "修改账号信息") + public void updateSysUser(SysUser sysUser) throws Exception{ + LOGGER.debug("平台用户 SYS_USER SysUser :{}", sysUser); + sysUserRDao.save(sysUser); + } + + @Override + @ApiOperation(value = "修改账号", notes = "修改账号登录密码") + public void updateSysUserPassword(Long userId, String password, String newPwd) throws Exception { + LOGGER.debug("平台用户 SYS_USER Override:{} password:{} newPwd:{}", userId,password,newPwd); + SysUser user = sysUserRDao.getById(userId); + if(user != null){ + String md5 = EncryptTool.hexMD5(password); + if(md5.equals(user.getUserLoginPassword())){ + user.setUserLoginPassword(EncryptTool.hexMD5(newPwd)); + sysUserRDao.save(user); + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_USER_LOCKING.getCode()) + .setErrorDetail("旧密码错误") + .setErrorSolution("请重新输入") + .build(); + } + }else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户不存在") + .setErrorSolution("请重新操作") + .build(); + } + } + + @Override + @ApiOperation(value = "刷新账号", notes = "刷新账号登录信息") + public void refreshUserLoginInformation(Long userId) { + SysUser user = sysUserRDao.getById(userId); + SysUserInfo userInfo = sysUserInfoRDao.getById(user.getUserInfoId()); + + user.setUserLoginLastDateTime(TimeTool.getNowTime(true)); + user.setUserLoginNum(user.getUserLoginNum() + 1); + userInfo.setUserLoginLastDateTime(TimeTool.getNowTime(true)); + userInfo.setUserLoginNum(userInfo.getUserLoginNum() + 1); + + sysUserInfoRDao.save(userInfo); + sysUserRDao.save(user); + } + + @Override + @ApiOperation(value = "新增账号", notes = "新增账号信息") + public SysUser insertSysUser(SysUser sysUser)throws Exception { + LOGGER.debug("平台用户 SYS_USER SysUser:{}", sysUser); + + SysUser loginUser = getSysUserByLoginName(sysUser.getUserLoginName()); + if (null == loginUser) { + // 密码加密 输入的密码不等于密码一致时修改密码 + String md5 = EncryptTool.hexMD5(sysUser.getUserLoginPassword()); + sysUser.setUserLoginPassword(md5); + return sysUserRDao.insert(sysUser); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("用户名已存在") + .setErrorSolution("请重新输入用户名") + .build(); + } + } + + @Override + @ApiOperation(value = "新增账号", notes = "新增账号信息") + public void refreshSysRefUserRole(SysUser sysUser, Long[] roleIds, String userName) { + LOGGER.debug("平台用户 SYS_USER SysUser:{}", sysUser); + LOGGER.debug("平台用户 SYS_USER String[] :{}", roleIds); + + // 根据IDS 查询所有的角色信息 + String where = CoreHqlPack.packHqlIds("id", roleIds); + List list = sysRoleRDao.findByHqlWhere(where); + + // 删除角色关系信息 + refUserRoleRDao.deleteByProperty("userId", sysUser.getId()); // 删除用户角色关系 + + if(null != list && list.size() > 0){ + // 新增用户角色关系 + List refUserRoles = new ArrayList<>(); + List roleNameList = new ArrayList<>(); + SysRefUserRole refUserRole = null; + for (SysRole role : list) { + roleNameList.add(role.getName()); + // 用户角色关系创建 + refUserRole = new SysRefUserRole(); + refUserRole.setRoleId(role.getId()); + refUserRole.setRoleNameRdd(role.getName()); + refUserRole.setUserId(sysUser.getId()); + refUserRole.setUserNameRdd(sysUser.getUserName()); + refUserRole.setCreateUser(userName); + refUserRole.setCreateDatetime(TimeTool.getNowTime(true)); + refUserRole.setModifyUser(userName); + refUserRole.setModifyDatetime(TimeTool.getNowTime(true)); + + refUserRoles.add(refUserRole); + } + refUserRoleRDao.saveAll(refUserRoles); + + // 角色名称冗余 + sysUser.setRoleNameRdd(String.join(",", roleNameList)); + sysUser.setRoleId(list.get(0).getId()); + + sysUserRDao.save(sysUser); + } + } + + @Override + @ApiOperation(value = "删除账号", notes = "删除账号信息,逻辑删除,账号关系业务物理删除") + public void deleteSysUserById(Long id) { + LOGGER.debug("平台用户 SYS_USER DELETE By id :{}", id); + sysUserRDao.updateByProperties("id", id, "isValid", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + // 删除用户关系(物理删除) + refUserRoleRDao.deleteByProperty("userId", id); // 删除用户角色关系 + refUserDepartmentRDao.deleteByProperty("userId", id); //删除用户部门关系 + refUserPositionRDao.deleteByProperty("userId", id); //删除用户部门关系 + } + + @Override + @ApiOperation(value = "删除账号", notes = "批量删除账号信息,逻辑删除,账号关系业务物理删除") + public void deleteBatchSysUserById(Long[] ids,SessionUser user) { + LOGGER.debug("平台用户 SYS_USER DELETE By ids :{}", ids); + + // 标记用户已删除 + String where = CoreHqlPack.packHqlIds("id", ids); + List list = sysUserRDao.findByHqlWhere(where); + if(null != list && list.size() > 0){ + for (SysUser sysUser : list) { + sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + } + + sysUserRDao.saveAll(list); + refUserRoleRDao.deleteByPropertyIn("userId",ids); + } + } + + @Override + @ApiOperation(value = "账号查询", notes = "查询所有账号信息") + public List list() { + LOGGER.debug("平台用户 SYS_USER find All"); + return sysUserRDao.findByProperty("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + + @Override + @ApiOperation(value = "账号分页查询", notes = "组合查询") + public ListPager querySysUserByPager(SysUser user, Pager pager) { + LOGGER.debug("系统用户 SysUser find user :{} page :{}", user, pager); + + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysUser(user); + pager = PagerHelper.getPager(pager, sysUserRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysUserRDao.findByHqlWherePage(hqlPack + user.orderBy(), pager), pager); + } + + @Override + @ApiOperation(value = "账号查询", notes = "根据ID 查询账号信息") + public SysUser getSysUserById(Long id) { + LOGGER.debug("平台用户 SYS_USER get By id :{}", id); + return sysUserRDao.getById(id); + } + + @Override + @ApiOperation(value = "用户查询", notes = "根据ID 查询用户信息") + public SysUserInfo getSysUserInfoById(Long id) { + return sysUserInfoRDao.getByProperty("id",id); + } + + @Override + @ApiOperation(value = "账号查询", notes = "根据登录名查询用户信息") + public SysUser getSysUserByLoginName(String loginName) { + LOGGER.debug("平台用户 SYS_USER find By Login Name :{}", loginName); + return sysUserRDao.getByProperty(new String[]{"userLoginName", "isValid"}, + new Object[]{loginName, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); + } + + @Override + @ApiOperation(value = "账号查询", notes = "根据邮箱查询用户信息") + public SysUser getSysUserByEmail(String email) { + return sysUserRDao.getByProperty(new String[]{"userEmail", "isValid"}, + new Object[]{email, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); + } + + @Override + @ApiOperation(value = "账号查询", notes = "根据手机号查询用户信息") + public SysUser getSysUserByPhone(String phone) { + return sysUserRDao.getByProperty(new String[]{"userPhone", "isValid"}, + new Object[]{phone, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); + } + + @Override + @ApiOperation(value = "账号角色", notes = "根据账号ID查询账号角色关系") + public List findSysRefUserRoleByUserId(Long userId) { + return refUserRoleRDao.findByProperty("userId",userId); + } + + @Override + @ApiOperation(value = "检查-账号登录名", notes = "判断账号是否存在") + public boolean checkSysUserLoginName(String userLoginName, long id) { + int count; + if(id > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getStringEqualPack(userLoginName,"userLoginName",sw); + HqlPack.getNumNOEqualPack(id,"id",sw); + count = sysUserRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = sysUserRDao.findByPropertyCount("userLoginName",userLoginName); + } + return count <= 0 ; + } + + @Override + @ApiOperation(value = "检查-账号邮箱", notes = "判断邮箱是否存在") + public boolean checkSysUserEmail(String email, long id) { + int count; + if(id > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getStringEqualPack(email,"userEmail",sw); + HqlPack.getNumNOEqualPack(id,"id",sw); + count = sysUserRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = sysUserRDao.findByPropertyCount("userEmail",email); + } + return count <= 0 ; + } + + @Override + @ApiOperation(value = "检查-账号手机", notes = "判断手机是否存在") + public boolean checkSysUserPhone(String phone, long id) { + int count; + if(id > 0){ + StringBuffer sw = new StringBuffer(); + HqlPack.getStringEqualPack(phone,"userPhone",sw); + HqlPack.getNumNOEqualPack(id,"id",sw); + count = sysUserRDao.findByHqlWhereCount(sw.toString()); + + }else{ + count = sysUserRDao.findByPropertyCount("userPhone",phone); + } + return count <= 0 ; + } + + @Override + @ApiOperation(value = "检查-账号唯一", notes = "账号唯一性校验") + public void checkSysUserOnly(SysUser user) { + if(user != null){ + // 登录名唯一教研 + if(!checkSysUserLoginName(user.getUserLoginName(), user.getId() == null ? 0 : user.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("用户名已存在") + .setErrorSolution("请重新输入用户名") + .build(); + } + + // 登录名唯一教研 + if(!checkSysUserEmail(user.getUserEmail(),user.getId() == null ? 0 : user.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("邮箱已存在") + .setErrorSolution("请重新输入邮箱") + .build(); + } + + // 登录名唯一教研 + if(!checkSysUserPhone(user.getUserPhone(),user.getId() == null ? 0 : user.getId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("手机号已存在") + .setErrorSolution("请重新输入手机号") + .build(); + } + } + } + + /** + * 封装用户登陆信息 + * + * @param sessionUser 当前会话信息 + * @param user 当前登录用户 + * @param userType 用户类型 + * @param languageCode 用户选择的语言 + * @return + */ + public SessionUser packSessionUser(SessionUser sessionUser, SysUser user, Integer userType, String languageCode) { + LOGGER.debug("平台用户 SYS_USER user id :{}", user.getId()); + SysUserInfo userInfo = sysUserInfoRDao.getById(user.getUserInfoId()); + + if(userInfo == null){ + throw new UnknownAccountException("用户信息不存在"); + } + + packSysUserRole(sessionUser,user); //封装用户角色信息 + packSysUserMenu(sessionUser,user); //封装用户功能信息 + + packSysUserDepartment(sessionUser,userInfo); //封装用户部门信息 + packSysUserPosition(sessionUser,userInfo); //封装用户岗位信息 + packSysUserOrganize(sessionUser,userInfo); //封装用户组织信息 + + userInfo.setUser(user); + sessionUser.setUserName(userInfo.getName()); + sessionUser.setUserCode(userInfo.getUserEmpNo()); + sessionUser.setUserId(userInfo.getId()); + sessionUser.setUserInfo(userInfo); + + sessionUser.setUserType(CommonEnumUtil.USER_TYPE.valueOf(userType)); + sessionUser.setLanguageCode(languageCode); + sessionUser.setUser(user); + + return sessionUser; + } + + /** + * 封装用户角色信息 + * @param sessionUser + * @param user + * @return + */ + public void packSysUserRole(SessionUser sessionUser, SysUser user){ + List roleList = null; + try { + LOGGER.debug("平台用户 SYS_USER user id :{}", user.getUserInfoId()); + + roleList = userPermissionDao.findSysRoleByUser(user); + }catch (Exception e){ + LOGGER.error(" SysUser Peck Role information Error userId : {} Exception Message : {} " ,user.getUserInfoId(),e.getMessage()); + e.printStackTrace(); + } + + user.setRoleList(roleList); + sessionUser.setUser(user); + } + + /** + * 封装用户 菜单信息 + * @param sessionUser + * @param user + * @return + */ + public void packSysUserMenu(SessionUser sessionUser, SysUser user){ + List list = null; + try { + LOGGER.debug("平台用户 SYS_USER user id :{}", user.getUserInfoId()); + + list = userPermissionDao.findSysMenuByUser(user); + }catch (Exception e){ + LOGGER.error(" SysUser Peck Menu information Error userId : {} Exception Message : {} " ,user.getUserInfoId(),e.getMessage()); + e.printStackTrace(); + } + + user.setMenuList(list); + sessionUser.setUser(user); + } + + /** + * 封装用户 部门信息封装 + * @param sessionUser + * @param userInfo + * @return + */ + public void packSysUserDepartment(SessionUser sessionUser, SysUserInfo userInfo){ + try { + LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); + userInfo.setDepartmentList(userPermissionDao.findDepartmentByUser(userInfo)); + userInfo.setDepartment(sysDepartmentRDao.getById(userInfo.getDepartmentId())); + }catch (Exception e){ + LOGGER.error(" SysUser Peck Department information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + e.printStackTrace(); + } + } + + /** + * 封装用户 岗位信息封装 + * @param sessionUser + * @param userInfo + * @return + */ + public void packSysUserPosition(SessionUser sessionUser, SysUserInfo userInfo){ + try { + LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); + userInfo.setPositionList(userPermissionDao.findPositionByUser(userInfo)); + userInfo.setPosition(sysPositionRDao.getById(userInfo.getPositionId())); + }catch (Exception e){ + LOGGER.error(" SysUser Peck Position information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + } + } + + /** + * 封装用户 组织信息封装 + * @param sessionUser + * @param userInfo + * @return + */ + public void packSysUserOrganize(SessionUser sessionUser, SysUserInfo userInfo){ + try { + LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); + userInfo.setOrganize(organizeRDao.getById(userInfo.getOrganizeId())); + + List departmentList = userInfo.getDepartmentList(); + if(departmentList != null && departmentList.size() > 0){ + Long[] ids = new Long[departmentList.size()]; + for (int i = 0; i < departmentList.size(); i++) { + ids[i] = departmentList.get(i).getOrganizeId(); + } + + String hqlWhere = CoreHqlPack.packHqlIds("id", ids); + List organizeList = organizeRDao.findByHqlWhere(hqlWhere); + + userInfo.setOrganizeList(organizeList); + } + }catch (Exception e){ + LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SystemResourceService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SystemResourceService.java new file mode 100644 index 0000000..09fd417 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SystemResourceService.java @@ -0,0 +1,170 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; +import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogOperateRepository; +import cn.estsh.i3plus.pojo.platform.repositorymongo.SysLogSystemRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository; +import cn.estsh.i3plus.pojo.platform.repository.SysLocaleResourceRepository; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description : 系统资源服务 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-11 17:00 + * @Modify: + **/ +@Service +public class SystemResourceService implements ISystemResourceService { + + @Resource(name="redisRes") + private ImppRedis redisRes; + + @Autowired + private SysLocaleLanguageRepository sysLocaleLanguageRDao; + + @Autowired + private SysLocaleResourceRepository sysLocaleResourceRDao; + + @Autowired + private SysLogOperateRepository logOperateRDao; + + @Autowired + private SysLogSystemRepository logSystemRDao; + + @Override + public SysLocaleLanguage insertSysLocaleLanguage(SysLocaleLanguage lang) { + return sysLocaleLanguageRDao.insert(lang); + } + + @Override + public SysLocaleLanguage updateSysLocaleLanguage(SysLocaleLanguage lang) { + return sysLocaleLanguageRDao.save(lang); + } + + @Override + public void deleteSysLocaleLanguageById(long id) { + sysLocaleLanguageRDao.deleteById(id); + } + + @Override + public List listSysLocaleLanguage(SysLocaleLanguage lang) { + if(lang == null){ + return sysLocaleLanguageRDao.list(); + }else { + return sysLocaleLanguageRDao.findByProperty( + new String[]{"languageCode", "languageName", "isDefault"}, + new Object[]{lang.getLanguageCode(), lang.getLanguageName(), lang.getIsDefault()}); + } + } + + @Override + public ListPager listSysLocaleLanguageByPager(SysLocaleLanguage lang, Pager pager) { + if(lang == null) { + pager = PagerHelper.getPager(pager, sysLocaleLanguageRDao.listCount()); + return new ListPager(sysLocaleLanguageRDao.listPager(pager),pager); + }else { + String hqlPack = CoreHqlPack.packHqlSysLocaleLanguage(lang); + pager = PagerHelper.getPager(pager, sysLocaleLanguageRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysLocaleLanguageRDao.findByHqlWherePage(hqlPack + lang.orderBy(),pager),pager); + } + } + + @Override + public SysLocaleResource insertSysLocaleResource(SysLocaleResource res) { + res = sysLocaleResourceRDao.insert(res); + putResourceToCache(res); //更新缓存 + + return res; + } + + @Override + public SysLocaleResource updateSysLocaleResource(SysLocaleResource res) { + res = sysLocaleResourceRDao.save(res); + putResourceToCache(res); //更新缓存 + + return res; + } + + private void putResourceToCache(SysLocaleResource res){ + //通过编码获取语言资源 + Map resMap = redisRes.getHashMap(res.getResourceKey()); + if(resMap != null ) { + // 语言,国际化内容 + resMap.put(res.getLanguageCode(),res.getResourceValue()); + }else{ + resMap = new HashMap(); + resMap.put(res.getLanguageCode(),res.getResourceValue()); + redisRes.putHashMap(res.getResourceKey(),resMap,0); + } + } + + @Override + public void deleteSysLocaleResourceById(long id) { + sysLocaleResourceRDao.deleteById(id); + } + + @Override + public void deleteSysLocaleResourceByIds(Long[] ids){ + sysLocaleLanguageRDao.deleteByIds(ids); + } + + @Override + public ListPager listSysLocaleResourceByPager(SysLocaleResource res, Pager pager) { + if(res == null){ + //不传入实体对象,查询所有 + int count = (int)sysLocaleResourceRDao.listCount(); + pager = PagerHelper.getPager(pager,count); + return new ListPager(sysLocaleResourceRDao.listPager(pager),pager); + }else { + //生成hql查询语句 + String hqlPack = CoreHqlPack.packHqlSysLocaleResource(res); + pager = PagerHelper.getPager(pager,sysLocaleResourceRDao.findByHqlWhereCount(hqlPack)); + return new ListPager(sysLocaleResourceRDao.findByHqlWherePage(hqlPack + res.orderBy(), pager),pager); + } + } + + @Override + public List listSysLocaleResource(SysLocaleResource res) { + if(res == null){ + return sysLocaleResourceRDao.list(); + }else { + return sysLocaleResourceRDao.findByProperty( + new String[]{"resourceType", "languageCode", "resourceKey", "resourceValue", "isSystem"}, + new Object[]{res.getResourceType(), res.getLanguageCode(), res.getResourceKey(), res.getResourceValue(), res.getIsSystem()}); + } + } + + @Override + public SysLocaleResource getSysLocaleResourceByLanguage(int resourceType,String langCode,String resKey) { + List resList = sysLocaleResourceRDao.findByProperty( + new String[]{"resourceType", "languageCode", "resourceKey"}, + new Object[]{resourceType,langCode, resKey}); + + if(CollectionUtils.isEmpty(resList)){ + //不存在,则使用默认的 + resList = sysLocaleResourceRDao.findByProperty( + new String[]{"resourceType", "resourceKey"}, + new Object[]{resourceType,resKey}); + } + if(resList.size() > 0) { + return resList.iterator().next(); + }else{ + return null; + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java new file mode 100644 index 0000000..532433f --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/ExcelUtil.java @@ -0,0 +1,378 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysTool; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum; +import io.swagger.annotations.ApiParam; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.*; + +/** + * @Description : Excel导入导出工具类 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-12-05 16:12 + * @Modify: + **/ +@Component +public class ExcelUtil { + public static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class); + + private ExcelUtil() throws IOException { + } + + private static ISysConfigService sysConfigService; + + @Autowired + public void setSysConfigService(ISysConfigService sysConfigService) { + ExcelUtil.sysConfigService = sysConfigService; + } + + /** + * 导出 + * + * @param data 导出的数据 + * @param exportClass 导出数据类型 + * @param exportCol 需要导出的列 + */ + public static byte[] exportData(List data, Class exportClass, String[] exportCol) { + File excelFile = null; + FileOutputStream fos = null; + //创建HSSFWorkbook对象(excel的文档对象) + HSSFWorkbook workbook = new HSSFWorkbook(); + try { + //创建临时文件 + excelFile = File.createTempFile(exportClass.getSimpleName() + new Date().getTime(), ".xls"); + LOGGER.info("临时文件所在的本地路径:" + excelFile.getCanonicalPath()); + fos = new FileOutputStream(excelFile); + + //建立新的sheet对象(excel的表单) + HSSFSheet sheet = workbook.createSheet(exportClass.getSimpleName()); + + // 创建表头 + HSSFRow tableHeader = sheet.createRow(0); + + // 类数据 + Field[] declaredFields = exportClass.getDeclaredFields(); + Field[] fields = new Field[exportCol.length]; + + for (int i = 0; i < exportCol.length; i++) { + for (Field field : declaredFields) { + if (field.getName().equals(exportCol[i])) { + fields[i] = field; + + if (field.isAnnotationPresent(ApiParam.class)) { + ApiParam fieldAnno = field.getAnnotation(ApiParam.class); + tableHeader.createCell(i, CellType.STRING).setCellValue(fieldAnno.value()); + } + } + } + } + + //加载数据至excel对象 + HSSFRow hssfRow; + Method method; + for (int i = 0; i < data.size(); i++) { + hssfRow = sheet.createRow(i + 1); + for (int j = 0; j < fields.length; j++) { + method = exportClass.getDeclaredMethod("get" + StringTool.toUpperCaseFirstOne(fields[j].getName())); + hssfRow.createCell(j, CellType.STRING).setCellValue( + String.valueOf(method.invoke(data.get(i))) + ); + } + } + + workbook.write(fos); + fos.flush(); + return file2Byte(excelFile); + } catch (NoSuchMethodException e) { + LOGGER.error("属性get方法不存在!", e); + } catch (IllegalAccessException e) { + LOGGER.error("Excel 导出异常!", e); + } catch (InvocationTargetException e) { + LOGGER.error("Excel 导出异常!", e); + } catch (IOException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode()) + .setErrorDetail("Excel 导出错误") + .build(); + } finally { + try { + workbook.close(); + fos.close(); + excelFile.deleteOnExit(); + } catch (IOException e) { + LOGGER.error("IOException!", e); + } + } + return null; + } + + /** + * 导入 + * + * @param fileName 文件名 + * @param inputStream 输入流 + * @param importClass 导入类型 + * @return 导入数据集合 + */ + public static List importData(String fileName, InputStream inputStream, Class importClass) { + List dataList = new ArrayList(); + String fileType = StringTool.getStringFileSuffix(fileName, false); + + try { + //根据文件类型及文件输入流新建工作簿对象 + Workbook wb = null; + if (fileType.equals("xls")) { + wb = new HSSFWorkbook(inputStream); + } else if (fileType.equals("xlsx")) { + wb = new XSSFWorkbook(inputStream); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode()) + .setErrorDetail("Excel 您导入的excel格式不正确") + .setErrorSolution("请检查导入文件格式") + .build(); + } + + // 校验sheet是否超过最大行数 + Sheet sheet = wb.getSheet(importClass.getSimpleName()); + int maxRow = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_IMPORT_MAX_ROW).getConfigValue()); + if (sheet != null && sheet.getLastRowNum() > maxRow) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("Excel 数据超过最大行数") + .setErrorSolution("请检查是否有空行,或分批导入") + .build(); + } + + // excel列名与字段名映射 + Map colName = new HashMap<>(); + ApiParam fieldAnno; + for (Field field : importClass.getDeclaredFields()) { + if (field.isAnnotationPresent(ApiParam.class)) { + fieldAnno = field.getAnnotation(ApiParam.class); + colName.put(fieldAnno.value(), field); + } + } + + // 创建表头 + Row tableHeader = sheet.getRow(0); + Field[] fields = new Field[tableHeader.getLastCellNum()]; + + for (int i = 0; i < tableHeader.getLastCellNum(); i++) { + fields[i] = colName.get(tableHeader.getCell(i).getStringCellValue()); + } + + Row row; + Object obj; + Object cellValue = null; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + row = sheet.getRow(i); + obj = importClass.newInstance(); + for (int j = 0; j < fields.length; j++) { + row.getCell(j).setCellType(CellType.STRING); + if("".equals(row.getCell(j).getStringCellValue())){ + cellValue = null; + }else if (fields[j].getType() == String.class) { + cellValue = row.getCell(j).getStringCellValue(); + } else if (fields[j].getType() == Integer.class) { + cellValue = Integer.parseInt(row.getCell(j).getStringCellValue()); + } else if (fields[j].getType() == Long.class) { + cellValue = Long.parseLong(row.getCell(j).getStringCellValue()); + } + + importClass.getDeclaredMethod("set" + StringTool.toUpperCaseFirstOne(fields[j].getName()), fields[j].getType()) + .invoke(obj, cellValue); + } + dataList.add(obj); + } + + } catch (IOException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("IO输入输出异常") + .build(); + } catch (IllegalAccessException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) + .setErrorDetail("无法访问导入类") + .setErrorSolution("请检查导入类访问修饰符") + .build(); + } catch (InstantiationException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) + .setErrorDetail("无法实例化导入类") + .setErrorSolution("请检查导入类是拥有无参构造方法") + .build(); + } catch (InvocationTargetException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) + .setErrorDetail("属性set方法实现错误") + .setErrorSolution("请检查属性set方法参数类型是否正确") + .build(); + } catch (NoSuchMethodException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.REFLEX_EXCEPTION.getCode()) + .setErrorDetail("没有找到属性set方法") + .setErrorSolution("请检查属性set方法是否存在") + .build(); + } + return dataList; + } + + /** + * 导入模板 + * + * @param exportClass + */ + public static byte[] importTemplate(Class exportClass) { + File excelFile = null; + FileOutputStream fos = null; + //创建HSSFWorkbook对象(excel的文档对象) + HSSFWorkbook workbook = new HSSFWorkbook(); + + try { + //创建临时文件 + excelFile = File.createTempFile(exportClass.getSimpleName() + new Date().getTime(), "Tp.xls"); + LOGGER.info("临时文件所在的本地路径:" + excelFile.getCanonicalPath()); + fos = new FileOutputStream(excelFile); + + //建立新的sheet对象(excel的表单) + HSSFSheet sheet = workbook.createSheet(exportClass.getSimpleName()); + + // 创建表头 + HSSFRow tableHeader = sheet.createRow(0); + HSSFRow tableData = sheet.createRow(1); + + // 类数据 + Field[] declaredFields = exportClass.getDeclaredFields(); + ApiParam fieldAnno; + int col = 0; + + for (int i = 0; i < declaredFields.length; i++) { + if (declaredFields[i].isAnnotationPresent(ApiParam.class)) { + fieldAnno = declaredFields[i].getAnnotation(ApiParam.class); + if (!fieldAnno.hidden()) { + tableHeader.createCell(col, CellType.STRING).setCellValue(fieldAnno.value()); + + tableData.createCell(col, CellType.STRING).setCellValue(fieldAnno.example()); + col++; + } + } + } + + workbook.write(fos); + return file2Byte(excelFile); + } catch (IOException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION.getCode()) + .setErrorDetail("Excel导出错误") + .build(); + } finally { + try { + workbook.close(); + fos.close(); + excelFile.deleteOnExit(); + } catch (IOException e) { + LOGGER.error("IOException!", e); + } + } + } + + /** + * 获取实体列集合 + * + * @param pojoClass + * @return + */ + public static Map getColName(Class pojoClass) { + Map colName = new LinkedHashMap(); + Field[] field = pojoClass.getDeclaredFields(); + ApiParam fieldAnno; + + for (int i = 0; i < field.length; i++) { + if (field[i].isAnnotationPresent(ApiParam.class)) { + fieldAnno = field[i].getAnnotation(ApiParam.class); + if (!fieldAnno.hidden()) { + colName.put(field[i].getAnnotation(ApiParam.class).value(), field[i].getName()); + } + } + } + + return colName; + } + + public static void main(String[] args) { + List sysTools = new ArrayList<>(); + SysTool sysTool = new SysTool(); + for (int i = 0; i < 14; i++) { + sysTool.setName("ddd"); + sysTools.add(sysTool); + } + String[] colName = new String[]{"name", "toolTypeNameRdd", "toolStatus", "toolIp", "toolPort", "toolConnType", "toolDataType", "toolOperating", "toolDescription"}; + try { + FileOutputStream ds = new FileOutputStream("E://testOut.xls"); + ds.write(ExcelUtil.exportData(sysTools, SysTool.class, colName)); + ds.flush(); + ds.close(); +// ExcelUtil.importData("testOut.xls", new FileInputStream("E://testOut.xls"), SysTool.class); +// ExcelUtil.importTemplate(new FileOutputStream("E://testOut.xls"), SysTool.class, colName); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + + public static byte[] file2Byte(File file) { + byte[] buffer = null; + try { + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] b = new byte[1024]; + int n; + while ((n = fis.read(b)) != -1) { + bos.write(b, 0, n); + } + fis.close(); + bos.close(); + buffer = bos.toByteArray(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return buffer; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java new file mode 100644 index 0000000..4acefbc --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -0,0 +1,200 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.mail.*; +import javax.mail.internet.AddressException; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeUtility; +import java.io.UnsupportedEncodingException; +import java.util.Properties; + +/** + * @Description : 邮件工具类 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-14 19:24 + * @Modify: + **/ +@Component +public class MailUtil { + public static final Logger LOGGER = LoggerFactory.getLogger(MailUtil.class); + + // 收件人 + private Address[] to = null; + private Address[] cc = null; + private String from = ""; + private String nick = ""; + private String title = ""; + private String content = ""; + private String smtpHost = ""; + private int smtpPort = 25; + private String content_type = ""; + + private String smtpUser = ""; + private String smtpPassword = ""; + private boolean isAuthenticationSMTP = false; + + @Autowired + private ISysConfigService sysConfigService; + + //初始化服务器邮箱参数 + public MailUtil init() { + this.smtpHost = sysConfigService.getSysConfigByCode(PlatformConstWords.MAIL_HOST).getConfigValue(); + this.smtpPort = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.MAIL_PORT).getConfigValue()); + this.from = sysConfigService.getSysConfigByCode(PlatformConstWords.MAIL_USER).getConfigValue(); + this.nick = sysConfigService.getSysConfigByCode(PlatformConstWords.MAIL_NICK).getConfigValue(); + this.smtpUser = sysConfigService.getSysConfigByCode(PlatformConstWords.MAIL_USER).getConfigValue(); + this.smtpPassword = sysConfigService.getSysConfigByCode(PlatformConstWords.MAIL_PASSWORD).getConfigValue(); + this.isAuthenticationSMTP = true; + + return this; + } + + /** + * 设置收件人地址 + * + * @param aEmail + * 收件人Email地址 + */ + public void setTo(String aEmail) { + String[] s = new String[1]; + s[0] = aEmail; + this.to = getAddress(s); + } + + /** + * 设置多个收件人地址 + * + * @param Emails + * 收件人Email地址 + */ + public void setTo(String[] Emails) { + this.to = getAddress(Emails); + } + + /** + * 设置抄送地址 + * + * @param aEmail + * 抄送地址 + */ + public void setCC(String aEmail) { + String[] s = new String[1]; + s[0] = aEmail; + this.cc = getAddress(s); + } + + /** + * 设置多个抄送地址 + * + * @param Emails + * 抄送地址 + */ + public void setCC(String[] Emails) { + this.cc = getAddress(Emails); + } + + /** + * 设置邮件主题 + * + * @param mailTitle + * 邮件主题 + */ + public void setSubject(String mailTitle) { + this.title = mailTitle; + } + + /** + * 设置邮件文字内容 + * + * @param mailContent + * 邮件文字内容 + */ + public void setBody(String mailContent) { + this.content = mailContent; + } + + /** + * 设置邮件字符类型 + * + * @param contentType + * 请从CommonConstWords.MAIL_MODE_TEXT和MAIL_MODE_HTML中选择 + */ + public void setContentType(String contentType) { + this.content_type = contentType; + } + + private Address[] getAddress(String[] add) { + Address[] a = new Address[add.length]; + for (int i = 0; i < add.length; i++) { + try { + a[i] = new InternetAddress(add[i]); + } catch (AddressException ex) { + ex.printStackTrace(); + } + } + return a; + } + /** + * 发送邮件 + */ + public void send() { + try { + Properties server = new Properties(); + server.put("mail.smtp.port", String.valueOf(this.smtpPort)); + server.put("mail.smtp.host", this.smtpHost); + if (this.isAuthenticationSMTP) { + server.put("mail.smtp.auth", "true"); + } + + Session conn = Session.getInstance(server, null); + + MimeMessage msg = new MimeMessage(conn); + if (nick != null && !"".equals(nick)) { + nick = MimeUtility.encodeText(nick, MimeUtility.mimeCharset("gb2312"), null); + msg.setSubject(nick); + msg.setFrom(new InternetAddress(nick + " <" + from + ">")); + } else { + msg.setFrom(new InternetAddress(this.from)); + } + // 收件人 + if (this.to != null) { + msg.setRecipients(Message.RecipientType.TO, this.to); + } + // 抄送 + if (this.cc != null) { + msg.setRecipients(Message.RecipientType.CC, this.cc); + } + + msg.setSubject( MimeUtility.encodeText(this.title, MimeUtility.mimeCharset("gb2312"), null)); + msg.setSubject(this.title); + + msg.setContent(this.content, this.content_type); + + msg.saveChanges(); + if (this.isAuthenticationSMTP) { + Transport transport = conn.getTransport("smtp"); + transport.connect(this.smtpHost, this.smtpUser, this.smtpPassword); + transport.sendMessage(msg, msg.getAllRecipients()); + transport.close(); + } else { + Transport.send(msg, msg.getAllRecipients()); + } + LOGGER.info("邮件发送成功"); + } catch (javax.mail.internet.AddressException e) { + e.printStackTrace(); + } catch (MessagingException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java new file mode 100644 index 0000000..ba90f91 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; + +import java.text.MessageFormat; +import java.text.SimpleDateFormat; + +/** + * @Description : 单号生成工具类 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 13:26 + * @Modify: + **/ +public class OrderNoMakeUtil { + + public static SysOrderNoRule next(SysOrderNoRule orderNoRule) { + StringBuilder orderNo = new StringBuilder(orderNoRule.getOrderNoRule()); + + String[] dateTime = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(System.currentTimeMillis()).split("-"); + replace(orderNo, PlatformConstWords.YEAR, dateTime[0]); + replace(orderNo, PlatformConstWords.MONTH, dateTime[1]); + replace(orderNo, PlatformConstWords.DAY, dateTime[2]); + replace(orderNo, PlatformConstWords.HOUR, dateTime[3]); + replace(orderNo, PlatformConstWords.MINUTE, dateTime[4]); + replace(orderNo, PlatformConstWords.SECOND, dateTime[5]); + + // 流水号长度补全 + String serialNumberFormatStr = MessageFormat.format(PlatformConstWords.SERIAL_NO_FORMAT, orderNoRule.getSerialNoLength()); + + if (orderNoRule.getSerialNo() > 0) { + Long serialNo = orderNoRule.getSerialNo() + orderNoRule.getSerialNoIncrement(); + // 达到最大值后循环或继续 + if(orderNoRule.getSerialNoLength().intValue() < String.valueOf(serialNo).length() + && orderNoRule.getIsCycle() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){ + orderNoRule.setSerialNo(orderNoRule.getSerialNoSeed()); + } else { + orderNoRule.setSerialNo(orderNoRule.getSerialNo() + orderNoRule.getSerialNoIncrement()); + } + } else { + orderNoRule.setSerialNo(orderNoRule.getSerialNoSeed()); + } + replace(orderNo, PlatformConstWords.SERIAL_NO, String.format(serialNumberFormatStr, orderNoRule.getSerialNo())); + + orderNoRule.setOrderNo(orderNo.toString()); + return orderNoRule; + } + + private static StringBuilder replace(StringBuilder no, String constant, String param) { + int day = no.indexOf(constant); + if (day != -1) { + no.replace(day, day + constant.length(), param); + } + return no; + } + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java new file mode 100644 index 0000000..1e67d14 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/DemoWebSocket.java @@ -0,0 +1,114 @@ +package cn.estsh.i3plus.core.apiservice.websocket; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.concurrent.CopyOnWriteArraySet; + +/** + * @Description : websocket演示,后期移出base + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-11 12:32 + * @Modify: + **/ +@ServerEndpoint(value="/demo_websocket/{userName}") +@Component +public class DemoWebSocket { + private static final Logger LOGGER = LoggerFactory.getLogger(DemoWebSocket.class); + + //在线连接数 + private static int onlineCount = 0; + + //concurrent线程安全集合,存放客户端websocket对象 + private static CopyOnWriteArraySet webSocketMap = new CopyOnWriteArraySet(); + + //websocket会话 + private Session session; + + @OnOpen + public void onOpen(@PathParam("userName")String userName, Session session){ + this.session = session; + webSocketMap.add(this); //加入set中 + addOnlineCount(); //在线数加1 + LOGGER.info("{}加入!当前在线人数为{}",userName,getOnlineCount()); + try { + sendMessage(userName + "加入!当前在线人数为" + getOnlineCount()); + } catch (IOException e) { + LOGGER.info("IO异常"); + } + } + + /** + * 连接关闭调用的方法 + */ + @OnClose + public void onClose() { + webSocketMap.remove(this); //从set中删除 + subOnlineCount(); //在线数减1 + LOGGER.info("有一连接关闭!当前在线人数为" + getOnlineCount()); + } + + /** + * 收到客户端消息后调用的方法 + * + * @param message 客户端发送过来的消息*/ + @OnMessage + public void onMessage(String message, Session session) { + LOGGER.info("来自客户端的消息:" + message); + + //群发消息 + for (DemoWebSocket item : webSocketMap) { + try { + item.sendMessage(message); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 发生错误时调用 + * @OnError + */ + @OnError + public void onError(Session session, Throwable error) { + LOGGER.info("发生错误"); + error.printStackTrace(); + } + + public void sendMessage(String message) throws IOException { + this.session.getBasicRemote().sendText(message); + //this.session.getAsyncRemote().sendText(message); + } + + /** + * 群发自定义消息 + * */ + public static void sendInfo(String message) throws IOException { + for (DemoWebSocket item : webSocketMap) { + try { + item.sendMessage(message); + } catch (IOException e) { + continue; + } + } + } + + public static synchronized int getOnlineCount() { + return onlineCount; + } + + public static synchronized void addOnlineCount() { + DemoWebSocket.onlineCount++; + } + + public static synchronized void subOnlineCount() { + DemoWebSocket.onlineCount--; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java new file mode 100644 index 0000000..61ab42d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/MessageWebSocket.java @@ -0,0 +1,101 @@ +package cn.estsh.i3plus.core.apiservice.websocket; + +import cn.estsh.impp.framework.base.controller.CoreBaseController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * @Description : 消息 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-24 16:57 + * @Modify: + **/ +@ServerEndpoint(value= CoreBaseController.BASE_URL + "/message-websocket/{userId}") +@Component +public class MessageWebSocket { + + private static final Logger LOGGER = LoggerFactory.getLogger(MessageWebSocket.class); + + private long userId = 1L; + //websocket会话 + private Session session; // 当前对象会话 + private static int sendCount = 1; + //concurrent线程安全集合,存放客户端websocket对象 + private static ConcurrentMap webSocketSet = new ConcurrentHashMap(); + + @OnOpen + public void onOpen(@PathParam("userId")long userId, Session session){ + this.userId = userId; + this.session = session; + + webSocketSet.put(userId,this); //在线人数添加 + LOGGER.info("{}加入!当前在线人数为{}",userId,getOnlineCount()); + } + + /** + * 连接关闭调用的方法 + */ + @OnClose + public void onClose() { + subOnlineUser(this.userId); + LOGGER.info("有一连接关闭!当前在线人数为" + getOnlineCount()); + } + + /** + * 收到客户端消息后调用的方法 + * + * @param message 客户端发送过来的消息*/ + @OnMessage + public void onMessage(@PathParam("userId")Long userId,String message) { + // 心跳 + if("heartBit".equals(message)){ + this.sendMessage(userId,"heartBit"); + }else{ + LOGGER.info("来自客户端的消息:" , message); + } + } + + /** + * 发生错误时调用 + * @OnError + */ + @OnError + public void onError(Session session, Throwable error) { + LOGGER.info("发生错误"); + error.printStackTrace(); + } + + /** + * 发送消息 + * @param message + * @throws IOException + */ + public static void sendMessage(Long userId, String message){ + try { + MessageWebSocket websocket = webSocketSet.get(userId); + if (websocket != null){ + websocket.session.getBasicRemote().sendText(message + "=" + sendCount); + sendCount++; + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static synchronized int getOnlineCount() { + return webSocketSet.size(); + } + + public synchronized void subOnlineUser(long userId) { + webSocketSet.remove(userId); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/TestMain.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/TestMain.java new file mode 100644 index 0000000..3c4a74d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/websocket/TestMain.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.core.apiservice.websocket; + +import org.apache.commons.lang3.RandomStringUtils; + +/** + * @Description : + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2018-11-22 15:02 + * @Modify: + **/ +public class TestMain { + + public static void main(String[] args) { + System.out.println(RandomStringUtils.random(15, true, false)); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties new file mode 100644 index 0000000..f79b292 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -0,0 +1,173 @@ +#项目端口 +server.port=8100 +#本机ip +impp.server.ip=192.168.1.56 +#console控制台服务(zipkin追踪全路径) +impp.console.ip=http://csd.estsh.com + +################ 功能配置1 ################ +#若无法连接注册中心,是否需要一直检测加入 +impp.cluster.fetch=true +#服务注册中心 +impp.cluster.regist.center=http://regd.estsh.com/eureka/ +#多注册中心 +#impp.cluster.regist.center=http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 功能配置2 ################ +#是否允许前端跨域提交impp.web.cross.hosts +impp.web.cross = true + +################ 授权过滤配置 ################ +#用户登陆路径 +filter.shiro.user.loginuri = /login +#系统管理员登陆路径 +filter.shiro.admin.loginuri = /salogin +#运维人员登陆路径 +filter.shiro.saadmin.loginuri = /salogin + +#用户授权过滤路径 +filter.shiro.user.filteruri = /operate/* +#用户授权过滤路径 +filter.shiro.admin.filteruri = /adoperate/* +#用户授权过滤路径 +filter.shiro.saadmin.filteruri = /saoperate/* + +################ 云配置 (以projectName作为应用名) ################ +#是否开启微服 +eureka.client.enabled=true +#(参数配置)注册中心地址 -》 i3plus-ics,多个用逗号分隔 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#区域(源码中包含defaultZone,所以默认使用defaultZone) +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 本机微服配置 ################ +#本服务主机ip(若多个网卡,则需要设置本服务ip) +eureka.instance.ip-address=${impp.server.ip} +#本服务实例ID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#本服务主机名 +eureka.instance.hostname=${impp.server.ip} +#本服务状态页面 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#将自己的IP注册到Eureka Server。若不配置或设置为false,表示注册微服务所在操作系统的hostname到Eureka Server +eureka.instance.prefer-ip-address=true +#是否进行健康检查 +eureka.client.healthcheck.enabled=true + +################ 检测机制 ################ +#心跳间隔周期,宕机限制(秒),30秒没反应视为宕机 +eureka.instance.lease-expiration-duration-in-seconds=30 +#心跳周期 +eureka.instance.lease-renewal-interval-in-seconds=20 + +#打开feign的熔断 +feign.hystrix.enabled=true +#读取数据时长 +ribbon.ReadTimeout=3000 +#连接时长 +ribbon.ConnectTimeout=3000 +#重试 +ribbon.maxAutoRetries=2 +#响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长) +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 + +#集群名 +eureka.instance.metadata-map.cluster=impp_cluster + +################ 链路追踪 ################ +#使用web方式传输信息 +spring.zipkin.sender.type=web +#链路追踪服务的地址 +spring.zipkin.base-url=${impp.console.ip} +#追踪深度,百分比,1是全部 +spring.sleuth.sampler.probability=1.0 + +################ 日志据源 ################ +spring.data.mongodb.database=mongoDBSource +spring.data.mongodb.uri=192.168.1.55:27017 +spring.data.mongodb.username=sa +spring.data.mongodb.password=i3plus +spring.data.mongodb.port=27017 + +################ 主数据源 ################ +# mysql +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.url=jdbc:mysql://localhost:3306/i3wms +##Sql-server## +#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +#spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=i3wms +##oracle## +#spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver +#spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:i3wms +#spring.datasource.username=root +#spring.datasource.password=123456 + +##主数据源,读写 +#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.write.datasource.username=impp_i3_core_user +impp.write.datasource.password=impp_i3_core_pwd + +##辅数据源,只读 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3306/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.read.datasource.username=impp_i3_core_user +impp.read.datasource.password=impp_i3_core_pwd + +##############定时任务持久化############## +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=impp_i3_schedule_user +impp.schedule.datasource.password=impp_i3_schedule_pwd +impp.schedule.datasource.max-connections=20 +#定时任务在服务启动后多少秒执行 +impp.schedule.start.after-second=20 +#是否集群部署 +impp.schedule.datasource.is-clustered=true +#执行检测(毫秒),若宕机由其他定时器执行 +impp.schedule.datasource.cluster-checkin-interval=30000 +#线程数 +impp.schedule.thread-count=10 +#线程优先级(1-10)默认为5 +impp.schedule.thread-priority=5 + + +################ 数据池设置 ################ +spring.datasource.maximum-pool-size=100 +spring.datasource.max-active=3 +spring.datasource.max-idle=3 +spring.datasource.min-idle=1 +spring.datasource.initial-size=1 +spring.datasource.max-wait=10000 +spring.datasource.validation-query=SELECT 1 +spring.datasource.test-on-borrow=false +spring.datasource.test-while-idle=true +spring.datasource.time-between-eviction-runs-millis=18800 + +################ JPA设置设置 ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect + +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL + +#ImprovedNamingStrategy / physical_naming_strategy java属性映射到数据库字段时命名规则 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#表关系create,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#是否显示sql +spring.jpa.show-sql=true diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties b/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties new file mode 100644 index 0000000..73f944e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties @@ -0,0 +1,173 @@ +#项目端口 +server.port=1100 +#本机ip +impp.server.ip=192.168.1.56 +#console控制台服务(zipkin追踪全路径) +impp.console.ip=http://cs.estsh.com + +################ 功能配置1 ################ +#若无法连接注册中心,是否需要一直检测加入 +impp.cluster.fetch=true +#服务注册中心 +impp.cluster.regist.center=http://reg.estsh.com/eureka/ +#多注册中心 +#impp.cluster.regist.center=http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 功能配置2 ################ +#是否允许前端跨域提交impp.web.cross.hosts +impp.web.cross = true + +################ 授权过滤配置 ################ +#用户登陆路径 +filter.shiro.user.loginuri = /login +#系统管理员登陆路径 +filter.shiro.admin.loginuri = /salogin +#运维人员登陆路径 +filter.shiro.saadmin.loginuri = /salogin + +#用户授权过滤路径 +filter.shiro.user.filteruri = /operate/* +#用户授权过滤路径 +filter.shiro.admin.filteruri = /adoperate/* +#用户授权过滤路径 +filter.shiro.saadmin.filteruri = /saoperate/* + +################ 云配置 (以projectName作为应用名) ################ +#是否开启微服 +eureka.client.enabled=true +#(参数配置)注册中心地址 -》 i3plus-ics,多个用逗号分隔 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#区域(源码中包含defaultZone,所以默认使用defaultZone) +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 本机微服配置 ################ +#本服务主机ip(若多个网卡,则需要设置本服务ip) +eureka.instance.ip-address=${impp.server.ip} +#本服务实例ID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#本服务主机名 +eureka.instance.hostname=${impp.server.ip} +#本服务状态页面 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#将自己的IP注册到Eureka Server。若不配置或设置为false,表示注册微服务所在操作系统的hostname到Eureka Server +eureka.instance.prefer-ip-address=true +#是否进行健康检查 +eureka.client.healthcheck.enabled=true + +################ 检测机制 ################ +#心跳间隔周期,宕机限制(秒),30秒没反应视为宕机 +eureka.instance.lease-expiration-duration-in-seconds=30 +#心跳周期 +eureka.instance.lease-renewal-interval-in-seconds=20 + +#打开feign的熔断 +feign.hystrix.enabled=true +#读取数据时长 +ribbon.ReadTimeout=3000 +#连接时长 +ribbon.ConnectTimeout=3000 +#重试 +ribbon.maxAutoRetries=2 +#响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长) +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 + +#集群名 +eureka.instance.metadata-map.cluster=impp_cluster + +################ 链路追踪 ################ +#使用web方式传输信息 +spring.zipkin.sender.type=web +#链路追踪服务的地址 +spring.zipkin.base-url=${impp.console.ip} +#追踪深度,百分比,1是全部 +spring.sleuth.sampler.probability=1.0 + +################ 日志据源 ################ +spring.data.mongodb.database=prodMongoDBSource +spring.data.mongodb.uri=192.168.1.55:27017 +spring.data.mongodb.username=sa +spring.data.mongodb.password=i3plus +spring.data.mongodb.port=27017 + +################ 主数据源 ################ +# mysql +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.url=jdbc:mysql://localhost:3306/i3wms +##Sql-server## +#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +#spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=i3wms +##oracle## +#spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver +#spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:i3wms +#spring.datasource.username=root +#spring.datasource.password=123456 + +##主数据源,读写 +#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3309/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.write.datasource.username=impp_i3_core_user +impp.write.datasource.password=impp_i3_core_pwd + +##辅数据源,只读 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3309/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.read.datasource.username=impp_i3_core_user +impp.read.datasource.password=impp_i3_core_pwd + +##############定时任务持久化############## +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3309/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=impp_i3_schedule_user +impp.schedule.datasource.password=impp_i3_schedule_pwd +impp.schedule.datasource.max-connections=20 +#定时任务在服务启动后多少秒执行 +impp.schedule.start.after-second=20 +#是否集群部署 +impp.schedule.datasource.is-clustered=true +#执行检测(毫秒),若宕机由其他定时器执行 +impp.schedule.datasource.cluster-checkin-interval=30000 +#线程数 +impp.schedule.thread-count=10 +#线程优先级(1-10)默认为5 +impp.schedule.thread-priority=5 + + +################ 数据池设置 ################ +spring.datasource.maximum-pool-size=100 +spring.datasource.max-active=3 +spring.datasource.max-idle=3 +spring.datasource.min-idle=1 +spring.datasource.initial-size=1 +spring.datasource.max-wait=10000 +spring.datasource.validation-query=SELECT 1 +spring.datasource.test-on-borrow=false +spring.datasource.test-while-idle=true +spring.datasource.time-between-eviction-runs-millis=18800 + +################ JPA设置设置 ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect + +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL + +#ImprovedNamingStrategy / physical_naming_strategy java属性映射到数据库字段时命名规则 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#表关系create,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#是否显示sql +spring.jpa.show-sql=true diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties new file mode 100644 index 0000000..e5a0fcd --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties @@ -0,0 +1,173 @@ +#项目端口 +server.port=58100 +#本机ip +impp.server.ip=192.168.1.56 +#console控制台服务(zipkin追踪全路径) +impp.console.ip=http://cst.estsh.com + +################ 功能配置1 ################ +#若无法连接注册中心,是否需要一直检测加入 +impp.cluster.fetch=true +#服务注册中心 +impp.cluster.regist.center=http://regt.estsh.com/eureka/ +#多注册中心 +#impp.cluster.regist.center=http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 功能配置2 ################ +#是否允许前端跨域提交impp.web.cross.hosts +impp.web.cross = true + +################ 授权过滤配置 ################ +#用户登陆路径 +filter.shiro.user.loginuri = /login +#系统管理员登陆路径 +filter.shiro.admin.loginuri = /salogin +#运维人员登陆路径 +filter.shiro.saadmin.loginuri = /salogin + +#用户授权过滤路径 +filter.shiro.user.filteruri = /operate/* +#用户授权过滤路径 +filter.shiro.admin.filteruri = /adoperate/* +#用户授权过滤路径 +filter.shiro.saadmin.filteruri = /saoperate/* + +################ 云配置 (以projectName作为应用名) ################ +#是否开启微服 +eureka.client.enabled=true +#(参数配置)注册中心地址 -》 i3plus-ics,多个用逗号分隔 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#区域(源码中包含defaultZone,所以默认使用defaultZone) +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ + +################ 本机微服配置 ################ +#本服务主机ip(若多个网卡,则需要设置本服务ip) +eureka.instance.ip-address=${impp.server.ip} +#本服务实例ID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#本服务主机名 +eureka.instance.hostname=${impp.server.ip} +#本服务状态页面 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#将自己的IP注册到Eureka Server。若不配置或设置为false,表示注册微服务所在操作系统的hostname到Eureka Server +eureka.instance.prefer-ip-address=true +#是否进行健康检查 +eureka.client.healthcheck.enabled=true + +################ 检测机制 ################ +#心跳间隔周期,宕机限制(秒),30秒没反应视为宕机 +eureka.instance.lease-expiration-duration-in-seconds=30 +#心跳周期 +eureka.instance.lease-renewal-interval-in-seconds=20 + +#打开feign的熔断 +feign.hystrix.enabled=true +#读取数据时长 +ribbon.ReadTimeout=3000 +#连接时长 +ribbon.ConnectTimeout=3000 +#重试 +ribbon.maxAutoRetries=2 +#响应超过时长,进行熔断(熔断超时需要大于读取时长及连接时长) +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000 + +#集群名 +eureka.instance.metadata-map.cluster=impp_cluster + +################ 链路追踪 ################ +#使用web方式传输信息 +spring.zipkin.sender.type=web +#链路追踪服务的地址 +spring.zipkin.base-url=${impp.console.ip} +#追踪深度,百分比,1是全部 +spring.sleuth.sampler.probability=1.0 + +################ 日志据源 ################ +spring.data.mongodb.database=testMongoDBSource +spring.data.mongodb.uri=192.168.1.55:27017 +spring.data.mongodb.username=sa +spring.data.mongodb.password=i3plus +spring.data.mongodb.port=27017 + +################ 主数据源 ################ +# mysql +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.url=jdbc:mysql://localhost:3306/i3wms +##Sql-server## +#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +#spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=i3wms +##oracle## +#spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver +#spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:i3wms +#spring.datasource.username=root +#spring.datasource.password=123456 + +##主数据源,读写 +#impp.write.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.write.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3308/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.write.datasource.username=impp_i3_core_user +impp.write.datasource.password=impp_i3_core_pwd + +##辅数据源,只读 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.read.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3308/impp_i3_core?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.read.datasource.username=impp_i3_core_user +impp.read.datasource.password=impp_i3_core_pwd + +##############定时任务持久化############## +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://192.168.1.55:3308/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=impp_i3_schedule_user +impp.schedule.datasource.password=impp_i3_schedule_pwd +impp.schedule.datasource.max-connections=20 +#定时任务在服务启动后多少秒执行 +impp.schedule.start.after-second=20 +#是否集群部署 +impp.schedule.datasource.is-clustered=true +#执行检测(毫秒),若宕机由其他定时器执行 +impp.schedule.datasource.cluster-checkin-interval=30000 +#线程数 +impp.schedule.thread-count=10 +#线程优先级(1-10)默认为5 +impp.schedule.thread-priority=5 + + +################ 数据池设置 ################ +spring.datasource.maximum-pool-size=100 +spring.datasource.max-active=3 +spring.datasource.max-idle=3 +spring.datasource.min-idle=1 +spring.datasource.initial-size=1 +spring.datasource.max-wait=10000 +spring.datasource.validation-query=SELECT 1 +spring.datasource.test-on-borrow=false +spring.datasource.test-while-idle=true +spring.datasource.time-between-eviction-runs-millis=18800 + +################ JPA设置设置 ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect + +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL + +#ImprovedNamingStrategy / physical_naming_strategy java属性映射到数据库字段时命名规则 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#表关系create,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=update +#是否显示sql +spring.jpa.show-sql=true diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties new file mode 100644 index 0000000..58de670 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/application.properties @@ -0,0 +1,32 @@ +#项目名称 +spring.application.name=${project.name} + +#使用配置 +spring.profiles.active=dev + +######### 自定义参数 ######### +#项目描述信息(swagger中显式),中文使用uncode转码 +desc.application.name=\u6838\u5fc3\u7ba1\u7406\u540e\u53f0 +#当前项目版本 +version=${project.version} +#解决程序读配置文件乱码问题 +spring.message.encoding = UTF-8 + +#日志默认使用log4j2 +logging.config=classpath:log4j2.xml + +#上传单个文件大小 +spring.servlet.multipart.max-file-size=1MB +#request请求全部数据最大限制 +spring.servlet.multipart.max-request-size=10MB +#是否推迟文件解析,true则接受完后再解析 +spring.servlet.multipart.resolve-lazily=true + +########## 页面配置 ######## +#访问相关配置 +server.tomcat.uri-encoding=UTF-8 +#Spring boot视图配置 +spring.mvc.view.prefix=/upload_demo +spring.mvc.view.suffix=.jsp +#静态文件访问配置 +spring.resources.static-locations=/static/**,/** \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/resources/banner.txt b/modules/i3plus-core-apiservice/src/main/resources/banner.txt new file mode 100644 index 0000000..5554e33 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/banner.txt @@ -0,0 +1,14 @@ + ______ _____ _______ _____ _ _ _____ ____ _____ _ + | ____|/ ____|__ __/ ____| | | | |_ _|___ \| __ \| | + | |__ | (___ | | | (___ | |__| | | | __) | |__) | |_ _ ___ + | __| \___ \ | | \___ \| __ | | | |__ <| ___/| | | | / __| + | |____ ____) | | | ____) | | | | _ _| |_ ___) | | | | |_| \__ \ + |______|_____/ |_| |_____/|_| |_| (_)_____|____/|_| |_|\__,_|___/ + ___ __ __ ____ ____ ____ ___ ____ _____ + |_ _| \/ | _ \| _ \ / ___|/ _ \| _ \| ____| + | || |\/| | |_) | |_) | _____ | | | | | | |_) | _| + | || | | | __/| __/ |_____| | |___| |_| | _ <| |___ + |___|_| |_|_| |_| \____|\___/|_| \_\_____| +------------------------------------------------------------------->>> + :::: CORE of i3plus Impp framework :::: v1.0.0.Build +------------------------------------------------------------------->>> >>> diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/oder-no-rule.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/oder-no-rule.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8c926aff752f31a40c05bcbe65744bc9dc6ea8ba GIT binary patch literal 10898 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 SIam>%DjXr6?be*9G>Cx0r7ZJ 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 xUCWPC&Q1b^w$8PjWndDK&pB5TRzm3d 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 aB*-f9x!5hBjzU4*1OBZ6g~_N4Jo{fJZxEOO literal 0 HcmV?d00001 diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/permission.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/permission.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..788abc2431ca38d39936fad93fa5d7e4d11c1dd9 GIT binary patch literal 36971 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 z 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 ntb19Yg06sgY{RTeuc7MiPuWMS_PyWSLQ-E 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 b|6Tk)313bM4v3(KXutri0pzxed^r0*vuv8F literal 0 HcmV?d00001 diff --git a/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx b/modules/i3plus-core-apiservice/src/main/resources/init/sys-config.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2eea6742b67f49234d53eb321cd618bb48af4b23 GIT binary patch literal 32512 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 LHsx^ye|`2Zjxoi7 literal 0 HcmV?d00001 diff --git a/modules/i3plus-core-apiservice/src/main/resources/log4j2.xml b/modules/i3plus-core-apiservice/src/main/resources/log4j2.xml new file mode 100644 index 0000000..cf4275c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/log4j2.xml @@ -0,0 +1,59 @@ + + + + + + [%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %l 信息:%m%n + [%p] %d{HH:mm:ss-SSS} %c(%M:%L) 信息:%m%n + [SYS-%p] 系统:%m (%d{HH:mm:ss-SSS} %F -> %M:%L)%n + + + + + + + + + + + + + + + + + + + + + ${info_pattern} + + + + + + ${system_log_pattern} + + + + + + + ${pattern} + + + + + + + + + + + ${pattern} + + + + \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/resources/mail.properties b/modules/i3plus-core-apiservice/src/main/resources/mail.properties new file mode 100644 index 0000000..88178ae --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/resources/mail.properties @@ -0,0 +1,5 @@ +mail.host = smtphm.qiye.163.com +mail.port = 25 +mail.user = dongshang@estsh.com +mail.password = Aa111111 +mail.nick = 东尚消息 \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/index.jsp b/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/index.jsp new file mode 100644 index 0000000..c957814 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/index.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: HP + Date: 2018/9/28 + Time: 12:09 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + welcome + + + welcome + + diff --git a/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload.jsp b/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload.jsp new file mode 100644 index 0000000..7f97467 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload.jsp @@ -0,0 +1,19 @@ +<%-- + Created by IntelliJ IDEA. + User: HP + Date: 2018/9/28 + Time: 12:10 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 上传图片 + + +
+

+ +
+ + diff --git a/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload_status.jsp b/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload_status.jsp new file mode 100644 index 0000000..71831f2 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/webapp/upload_demo/upload_status.jsp @@ -0,0 +1,22 @@ +<%-- + Created by IntelliJ IDEA. + User: HP + Date: 2018/9/28 + Time: 12:11 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 上传结果 + + +
+

${message}

+
+ +
+

${path}

+
+ + diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/mq/TestMQ.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/mq/TestMQ.java new file mode 100644 index 0000000..62b9b5c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/mq/TestMQ.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.TestBase; +import cn.estsh.i3plus.core.apiservice.util.MailUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import org.junit.Test; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-15 13:22 + * @Modify: + **/ +public class TestMQ extends TestBase { + + /** + * rabbitMQ队列 + */ + @Autowired + private RabbitTemplate rabbitTemplate; + + @Autowired + private MailUtil mailUtil; + + @Test + public void sendMail() throws InterruptedException { + + SysMessage sysMessage = new SysMessage(); + sysMessage.setMessageTitle("test-系统通知"); + sysMessage.setMessageSenderNameRdd("system"); + sysMessage.setMessageSenderId(-1L); + sysMessage.setMessageType(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue()); + sysMessage.setMessageSendTime("2018-11-01 16:58:00"); + + for (int i = 0; i < 50; i++) { + sysMessage = new SysMessage(); + sysMessage.setId(null); + sysMessage.setMessageTitle( i + "mail测试"); + sysMessage.setMessageSenderNameRdd(i+""); + rabbitTemplate.convertAndSend("WYH_MESSAGE_QUEUE", new SysMessage()); + System.out.println("第" + i + "次"); + } + + } + +} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/ArraySort.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/ArraySort.java new file mode 100644 index 0000000..5d501bb --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/ArraySort.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-11-09 10:00 + * @Modify: + **/ +public class ArraySort implements Runnable { + + private String num; + + public ArraySort(int num){ + this.num = num + ""; + } + + public static void main(String[] args){ + int[] num = {11,3,9,5,1,4,15}; + for(int i=0;i ysOrderNoRuleList = getSysOrderNoRule(sheetOrderNoRule); + + LOGGER.info("System Init SysOrderNoRule Size:{}",ysOrderNoRuleList.size()); + + sysOrderNoRuleRDao.saveAll(ysOrderNoRuleList); + } + } + + public List getSysOrderNoRule(XSSFSheet sheet){ + List result = new ArrayList<>(); + if(sheet != null){ + if(sheet.getLastRowNum() >= 1){ + SysOrderNoRule obj = null; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + try { + Row row = sheet.getRow(i);//获取索引为i的行,以0开始 + if(row.getCell(0).toString().trim().length() > 0){ + obj = new SysOrderNoRule(); + obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); + obj.setName(row.getCell(1).getStringCellValue()); + obj.setOrderNoRuleCode(row.getCell(2).getStringCellValue()); + obj.setOrderNoRule(row.getCell(3).getStringCellValue()); + obj.setSerialNoSeed(Long.parseLong(row.getCell(4).getStringCellValue())); + obj.setSerialNoIncrement(Long.parseLong(row.getCell(5).getStringCellValue())); + obj.setSerialNoLength(Long.parseLong(row.getCell(6).getStringCellValue())); + obj.setIsCycle(Integer.parseInt(row.getCell(7).getStringCellValue())); + obj.setOrderNoRuleDescription(row.getCell(8).getStringCellValue()); + obj.setOrderNoRuleStatus(1); + obj.setSerialNo(-1L); + obj.setIsValid(1); + + result.add(obj); + } + }catch (Exception e){ + LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); + } + } + } + } + return result; + } + + public XSSFWorkbook getWorkbook(String pathName){ + try { + InputStream in = TestExcelPermission.class.getClassLoader().getResourceAsStream(pathName); + XSSFWorkbook workbook = new XSSFWorkbook(in); + return workbook; + }catch (Exception e){ + LOGGER.error(" System Init Sys Data Excel Error file path {} error message :{}",pathName,e.getMessage()); + e.getMessage(); + return null; + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java new file mode 100644 index 0000000..dd6f15e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelPermission.java @@ -0,0 +1,259 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.repository.*; +import com.alibaba.fastjson.JSON; +import io.swagger.models.auth.In; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jdom2.Document; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * 系统数据初始化 + */ +public class TestExcelPermission extends TestBase { +//public class TestExcelPermission { + + public static final Logger LOGGER = LoggerFactory.getLogger(TestExcelPermission.class); + + // 文件路径 + public static final String PATH_NAME = "init/permission.xlsx"; + // 权限Sheet 名称 + public static final String SHEET_NAME_MENU = "menu"; + public static final String SHEET_NAME_ROLE = "role"; + public static final String SHEET_NAME_USER_INFO = "user-info"; + public static final String SHEET_NAME_USER = "user"; + + @Autowired + private SysUserRepository sysUserRdao; + + @Autowired + private SysUserInfoRepository userInfoRDao; + + @Autowired + private SysMenuRepository menuRdao; + + @Autowired + private SysRoleRepository roleRDao; + + @Autowired + private SysRefRoleMenuRepository refRoleMenuRDao; + + @Test + public void testInit() throws Exception { + XSSFWorkbook workbook = getWorkbook(PATH_NAME); + if(workbook != null){ + XSSFSheet sheetMenu = workbook.getSheet(SHEET_NAME_MENU); + XSSFSheet sheetRole = workbook.getSheet(SHEET_NAME_ROLE); + XSSFSheet sheetUserInfo = workbook.getSheet(SHEET_NAME_USER_INFO); + XSSFSheet sheetUser = workbook.getSheet(SHEET_NAME_USER); + + List menus = getSysMenu(sheetMenu); + List roles = getSysRole(sheetRole); + List userInfos = getSysUserInfo(sheetUserInfo); + List users = getSysUser(sheetUser); + + List refRoleMenu = getRefRoleMenu(menus, roles); + + LOGGER.info("System Init SysMenu Size:{}",menus.size()); + LOGGER.info("System Init SysRole Size:{}",roles.size()); + LOGGER.info("System Init SysUserInfo Size:{}",userInfos.size()); + LOGGER.info("System Init SysUser Size:{}",users.size()); + LOGGER.info("System Init SysRefRoleMenu Size:{}",refRoleMenu.size()); + + sysUserRdao.saveAll(users); + userInfoRDao.saveAll(userInfos); + menuRdao.saveAll(menus); + roleRDao.saveAll(roles); + refRoleMenuRDao.saveAll(refRoleMenu); + } + } + + public List getRefUserRole(List users,List roles){ + List result = new ArrayList<>(); + if(users != null && roles != null){ + SysRefUserRole ref = null; + for (SysUser user : users) { + for (SysRole role : roles) { + ref = new SysRefUserRole(); + ref.setRoleId(role.getId()); + ref.setRoleNameRdd(role.getName()); + ref.setUserId(user.getId()); + ref.setUserNameRdd(user.getUserName()); + result.add(ref); + } + } + } + return result; + } + + public List getRefRoleMenu(List menus,List roles){ + List result = new ArrayList<>(); + if(menus != null && roles != null){ + SysRefRoleMenu ref = null; + for (SysMenu menu : menus) { + for (SysRole role : roles) { + ref = new SysRefRoleMenu(); + ref.setRoleId(role.getId()); + ref.setRoleNameRdd(role.getName()); + ref.setMenuId(menu.getId()); + ref.setMenuNameRdd(menu.getName()); + ref.setMenuTypeRdd(menu.getMenuType()); + result.add(ref); + } + } + } + return result; + } + + public List getSysUser(XSSFSheet sheet){ + List result = new ArrayList<>(); + if(sheet != null){ + if(sheet.getLastRowNum() >= 1){ + SysUser obj = null; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + try { + Row row = sheet.getRow(i);//获取索引为i的行,以0开始 + if(row.getCell(0).toString().trim().length() > 0){ + obj = new SysUser(); + String md5 = EncryptTool.hexMD5(row.getCell(2).toString()); + obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); + obj.setUserLoginName(row.getCell(1).getStringCellValue()); + obj.setUserLoginPassword(md5); + obj.setUserEmail(row.getCell(3).getStringCellValue()); + obj.setUserPhone(row.getCell(4).getStringCellValue()); + obj.setUserInfoId(Long.parseLong(row.getCell(5).getStringCellValue())); + obj.setUserName(row.getCell(6).getStringCellValue()); + obj.setIsValid(1); + obj.setUserType(1); + obj.setUserLoginNum(0); + + result.add(obj); + } + }catch (Exception e){ + LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); + } + } + } + } + return result; + } + + public List getSysUserInfo(XSSFSheet sheet){ + List result = new ArrayList<>(); + if(sheet != null){ + if(sheet.getLastRowNum() >= 1){ + SysUserInfo obj = null; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + try { + Row row = sheet.getRow(i);//获取索引为i的行,以0开始 + if(row.getCell(0).toString().trim().length() > 0){ + obj = new SysUserInfo(); + obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); + obj.setName(row.getCell(1).getStringCellValue()); + obj.setUserEmpNo(row.getCell(2).getStringCellValue()); + obj.setUserLoginNum(0); + obj.setIsValid(1); + obj.setUserInfoStatus(1); + + result.add(obj); + } + }catch (Exception e){ + LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); + } + } + } + } + return result; + } + + public List getSysRole(XSSFSheet sheet){ + List result = new ArrayList<>(); + if(sheet != null){ + if(sheet.getLastRowNum() >= 1){ + SysRole role = null; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + try { + Row row = sheet.getRow(i);//获取索引为i的行,以0开始 + if(row.getCell(0).toString().trim().length() > 0){ + role = new SysRole(); + role.setId(Long.parseLong(row.getCell(0).getStringCellValue())); + role.setName(row.getCell(1).getStringCellValue()); + role.setRoleDescription(row.getCell(2).getStringCellValue()); + role.setRoleStatus(1); + role.setIsValid(1); + + result.add(role); + } + }catch (Exception e){ + LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); + } + } + } + } + return result; + } + + public List getSysMenu(XSSFSheet sheet){ + List result = new ArrayList<>(); + if(sheet != null){ + if(sheet.getLastRowNum() >= 1){ + SysMenu menu = null; + for (int i = 1; i <= sheet.getLastRowNum(); i++) { + try { + Row row = sheet.getRow(i);//获取索引为i的行,以0开始 + if(row.getCell(0).toString().trim().length() > 0){ + menu = new SysMenu(); + menu.setId(Long.parseLong(row.getCell(0).getStringCellValue())); + menu.setMenuType(Integer.parseInt(row.getCell(1).getStringCellValue())); + menu.setMenuCode(row.getCell(2).getStringCellValue()); + menu.setName(row.getCell(3).getStringCellValue()); + menu.setParentId(Long.parseLong(row.getCell(4).getStringCellValue())); + menu.setParentNameRdd(row.getCell(5).getStringCellValue()); + menu.setMenuDescription(row.getCell(6).getStringCellValue()); + menu.setMenuStatus(Integer.parseInt(row.getCell(7).getStringCellValue())); + menu.setCreateUser("System Init"); + menu.setMenuUrl(row.getCell(9).getStringCellValue()); + menu.setMenuCss(row.getCell(10).getStringCellValue()); + menu.setMenuIcon(row.getCell(11).getStringCellValue()); + + result.add(menu); + } + }catch (Exception e){ + LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); + } + } + } + } + return result; + } + + public XSSFWorkbook getWorkbook(String pathName){ + try { + InputStream in = TestExcelPermission.class.getClassLoader().getResourceAsStream(pathName); + XSSFWorkbook workbook = new XSSFWorkbook(in); + return workbook; + }catch (Exception e){ + LOGGER.error(" System Init Sys Data Excel Error file path {} error message :{}",pathName,e.getMessage()); + e.getMessage(); + return null; + } + } + +} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelSysConfig.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelSysConfig.java new file mode 100644 index 0000000..69ad6a8 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestExcelSysConfig.java @@ -0,0 +1,207 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.pojo.platform.bean.*; +//import cn.estsh.i3plus.pojo.platform.repository.SysConfigRepository; +//import cn.estsh.i3plus.pojo.platform.repository.SysDictionaryRepository; +//import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository; +//import cn.estsh.i3plus.pojo.platform.repository.SysLocaleResourceRepository; +//import org.apache.poi.ss.usermodel.Row; +//import org.apache.poi.xssf.usermodel.XSSFSheet; +//import org.apache.poi.xssf.usermodel.XSSFWorkbook; +//import org.junit.Test; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +// +//import java.io.InputStream; +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * @Description : +// * @Reference : +// * @Author : yunhao +// * @CreateDate : 2018-11-22 11:01 +// * @Modify: +// **/ +//public class TestExcelSysConfig extends TestBase { +// +// public static final Logger LOGGER = LoggerFactory.getLogger(TestExcelPermission.class); +// +// // 文件路径 +// public static final String PATH_NAME = "init/sys-config.xlsx"; +// // 权限Sheet 名称 +// public static final String SHEET_SYS_CONFIG = "sys-config"; +// public static final String SHEET_DICTIONARY = "dictionary"; +// public static final String SHEET_LANGUAGE = "language"; +// public static final String SHEET_RESOURCE = "resource"; +// +// @Autowired +// private SysConfigRepository sysConfigRDao; +// @Autowired +// private SysDictionaryRepository sysDictionaryRDao; +// @Autowired +// private SysLocaleLanguageRepository sysLocaleLanguageRDao; +// @Autowired +// private SysLocaleResourceRepository sysLocaleResourceRDao; +// +// @Test +// public void testInit() throws Exception { +// XSSFWorkbook workbook = getWorkbook(PATH_NAME); +// if(workbook != null){ +// XSSFSheet sheetSysConfig = workbook.getSheet(SHEET_SYS_CONFIG); +// XSSFSheet sheetDictionary = workbook.getSheet(SHEET_DICTIONARY); +// XSSFSheet sheetLanguage = workbook.getSheet(SHEET_LANGUAGE); +// XSSFSheet sheetResource = workbook.getSheet(SHEET_RESOURCE); +// +// List sysConfigList = getSysConfig(sheetSysConfig); +// List sysDictionaryList = getSysDictionary(sheetDictionary); +// List sysLocaleLanguageList = getSysLocaleLanguage(sheetLanguage); +// List sysLocaleResourceList= getSysLocaleResource(sheetResource); +// +// LOGGER.info("System Init SysConfig Size:{}",sysConfigList.size()); +// LOGGER.info("System Init SysDictionary Size:{}",sysDictionaryList.size()); +// LOGGER.info("System Init SysLocaleLanguage Size:{}",sysLocaleLanguageList.size()); +// LOGGER.info("System Init SysLocaleResource Size:{}",sysLocaleResourceList.size()); +// +// sysConfigRDao.saveAll(sysConfigList); +// sysDictionaryRDao.saveAll(sysDictionaryList); +// sysLocaleLanguageRDao.saveAll(sysLocaleLanguageList); +// sysLocaleResourceRDao.saveAll(sysLocaleResourceList); +// } +// } +// +// public List getSysConfig(XSSFSheet sheet){ +// List result = new ArrayList<>(); +// if(sheet != null){ +// if(sheet.getLastRowNum() >= 1){ +// SysConfig obj = null; +// for (int i = 1; i <= sheet.getLastRowNum(); i++) { +// try { +// Row row = sheet.getRow(i);//获取索引为i的行,以0开始 +// if(row.getCell(0).toString().trim().length() > 0){ +// obj = new SysConfig(); +// obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); +// obj.setName(row.getCell(1).getStringCellValue()); +// obj.setConfigType(Integer.valueOf(row.getCell(2).getStringCellValue())); +// obj.setConfigCode(row.getCell(3).getStringCellValue()); +// obj.setConfigValue(row.getCell(4).getStringCellValue()); +// obj.setConfigDescription(row.getCell(5).getStringCellValue()); +// obj.setIsValid(1); +// +// result.add(obj); +// } +// }catch (Exception e){ +// LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); +// } +// } +// } +// } +// return result; +// } +// +// public List getSysDictionary(XSSFSheet sheet){ +// List result = new ArrayList<>(); +// if(sheet != null){ +// if(sheet.getLastRowNum() >= 1){ +// SysDictionary obj = null; +// for (int i = 1; i <= sheet.getLastRowNum(); i++) { +// try { +// Row row = sheet.getRow(i);//获取索引为i的行,以0开始 +// if(row.getCell(0).toString().trim().length() > 0){ +// obj = new SysDictionary(); +// obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); +// obj.setName(row.getCell(1).getStringCellValue()); +// obj.setDictionaryCode(row.getCell(2).getStringCellValue()); +// obj.setParentId(Long.valueOf(row.getCell(3).getStringCellValue())); +// obj.setParentNameRdd(row.getCell(4).getStringCellValue()); +// obj.setParentCodeRdd(row.getCell(5).getStringCellValue()); +// obj.setDictionaryValue(row.getCell(6).getStringCellValue()); +// obj.setDictionarySort(Integer.valueOf(row.getCell(7).getStringCellValue())); +// obj.setDictionaryDescription(row.getCell(8).getStringCellValue()); +// obj.setIsValid(1); +// +// result.add(obj); +// } +// }catch (Exception e){ +// LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); +// } +// } +// } +// } +// return result; +// } +// +// public List getSysLocaleLanguage(XSSFSheet sheet){ +// List result = new ArrayList<>(); +// if(sheet != null){ +// if(sheet.getLastRowNum() >= 1){ +// SysLocaleLanguage obj = null; +// for (int i = 1; i <= sheet.getLastRowNum(); i++) { +// try { +// Row row = sheet.getRow(i);//获取索引为i的行,以0开始 +// if(row.getCell(0).toString().trim().length() > 0){ +// obj = new SysLocaleLanguage(); +// obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); +// obj.setLanguageName(row.getCell(1).getStringCellValue()); +// obj.setLanguageCode(row.getCell(2).getStringCellValue()); +// obj.setLanguageSort(Integer.valueOf(row.getCell(3).getStringCellValue())); +// obj.setIsDefault(Integer.valueOf(row.getCell(4).getStringCellValue())); +// obj.setLanguageStatus(Integer.valueOf(row.getCell(5).getStringCellValue())); +// obj.setIsValid(1); +// +// result.add(obj); +// } +// }catch (Exception e){ +// LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); +// } +// } +// } +// } +// return result; +// } +// +// public List getSysLocaleResource(XSSFSheet sheet){ +// List result = new ArrayList<>(); +// if(sheet != null){ +// if(sheet.getLastRowNum() >= 1){ +// SysLocaleResource obj = null; +// for (int i = 1; i <= sheet.getLastRowNum(); i++) { +// try { +// Row row = sheet.getRow(i);//获取索引为i的行,以0开始 +// if(row.getCell(0).toString().trim().length() > 0){ +// obj = new SysLocaleResource(); +// obj.setId(Long.parseLong(row.getCell(0).getStringCellValue())); +// obj.setResourceType(Integer.valueOf(row.getCell(1).getStringCellValue())); +// obj.setLanguageCode(row.getCell(2).getStringCellValue()); +// obj.setLanguageNameRdd(row.getCell(3).getStringCellValue()); +// obj.setResourceKey(row.getCell(4).getStringCellValue()); +// obj.setResourceValue(row.getCell(5).getStringCellValue()); +// obj.setIsSystem(Integer.valueOf(row.getCell(6).getStringCellValue())); +// obj.setIsValid(1); +// +// result.add(obj); +// } +// }catch (Exception e){ +// LOGGER.error("Excel Sheet Name :{} Index:{} DataType Error", sheet.getSheetName(), i); +// } +// } +// } +// } +// return result; +// } +// +// +// public XSSFWorkbook getWorkbook(String pathName){ +// try { +// InputStream in = TestExcelPermission.class.getClassLoader().getResourceAsStream(pathName); +// XSSFWorkbook workbook = new XSSFWorkbook(in); +// return workbook; +// }catch (Exception e){ +// LOGGER.error(" System Init Sys Data Excel Error file path {} error message :{}",pathName,e.getMessage()); +// e.getMessage(); +// return null; +// } +// } +// +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestMessageService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestMessageService.java new file mode 100644 index 0000000..259a4e6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestMessageService.java @@ -0,0 +1,110 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +//import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 测试 消息服务接口 +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-10-31 15:30 +// * @Modify : +// **/ +//public class TestMessageService extends TestBase { +// +// public static final Logger LOGGER = LoggerFactory.getLogger(TestMessageService.class); +// @Autowired +// private ISysMessageService sysMessageService; +// +// /** +// * 测试 查询所有消息 +// */ +// @Test +// @Transactional +// public void testListSysMessage() { +// List list = sysMessageService.listSysMessage(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询消息 +// */ +// @Test +// @Transactional +// public void testGetSysMessageById() { +// SysMessage sysMessage = sysMessageService.getSysMessageById(1L); +// System.out.println(JSON.toJSONString(sysMessage)); +// } +// +// /** +// * 测试 添加消息 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertSysMessage() { +// SysMessage sysMessage = new SysMessage(); +// sysMessage.setMessageTitle("test-系统通知"); +// sysMessage.setMessageSenderNameRdd("system"); +// sysMessage.setMessageSenderId(-1L); +// sysMessage.setMessageType(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue()); +// sysMessage.setMessageSendTime("2018-11-01 16:58:00"); +// +// for (int i = 0; i < 50; i++) { +// sysMessage.setId(null); +// sysMessage.setMessageTitle("test-系统通知" + i); +// sysMessageService.insertSysMessage(sysMessage); +// } +// System.out.println(JSON.toJSONString(sysMessage)); +// } +// +// /** +// * 测试 修改消息 +// */ +// @Test +// @Transactional +// public void testUpdateSysMessage(){ +// SysMessage sysMessage = sysMessageService.getSysMessageById(1L); +// sysMessage.setMessageTitle("测试修改"); +// +// sysMessageService.updateSysMessage(sysMessage); +// } +// +// /** +// * 测试 根据id删除消息 +// */ +// @Test +// @Transactional +// public void testDeleteSysMessageById(){ +// sysMessageService.deleteSysMessageById(1L); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQuerySysMessageByPager(){ +// SysMessage sysMessage = new SysMessage(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = sysMessageService.querySysMessageByPager(sysMessage,pager); +// System.out.println(list); +// } +// +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestOrganizeService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestOrganizeService.java new file mode 100644 index 0000000..11f7e07 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestOrganizeService.java @@ -0,0 +1,118 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.IOrganizeService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.platform.bean.Organize; +//import cn.estsh.i3plus.pojo.platform.bean.Organize; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 岗位信息测试 +// * @Reference : +// * @Author : wei.peng +// * @Date : 2018-10-29 19:02 +// * @Modify : +// **/ +//public class TestOrganizeService extends TestBase { +// +// @Autowired +// private IOrganizeService organizeService; +// +// /** +// * 新增数据 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertOrganize(){ +// for(int i = 0 ; i < 50 ; i++ ){ +// Organize obj = new Organize(); +// obj.setName("Junit Test " + i); +// obj.setOrganizeCode("TEST_JUNIT " + i); +// obj.setParentId(-1L); +// obj = organizeService.insertOrganize(obj); +// System.out.println(JSON.toJSONString(obj)); +// } +// } +// +// /** +// * 根据Key 数据 +// * @return +// */ +// @Test +// @Transactional +// public void testGetOrganizeById(){ +// Organize obj = organizeService.getOrganizeById("1057163974900060160"); +// System.out.println(JSON.toJSONString(obj)); +// } +// +// /** +// * 查询所有数据 +// * +// * @return +// */ +// @Test +// @Transactional +// public void testListOrganize(){ +// List list = organizeService.listOrganize(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 根据岗位信息进行查找 +// * @return +// */ +// @Test +// @Transactional +// public void testFindOrganizeByPager(){ +// Organize obj = new Organize(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(1); +// +// ListPager list = organizeService.queryOrganize(null, pager); +// +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 修改数据 +// */ +// @Test +// @Transactional +// public void testUpdateOrganize(){ +// Organize obj = organizeService.getOrganizeById("1057108586410414080"); +// obj.setName("Junit update Name "); +// organizeService.updateOrganize(obj); +// System.out.println(JSON.toJSONString(obj)); +// } +// +// /** +// * 根据Key 删除数据 +// */ +// @Test +// @Transactional +// public void testDeleteOrganizeById(){ +//// organizeService.deleteOrganizeById(""); +// } +// +// /** +// * 根据id批量删除岗位 +// * @return +// */ +// @Test +// @Transactional +// public void deleteOrganizeByIds(){ +//// organizeService.deleteOrganizeByIds(new String[]{"1057108585445724160","1057108585760296960"}); +// } +// +// +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestPositionService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestPositionService.java new file mode 100644 index 0000000..8626b4f --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestPositionService.java @@ -0,0 +1,117 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.IPositionService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.platform.bean.Position; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.core.annotation.Order; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 岗位信息测试 +// * @Reference : +// * @Author : wei.peng +// * @Date : 2018-10-29 19:02 +// * @Modify : +// **/ +//public class TestPositionService extends TestBase { +// +// @Autowired +// private IPositionService positionService; +// +// /** +// * 新增数据 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertPosition(){ +// for(int i = 0 ; i < 50 ; i++ ){ +// Position position = new Position(); +// position.setName("Junit Test " + i); +// position.setPositionCode("TEST_JUNIT " + i); +// position = positionService.insertPosition(position); +// System.out.println(JSON.toJSONString(position)); +// } +// } +// +// /** +// * 根据Key 数据 +// * @return +// */ +// @Test +// @Transactional +// public void testGetPositionById(){ +// Position pos = positionService.getPositionById("1057108589715525632"); +// System.out.println(JSON.toJSONString(pos)); +// } +// +// /** +// * 查询所有数据 +// * +// * @return +// */ +// @Test +// @Transactional +// public void testListPosition(){ +// List list = positionService.listPosition(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 根据岗位信息进行查找 +// * @return +// */ +// @Test +// @Transactional +// public void testFindPositionByPager(){ +// Position position = new Position(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(1); +// +// ListPager list = positionService.findPositionByPager(null, pager); +// +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 修改数据 +// */ +// @Test +// @Transactional +// public void testUpdatePosition(){ +// Position position = positionService.getPositionById("1057108586410414080"); +// position.setName("Junit update Name "); +// positionService.updatePosition(position); +// System.out.println(JSON.toJSONString(position)); +// } +// +// /** +// * 根据Key 删除数据 +// */ +// @Test +// @Transactional +// public void testDeletePositionById(){ +// positionService.deletePositionById("1057108585240203264"); +// } +// +// /** +// * 根据id批量删除岗位 +// * @return +// */ +// @Test +// @Transactional +// public void deletePositionByIds(){ +// positionService.deletePositionByIds(new String[]{"1057108585445724160","1057108585760296960"}); +// } +// +// +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysConfigService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysConfigService.java new file mode 100644 index 0000000..1ca0c30 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysConfigService.java @@ -0,0 +1,102 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysConfigService; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.platform.bean.SysConfig; +import com.alibaba.fastjson.JSON; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; + +import javax.transaction.Transactional; +import java.util.List; + +/** + * @Description : 系统参数服务测试 + * @Reference : + * @Author : yunhao + * @Date : 2018-10-30 10:49 + * @Modify : + **/ +public class TestSysConfigService extends TestBase { + + @Autowired + private ISysConfigService sysConfigService; + + /** + * 测试 查询所有系统参数 + */ + @Test + @Transactional + public void testListSysConfig() { + List list = sysConfigService.ListSysConfig(); + System.out.println(JSON.toJSONString(list)); + } + + /** + * 测试 根据id查询系统参数 + */ + @Test + @Transactional + public void testGetSysConfigById() { + SysConfig sysConfig = sysConfigService.getSysConfigById(1057110061127700480L); + System.out.println(JSON.toJSONString(sysConfig)); + } + + /** + * 测试 添加系统参数 + */ + @Test + @Transactional + @Rollback(false) + public void testInsertSysConfig() { + SysConfig sysConfig = new SysConfig(); + sysConfig.setName("系统名称"); + sysConfig.setConfigCode("sys_name"); + sysConfig.setConfigType(1); + sysConfig.setConfigValue("IMPP"); + sysConfig.setConfigDescription("系统名称"); + + sysConfigService.insertSysConfig(sysConfig); + System.out.println(JSON.toJSONString(sysConfig)); + + } + + /** + * 测试 修改系统参数 + */ + @Test + @Transactional + public void testUpdateSysConfig(){ + SysConfig sysConfig = sysConfigService.getSysConfigById(1057110613261684736L); + sysConfig.setConfigDescription("测试修改"); + + sysConfigService.updateSysConfig(sysConfig); + } + + /** + * 测试 根据id删除系统参数 + */ + @Test + @Transactional + public void testDeleteSysConfigById(){ + sysConfigService.deleteSysConfigById(1057111616417566720L); + } + + /** + * 测试 复制查询 + */ + @Test + @Transactional + public void testQuerySysConfigByPager(){ + SysConfig sysConfig = new SysConfig(); + + Pager pager = new Pager(); + pager.setPageSize(10); + pager.setCurrentPage(1); + + ListPager list = sysConfigService.querySysConfigByPager(sysConfig,pager); + System.out.println(list); + } +} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysDictionaryService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysDictionaryService.java new file mode 100644 index 0000000..1ec458c --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysDictionaryService.java @@ -0,0 +1,99 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 测试字典服务接口 +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-10-30 18:52 +// * @Modify : +// **/ +//public class TestSysDictionaryService extends TestBase { +// @Autowired +// private ISysDictionaryService sysDictionaryService; +// +// /** +// * 测试 查询所有字典 +// */ +// @Test +// @Transactional +// public void testListSysDictionary() { +// List list = sysDictionaryService.listSysDictionary(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询字典 +// */ +// @Test +// @Transactional +// public void testGetSysDictionaryById() { +// SysDictionary sysDictionary = sysDictionaryService.getSysDictionaryById("1057110061127700480"); +// System.out.println(JSON.toJSONString(sysDictionary)); +// } +// +// /** +// * 测试 添加字典 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertSysDictionary() { +// SysDictionary sysDictionary = new SysDictionary(); +// sysDictionary.setName("字典测试"); +// sysDictionary.setDictionaryCode("dic_test"); +// sysDictionary.setDictionaryValue("TEST"); +// sysDictionary.setDictionaryDescription("字典测试"); +// +// sysDictionaryService.insertSysDictionary(sysDictionary); +// System.out.println(JSON.toJSONString(sysDictionary)); +// } +// +// /** +// * 测试 修改字典 +// */ +// @Test +// @Transactional +// public void testUpdateSysDictionary(){ +// SysDictionary sysDictionary = sysDictionaryService.getSysDictionaryById("1057110613261684736"); +// sysDictionary.setName("测试修改"); +// +// sysDictionaryService.updateSysDictionary(sysDictionary); +// } +// +// /** +// * 测试 根据id删除字典 +// */ +// @Test +// @Transactional +// public void testDeleteSysDictionaryById(){ +// sysDictionaryService.deleteSysDictionaryById("1057111616417566720"); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQuerySysDictionaryByPager(){ +// SysDictionary sysDictionary = new SysDictionary(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = sysDictionaryService.querySysDictionaryByPager(sysDictionary,pager); +// System.out.println(list); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java new file mode 100644 index 0000000..955f1a5 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysFileService.java @@ -0,0 +1,107 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.platform.bean.SysFile; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 测试 文件资源服务接口 +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-10-31 15:30 +// * @Modify : +// **/ +//public class TestSysFileService extends TestBase { +// +// @Autowired +// public ISysFileService sysFileService; +// +// /** +// * 测试 查询所有文件资源 +// */ +// @Test +// @Transactional +// public void testListSysFile() { +// List list = sysFileService.listSysFile(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询文件资源 +// */ +// @Test +// @Transactional +// public void testGetSysFileById() { +// SysFile sysFile = sysFileService.getSysFileById(1057110061127700480L); +// System.out.println(JSON.toJSONString(sysFile)); +// } +// +// /** +// * 测试 添加文件资源 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertSysFile() { +// SysFile sysFile = new SysFile(); +// sysFile.setName("文件doc"); +// sysFile.setFileTypeId(1058251784058966016L); +// sysFile.setFileTypeName("doc"); +// sysFile.setDownloads(999); +// sysFile.setFileSize(1024); +// sysFile.setCreateUser("中国移动"); +// sysFile.setCreateDatetime("2018-01-01 00:00:00"); +// for (int i = 0; i < 50; i++) { +// sysFile.setId(null); +// sysFile.setName("文件"+ i +".doc"); +// sysFile.setCreateDatetime("2018-01-01 " + (i % 10) + "0:00:00"); +// sysFileService.insertSysFile(sysFile); +// } +// System.out.println(JSON.toJSONString(sysFile)); +// } +// +// /** +// * 测试 修改文件资源 +// */ +// @Test +// @Transactional +// public void testUpdateSysFile(){ +// SysFile sysFile = sysFileService.getSysFileById(1057110613261684736L); +// sysFile.setName("测试修改"); +// +// sysFileService.updateSysFile(sysFile); +// } +// +// /** +// * 测试 根据id删除文件资源 +// */ +// @Test +// @Transactional +// public void testDeleteSysFileById(){ +// sysFileService.deleteSysFileById("1057111616417566720"); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQuerySysFileByPager(){ +// SysFile sysFile = new SysFile(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = sysFileService.querySysFileByPager(sysFile,pager); +// System.out.println(list); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysMenuService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysMenuService.java new file mode 100644 index 0000000..e056eac --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestSysMenuService.java @@ -0,0 +1,104 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; +//import cn.estsh.i3plus.pojo.platform.bean.Organize; +//import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : +// * @Reference : +// * @Author : wei.peng +// * @Date : 2018-11-01 11:58 +// * @Modify : +// **/ +//public class TestSysMenuService extends TestBase { +// +// @Autowired +// private ISysMenuService sysMenuService; +// +// +// +// +// /** +// * 修改数据 +// */ +// @Test +// public void testUpdateSysMenu() { +// +// } +// +// /** +// * 修改权限状态 +// */ +// @Test +// public void testUpdateSysMenuStatus() { +// +// } +// +// /** +// * 批量修改状态 +// */ +// @Test +// public void testUpdateSysMenuStatusByIds() { +// +// } +// +// /** +// * 根据Key 删除数据 +// */ +// @Test +// public void testDeleteSysMenuById() { +// +// } +// +// /** +// * 新增数据 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertSysMenu() { +// for(int i = 0 ; i < 50 ; i++ ){ +// SysMenu obj = new SysMenu(); +// obj.setName("Junit Test " + i); +// obj.setMenuCode("TEST_JUNIT " + i); +// obj.setParentId(-1L); +// obj = sysMenuService.insertSysMenu(obj); +// System.out.println(JSON.toJSONString(obj)); +// } +// } +// +// /** +// * 查询所有数据 +// */ +// @Test +// public void testFindSysMenuAll() { +// List list = sysMenuService.findSysMenuAll(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 根据id 数据 +// */ +// @Test +// public void testGetSysMenuById() { +// SysMenu menu = sysMenuService.getSysMenuById("1057844135052054528"); +// System.out.println(JSON.toJSONString(menu)); +// } +// +// /** +// * 复杂查询 +// */ +// @Test +// public void testQuerySysMenu() { +// +// } +// +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeExpressionService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeExpressionService.java new file mode 100644 index 0000000..69f5336 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeExpressionService.java @@ -0,0 +1,104 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.ITaskTimeExpressionService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +//import cn.estsh.i3plus.pojo.platform.bean.TaskTimeExpression; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 测试 时间表达式 +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-10-31 15:30 +// * @Modify : +// **/ +//public class TestTaskTimeExpressionService extends TestBase { +// +// @Autowired +// ITaskTimeExpressionService taskTimeExpressionService; +// +// /** +// * 测试 查询所有时间表达式 +// */ +// @Test +// @Transactional +// public void testListTaskTimeExpression() { +// List list = taskTimeExpressionService.listTaskTimeExpression(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询时间表达式 +// */ +// @Test +// @Transactional +// public void testGetTaskTimeExpressionById() { +// TaskTimeExpression taskTimeExpression = taskTimeExpressionService.getTaskTimeExpressionById("1057110061127700480"); +// System.out.println(JSON.toJSONString(taskTimeExpression)); +// } +// +// /** +// * 测试 添加时间表达式 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertTaskTimeExpression() { +// TaskTimeExpression taskTimeExpression = new TaskTimeExpression(); +// taskTimeExpression.setName("表达式"); +// taskTimeExpression.setExpressionContent("0000000"); +// taskTimeExpression.setExpressionDescription("描述"); +// +// for (int i = 0; i < 50; i++) { +// taskTimeExpression.setId(null); +// taskTimeExpression.setName("表达式"+i); +// taskTimeExpressionService.insertTaskTimeExpression(taskTimeExpression); +// } +// System.out.println(JSON.toJSONString(taskTimeExpression)); +// } +// +// /** +// * 测试 修改时间表达式 +// */ +// @Test +// @Transactional +// public void testUpdateTaskTimeExpression(){ +// TaskTimeExpression taskTimeExpression = taskTimeExpressionService.getTaskTimeExpressionById("1057110613261684736"); +// taskTimeExpression.setName("测试修改"); +// +// taskTimeExpressionService.updateTaskTimeExpression(taskTimeExpression); +// } +// +// /** +// * 测试 根据id删除时间表达式 +// */ +// @Test +// @Transactional +// public void testDeleteTaskTimeExpressionById(){ +// taskTimeExpressionService.deleteTaskTimeExpressionById("1057111616417566720"); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQueryTaskTimeExpressionByPager(){ +// TaskTimeExpression taskTimeExpression = new TaskTimeExpression(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = taskTimeExpressionService.queryTaskTimeExpressionByPager(taskTimeExpression,pager); +// System.out.println(list); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java new file mode 100644 index 0000000..d9924f0 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestTaskTimeService.java @@ -0,0 +1,109 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.ITaskTimeService; +//import cn.estsh.i3plus.core.api.iservice.busi.ITaskTimeService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +//import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +//import cn.estsh.i3plus.pojo.platform.bean.TaskTime; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-11-03 00:09 +// * @Modify : +// **/ +//public class TestTaskTimeService extends TestBase { +// +// @Autowired +// ITaskTimeService taskTimeService; +// +// /** +// * 测试 查询所有硬件 +// */ +// @Test +// @Transactional +// public void testListTaskTime() { +// List list = taskTimeService.listTaskTime(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询硬件 +// */ +// @Test +// @Transactional +// public void testGetTaskTimeById() { +// TaskTime taskTime = taskTimeService.getTaskTimeById("1057110061127700480"); +// System.out.println(JSON.toJSONString(taskTime)); +// } +// +// /** +// * 测试 添加硬件 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertTaskTime() { +// TaskTime taskTime = new TaskTime(); +// taskTime.setName("时间表达式"); +// taskTime.setTimeExpressionId(1L); +// taskTime.setTaskStartDateTimeRdd("2018-01-01 00:00:00"); +// taskTime.setTaskEndDateTimeRdd("2018-12-31 00:00:00"); +// taskTime.setTaskTypeId(ImppEnumUtil.TASK_METHOD_TYPE.TYPE_GROUP.getValue()); +// taskTime.setTaskStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); +// +// for (int i = 0; i < 50; i++) { +// taskTime.setId(null); +// taskTime.setName("时间表达式"+i); +// taskTimeService.insertTaskTime(taskTime,null); +// } +// System.out.println(JSON.toJSONString(taskTime)); +// } +// +// /** +// * 测试 修改硬件 +// */ +// @Test +// @Transactional +// public void testUpdateTaskTime(){ +// TaskTime taskTime = taskTimeService.getTaskTimeById("1057110613261684736"); +// taskTime.setName("测试修改"); +// +// taskTimeService.updateTaskTime(taskTime,null); +// } +// +// /** +// * 测试 根据id删除硬件 +// */ +// @Test +// @Transactional +// public void testDeleteTaskTimeById(){ +// taskTimeService.deleteTaskTimeById("1058406771644829696"); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQueryTaskTimeByPager(){ +// TaskTime taskTime = new TaskTime(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = taskTimeService.queryTaskTimeByPager(taskTime,pager); +// System.out.println(list); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java new file mode 100644 index 0000000..a1a6bfc --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolService.java @@ -0,0 +1,109 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.IToolService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +//import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +//import cn.estsh.i3plus.pojo.platform.bean.Tool; +//import com.alibaba.fastjson.JSON; +//import org.apache.commons.lang3.EnumUtils; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 测试 硬件服务接口 +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-10-31 15:30 +// * @Modify : +// **/ +//public class TestToolService extends TestBase { +// +// @Autowired +// IToolService toolService; +// +// /** +// * 测试 查询所有硬件 +// */ +// @Test +// @Transactional +// public void testListTool() { +// List list = toolService.listTool(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询硬件 +// */ +// @Test +// @Transactional +// public void testGetToolById() { +// Tool tool = toolService.getToolById("1057110061127700480"); +// System.out.println(JSON.toJSONString(tool)); +// } +// +// /** +// * 测试 添加硬件 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertTool() { +// Tool tool = new Tool(); +// tool.setName("扫描枪"); +// tool.setToolTypeId(1057261374348070912L); +// tool.setRedToolTypeName("扫描枪22"); +// tool.setToolConnTypeId(1); +// tool.setToolDataTypeId(1); +// tool.setToolStatusId(CommonEnumUtil.DATA_STATUS.ENABLE.getValue()); +// +// for (int i = 0; i < 50; i++) { +// tool.setId(null); +// tool.setName("扫描枪"+i); +// toolService.insertTool(tool); +// } +// System.out.println(JSON.toJSONString(tool)); +// } +// +// /** +// * 测试 修改硬件 +// */ +// @Test +// @Transactional +// public void testUpdateTool(){ +// Tool tool = toolService.getToolById("1057110613261684736"); +// tool.setName("测试修改"); +// +// toolService.updateTool(tool); +// } +// +// /** +// * 测试 根据id删除硬件 +// */ +// @Test +// @Transactional +// public void testDeleteToolById(){ +// toolService.deleteToolById("1057111616417566720"); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQueryToolByPager(){ +// Tool tool = new Tool(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = toolService.queryToolByPager(tool,pager); +// System.out.println(list); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolTypeService.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolTypeService.java new file mode 100644 index 0000000..8e09a4b --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/TestToolTypeService.java @@ -0,0 +1,101 @@ +//package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +// +//import cn.estsh.i3plus.core.api.iservice.busi.IToolTypeService; +//import cn.estsh.i3plus.core.api.iservice.busi.IToolTypeService; +//import cn.estsh.i3plus.pojo.base.bean.ListPager; +//import cn.estsh.i3plus.pojo.base.common.Pager; +//import cn.estsh.i3plus.pojo.platform.bean.ToolType; +//import com.alibaba.fastjson.JSON; +//import org.junit.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.test.annotation.Rollback; +// +//import javax.transaction.Transactional; +//import java.util.List; +// +///** +// * @Description : 测试 硬件类型服务接口 +// * @Reference : +// * @Author : yunhao +// * @Date : 2018-10-30 20:36 +// * @Modify : +// **/ +//public class TestToolTypeService extends TestBase { +// @Autowired +// private IToolTypeService toolTypeService; +// +// /** +// * 测试 查询所有硬件类型 +// */ +// @Test +// @Transactional +// public void testListToolType() { +// List list = toolTypeService.listToolType(); +// System.out.println(JSON.toJSONString(list)); +// } +// +// /** +// * 测试 根据id查询硬件类型 +// */ +// @Test +// @Transactional +// public void testGetToolTypeById() { +// ToolType toolType = toolTypeService.getToolTypeById("1057110061127700480"); +// System.out.println(JSON.toJSONString(toolType)); +// } +// +// /** +// * 测试 添加硬件类型 +// */ +// @Test +// @Transactional +// @Rollback(false) +// public void testInsertToolType() { +// ToolType toolType = new ToolType(); +// toolType.setName("扫描枪"); +// +// for (int i = 0; i < 50; i++) { +// toolType.setId(null); +// toolType.setName("扫描枪"+i); +// toolTypeService.insertToolType(toolType); +// } +// System.out.println(JSON.toJSONString(toolType)); +// } +// +// /** +// * 测试 修改硬件类型 +// */ +// @Test +// @Transactional +// public void testUpdateToolType(){ +// ToolType toolType = toolTypeService.getToolTypeById("1057110613261684736"); +// toolType.setName("测试修改"); +// +// toolTypeService.updateToolType(toolType); +// } +// +// /** +// * 测试 根据id删除硬件类型 +// */ +// @Test +// @Transactional +// public void testDeleteToolTypeById(){ +// toolTypeService.deleteToolTypeById("1057111616417566720"); +// } +// +// /** +// * 测试 复杂查询 +// */ +// @Test +// @Transactional +// public void testQueryToolTypeByPager(){ +// ToolType toolType = new ToolType(); +// +// Pager pager = new Pager(); +// pager.setPageSize(10); +// pager.setCurrentPage(5); +// +// ListPager list = toolTypeService.queryToolTypeByPager(toolType,pager); +// System.out.println(list); +// } +//} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestExcelUtil.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestExcelUtil.java new file mode 100644 index 0000000..46775b6 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestExcelUtil.java @@ -0,0 +1,41 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.TestBase; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysTool; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : excel导入导出测试 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 19:44 + * @Modify: + **/ +public class TestExcelUtil extends TestBase { + + + @Test + public void TestExportData(){ + + } + + @Test + public void importData(){ + try { + List sy = ExcelUtil.importData("testOut.xls", new FileInputStream("E://testOut.xls"), SysTool.class); + System.out.println(sy); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java new file mode 100644 index 0000000..a201dda --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestMailUtil.java @@ -0,0 +1,29 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.TestBase; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 19:44 + * @Modify: + **/ +public class TestMailUtil extends TestBase { + + @Autowired + MailUtil mailUtil; + + @Test + public void TestSendMail(){ + mailUtil.setTo("yunhao.wang@estsh.com"); + mailUtil.setSubject("中文"); + mailUtil.setContentType(ImppEnumUtil.MESSAGE_TYPE_CONTENT.HTML.getDescription()); + mailUtil.setBody("内容"); + mailUtil.send(); + + } +} diff --git a/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestOrderNoMakeUtil.java b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestOrderNoMakeUtil.java new file mode 100644 index 0000000..e592865 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/test/java/cn/estsh/i3plus/core/apiservice/util/TestOrderNoMakeUtil.java @@ -0,0 +1,33 @@ +package cn.estsh.i3plus.core.apiservice.util; + +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.TestBase; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import org.junit.Test; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-21 19:45 + * @Modify: + **/ +public class TestOrderNoMakeUtil extends TestBase { + + @Test + public void TestMakeOrderNo() { + SysOrderNoRule sysOrderNoRule = new SysOrderNoRule(); + sysOrderNoRule.setName("一号单据"); + sysOrderNoRule.setOrderNoRule("GG-{yyyy}{MM}{dd}{serialNo}"); + sysOrderNoRule.setSerialNoSeed(1L); + sysOrderNoRule.setSerialNoIncrement(1L); + sysOrderNoRule.setSerialNoLength(4L); + sysOrderNoRule.setSerialNo(9999L); + sysOrderNoRule.setIsCycle(1); + + System.out.println(OrderNoMakeUtil.next(sysOrderNoRule)); + +// String d= MessageFormat.format("%0{0}d", 3); +// System.out.println(d); + } + +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0a79893 --- /dev/null +++ b/pom.xml @@ -0,0 +1,288 @@ + + + 4.0.0 + + i3plus.core + i3plus-core + pom + 1.0-DEV-SNAPSHOT + + modules/i3plus-core-api + modules/i3plus-core-apiservice + + + + org.springframework.boot + spring-boot-starter-parent + 2.0.3.RELEASE + + + + + + i3core + UTF-8 + UTF-8 + 1.8 + Finchley.RELEASE + INFO + ../logs/${project.name} + ../logs/${project.name}-error + ../logs/${project.name}-controller + 2.9.1 + 2.6 + 2.1 + 2.19.1 + 2.5.3 + 1.9.5 + true + UTF-8 + 1.8 + + + + + + + + + + impp.framework + impp-framework-boot + ${project.version} + + + + + i3plus.core + i3plus-core-icloud + ${project.version} + + + + i3plus.icloud + i3plus-icloud-wms + ${project.version} + + + + + i3plus.pojo + i3plus-pojo-model + ${project.version} + + + + + i3plus.core + i3plus-core-api + ${project.version} + + + + i3plus.platform + i3plus-platform-common + ${project.version} + + + i3plus.pojo + i3plus-pojo-platform + ${project.version} + + + i3plus.pojo + i3plus-pojo-mes + ${project.version} + + + i3plus.pojo + i3plus-pojo-base + ${project.version} + + + + i3plus.pojo + i3plus-pojo-mes + ${project.version} + + + + + i3plus.icloud + i3plus-icloud-core + ${project.version} + + + + + mysql + mysql-connector-java + 5.1.39 + + + + + org.apache.commons + commons-lang3 + 3.8.1 + + + + + org.apache.shiro + shiro-core + 1.4.0 + + + org.apache.shiro + shiro-web + 1.4.0 + + + org.apache.shiro + shiro-spring + 1.4.0 + + + org.apache.shiro + shiro-ehcache + 1.4.0 + + + + + com.alibaba + fastjson + 1.2.8 + + + + + net.sf.ehcache + ehcache-core + 2.6.11 + + + + + org.springframework.boot + spring-boot-starter-test + 2.0.3.RELEASE + test + + + spring-boot-starter-logging + org.springframework.boot + + + + + junit + junit + 4.12 + test + + + + javax.mail + mail + 1.4.7 + + + + org.apache.poi + poi + RELEASE + + + org.apache.poi + poi-ooxml + RELEASE + + + + org.jdom + jdom2 + 2.0.6 + + + jaxen + jaxen + 1.1.6 + + + + + + + + nexus + http://mvn.estsh.com/repository/maven-public/ + + + + + + + maven-releases + Nexus ReleaseRepository + http://mvn.estsh.com/repository/maven-releases/ + + + maven-snapshots + Nexus SnapshotRepository + http://mvn.estsh.com/repository/maven-snapshots/ + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven-jar-plugin.version} + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${app.jdk.version} + ${app.jdk.version} + ${app.charset} + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + ${skipTests} + + + + org.apache.maven.plugins + maven-release-plugin + ${maven-release-plugin.version} + + prod + true + http://git.estsh.com/i3-IMPP/i3plus-core.git + v@{project.version} + + + + org.apache.maven.plugins + maven-scm-plugin + ${maven-scm-plugin.version} + + developerConnection + + + + + + \ No newline at end of file From 8938b7086644e0231018d6393e1b79813c46585c Mon Sep 17 00:00:00 2001 From: alwaysfrin <39822157+alwaysfrin@users.noreply.github.com> Date: Mon, 10 Dec 2018 18:11:17 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-core-api/i3plus-core-api.iml | 66 +++++- .../i3plus-core-apiservice.iml | 235 +++++++++++++++++++-- 2 files changed, 274 insertions(+), 27 deletions(-) diff --git a/modules/i3plus-core-api/i3plus-core-api.iml b/modules/i3plus-core-api/i3plus-core-api.iml index 916fbf3..b27d1a0 100644 --- a/modules/i3plus-core-api/i3plus-core-api.iml +++ b/modules/i3plus-core-api/i3plus-core-api.iml @@ -25,12 +25,70 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml b/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml index 97b71be..6628966 100644 --- a/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml +++ b/modules/i3plus-core-apiservice/i3plus-core-apiservice.iml @@ -25,19 +25,214 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -57,34 +252,28 @@ + - - - - - - - - - + + + - - + - - + +