Browse Source

添加了传感器

wuweihao 5 years ago
parent
commit
c30836c057
31 changed files with 622 additions and 409 deletions
  1. 0 6
      .idea/compiler.xml
  2. 162 327
      .idea/workspace.xml
  3. 4 1
      README.md
  4. 11 1
      pom.xml
  5. 11 0
      wsm-admin-dao/src/main/java/com/wsm/admin/dao/IDeviceEventDao.java
  6. 17 0
      wsm-admin-dao/src/main/java/com/wsm/admin/model/Device.java
  7. 29 1
      wsm-admin-dao/src/main/java/com/wsm/admin/model/DeviceEvent.java
  8. 13 0
      wsm-admin-service/src/main/java/com/wsm/admin/service/IDeviceEventService.java
  9. 13 0
      wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceEventServiceImpl.java
  10. 0 1
      wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceServiceImpl.java
  11. 1 1
      wsm-admin-service/src/main/java/com/wsm/admin/util/ResourceTreeUtil.java
  12. 7 0
      wsm-admin-web/pom.xml
  13. 20 1
      wsm-admin-web/src/main/java/com/wsm/admin/api/ApiDeviceController.java
  14. 0 2
      wsm-admin-web/src/main/java/com/wsm/admin/api/DataDictionaryController.java
  15. 20 6
      wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceController.java
  16. 47 0
      wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceEventController.java
  17. 7 0
      wsm-admin-web/src/main/java/com/wsm/admin/api/IndexController.java
  18. 88 34
      wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java
  19. 21 11
      wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java
  20. 88 0
      wsm-admin-web/src/main/java/com/wsm/admin/init/TaskSchedule.java
  21. 3 1
      wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java
  22. 8 1
      wsm-admin-web/src/main/java/com/wsm/admin/shiro/ShiroConfig.java
  23. 0 1
      wsm-admin-web/src/main/java/com/wsm/admin/thread/TaskExecutePool.java
  24. 2 4
      wsm-application/src/main/java/com/wsm/Application.java
  25. 10 0
      wsm-application/src/main/resources/application-dev.properties
  26. 14 0
      wsm-application/src/main/resources/application-pro.properties
  27. 4 6
      wsm-application/src/main/resources/application.properties
  28. 0 4
      wsm-application/src/main/resources/logback.xml
  29. 5 0
      wsm-common/src/main/java/com/wsm/common/config/WebSocketConfig.java
  30. 2 0
      wsm-common/src/main/java/com/wsm/common/model/BaseModel.java
  31. 15 0
      wsm-common/src/main/java/com/wsm/common/util/DateTimeUtils.java

+ 0 - 6
.idea/compiler.xml

@@ -15,15 +15,9 @@
     </annotationProcessing>
     <bytecodeTargetLevel>
       <module name="fdage-szggkfzlg" target="1.8" />
-      <module name="wsm-admin-dao" target="1.8" />
-      <module name="wsm-admin-service" target="1.8" />
-      <module name="wsm-admin-web" target="1.8" />
-      <module name="wsm-application" target="1.8" />
-      <module name="wsm-base" target="1.8" />
       <module name="wsm-collection-dao" target="1.8" />
       <module name="wsm-collection-service" target="1.8" />
       <module name="wsm-collection-web" target="1.8" />
-      <module name="wsm-common" target="1.8" />
       <module name="wsm-exhibition-dao" target="1.8" />
       <module name="wsm-exhibition-service" target="1.8" />
       <module name="wsm-exhibition-web" target="1.8" />

+ 162 - 327
.idea/workspace.xml

@@ -2,177 +2,75 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="fb6ddcd0-df98-4d65-a159-b2472538162d" name="Default" comment="">
-      <change afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceEventController.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/wsm-application/src/main/resources/templates/admin/deviceEvent/form.html" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/wsm-application/src/main/resources/templates/admin/deviceEvent/list.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/.name" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_admin_web_jar.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_admin_web_war.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_admin_web_war_exploded.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_application_war.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_application_war_exploded.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_base_war.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_base_war_exploded.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_member_dao_war.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_member_dao_war_exploded.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_root_war.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/artifacts/wsm_root_war_exploded.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__antlr_antlr_2_7_7.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_alibaba_druid_1_0_15.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_alibaba_fastjson_1_2_15.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_github_penggle_kaptcha_2_3_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_github_theborakompanioni_thymeleaf_extras_shiro_1_0_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_goldmansachs_gs_collections_5_1_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_goldmansachs_gs_collections_api_5_1_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_wsm_wsm_member_web_1_0_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__com_wsm_wsm_operation_service_1_0_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_9_3.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_lettuce_lettuce_core_5_0_2_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_buffer_4_1_21_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_codec_4_1_21_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_common_4_1_21_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_handler_4_1_21_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_resolver_4_1_21_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_transport_4_1_21_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_projectreactor_reactor_bus_2_0_8_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_projectreactor_reactor_core_2_0_8_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_projectreactor_reactor_stream_2_0_8_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_projectreactor_spring_reactor_spring_context_2_0_7_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_projectreactor_spring_reactor_spring_core_2_0_7_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__io_projectreactor_spring_reactor_spring_webmvc_2_0_7_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__joda_time_joda_time_2_9_9.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__junit_junit_4_12.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_46.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__net_sourceforge_nekohtml_nekohtml_1_9_22.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__nz_net_ultraq_thymeleaf_thymeleaf_layout_dialect_1_4_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__ognl_ognl_3_0_8.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_shiro_shiro_core_1_2_4.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_shiro_shiro_spring_1_2_4.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_shiro_shiro_web_1_2_4.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_29.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_29.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_29.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_29.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_tomcat_jdbc_8_5_29.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_tomcat_juli_8_5_29.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_groovy_groovy_2_4_15.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hibernate_hibernate_core_5_0_12_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_5_0_12_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_jboss_jandex_2_0_0_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_mybatis_mybatis_3_4_6.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_mybatis_mybatis_spring_1_3_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_1_3_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_1_3_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_0_0_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_websocket_2_1_3_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_12_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_data_spring_data_commons_1_13_11_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_1_11_11_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_1_2_11_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_data_spring_data_redis_1_8_11_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_aop_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_aspects_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_beans_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_context_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_context_support_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_core_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_expression_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_jdbc_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_messaging_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_orm_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_oxm_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_test_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_tx_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_web_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_websocket_4_3_16_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_thymeleaf_thymeleaf_2_1_6_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring4_2_1_6_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_unbescape_unbescape_1_1_0_RELEASE.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_base_1_0_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_core_1_0_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_extra_1_0_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_spring_1_0_1.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_spring_boot_autoconfigure_2_0_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_spring_boot_starter_2_0_2.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__tk_mybatis_mapper_weekend_1_1_3.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__xerces_xercesImpl_2_11_0.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/libraries/netpay.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/uiDesigner.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/TaskSchedule.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/wsm-application/src/main/resources/application-dev.properties" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/wsm-application/src/main/resources/application-pro.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/wsm-admin-dao.iml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/wsm-admin-service/wsm-admin-service.iml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IDeviceEventDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IDeviceEventDao.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IResourceDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IResourceDao.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IRoleDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IRoleDao.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IUserDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/dao/IUserDao.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/mapper/ResourceMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/mapper/ResourceMapper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/mapper/RoleMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/mapper/RoleMapper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/mapper/UserMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/mapper/UserMapper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/Device.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/Device.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/DeviceEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/DeviceEvent.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/Resource.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/Resource.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/Role.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/Role.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/User.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-dao/src/main/java/com/wsm/admin/model/User.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/dto/ResourceTree.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/dto/ResourceTree.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IDeviceEventService.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IDeviceEventService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IResourceService.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IResourceService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IRoleService.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IRoleService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IUserService.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/IUserService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceEventServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceEventServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/ResourceServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/ResourceServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/RoleServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/RoleServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/UserServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/UserServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/util/ResourceTreeUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/util/ResourceTreeUtil.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/ApiDeviceController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/ApiDeviceController.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DataDictionaryController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DataDictionaryController.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceEventController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceEventController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/IndexController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/IndexController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/KaptchaController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/KaptchaController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/ResourceController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/ResourceController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/RoleController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/RoleController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/UserController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/UserController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/shiro/MyShiroRealm.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/shiro/MyShiroRealm.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/shiro/ShiroConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/shiro/ShiroConfig.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wsm-admin-web/wsm-admin-web.iml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/thread/TaskExecutePool.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/thread/TaskExecutePool.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-application/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-application/pom.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-application/src/main/java/com/wsm/Application.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-application/src/main/java/com/wsm/Application.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-application/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-application/src/main/resources/application.properties" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-application/src/main/resources/logback.xml" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-application/src/main/resources/logback.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wsm-application/wsm-application.iml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/wsm-base.iml" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-common/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/aop/SystemControllerLog.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/aop/SystemControllerLog.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/aop/SystemServiceLog.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/aop/SystemServiceLog.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/api/BaseController.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/api/BaseController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/KaptchaConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/KaptchaConfig.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/WebMvcConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/WebMvcConfig.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/wsm-common/wsm-common.iml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/WebSocketConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/WebSocketConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/dao/IBaseDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/dao/IBaseDao.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/interceptor/CommonInterceptor.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/interceptor/CommonInterceptor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/model/BaseModel.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/model/BaseModel.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/redis/RedisConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/redis/RedisConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/service/IBaseService.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/service/IBaseService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/service/impl/BaseServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/service/impl/BaseServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/shiro/ShiroManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/shiro/ShiroManager.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/AjaxJson.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/AjaxJson.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/DateEditor.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/DateEditor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/DateTimeUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/DateTimeUtils.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/PasswordUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/util/PasswordUtils.java" afterDir="false" />
     </list>
     <ignored path="$PROJECT_DIR$/wsm-admin-web/target/" />
     <ignored path="$PROJECT_DIR$/wsm-common/target/" />
@@ -190,74 +88,58 @@
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
   <component name="FileEditorManager">
-    <leaf>
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
       <file leaf-file-name="LiveController.java" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/LiveController.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="229">
+            <state relative-caret-position="1292">
               <caret line="97" column="43" selection-start-line="97" selection-start-column="38" selection-end-line="97" selection-end-column="43" />
-              <folding>
-                <element signature="e#1099#1112#1" expanded="true" />
-              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="IndexController.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/IndexController.java">
+      <file leaf-file-name="RoleController.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/RoleController.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="105">
-              <caret line="46" column="20" selection-start-line="46" selection-start-column="20" selection-end-line="46" selection-end-column="20" />
+            <state relative-caret-position="102">
+              <caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="KaptchaController.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/KaptchaController.java">
+      <file leaf-file-name="StartupUdpEvent.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="384">
-              <caret line="37" column="7" selection-start-line="37" selection-start-column="7" selection-end-line="37" selection-end-column="7" />
+            <state relative-caret-position="527">
+              <caret line="37" column="53" selection-start-line="37" selection-start-column="53" selection-end-line="37" selection-end-column="53" />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="FileController.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/FileController.java">
+      <file leaf-file-name="application.properties" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application.properties">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="85">
-              <caret line="19" column="13" selection-start-line="19" selection-start-column="13" selection-end-line="19" selection-end-column="13" />
+            <state relative-caret-position="289">
+              <caret line="20" column="13" selection-start-line="20" selection-start-column="13" selection-end-line="20" selection-end-column="13" />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="RoleController.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/RoleController.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="102">
-              <caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" />
-            </state>
-          </provider>
+      <file leaf-file-name="application-pro.properties" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application-pro.properties">
+          <provider selected="true" editor-type-id="text-editor" />
         </entry>
       </file>
-      <file leaf-file-name="StartupUdpEvent.java" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="289">
-              <caret line="17" lean-forward="true" selection-start-line="17" selection-end-line="17" />
-              <folding>
-                <element signature="imports" expanded="true" />
-                <element signature="e#1199#1200#0" expanded="true" />
-                <element signature="e#1272#1273#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
+      <file leaf-file-name="application-dev.properties" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application-dev.properties">
+          <provider selected="true" editor-type-id="text-editor" />
         </entry>
       </file>
       <file leaf-file-name="UdpServerHandler.java" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="17">
-              <caret line="35" column="13" selection-start-line="35" selection-start-column="13" selection-end-line="35" selection-end-column="13" />
+            <state relative-caret-position="119">
+              <caret line="35" column="3" selection-start-line="35" selection-start-column="3" selection-end-line="35" selection-end-column="3" />
             </state>
           </provider>
         </entry>
@@ -274,8 +156,8 @@
       <file leaf-file-name="TcpServer.java" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-68">
-              <caret line="31" column="13" selection-start-line="31" selection-start-column="13" selection-end-line="31" selection-end-column="13" />
+            <state relative-caret-position="68">
+              <caret line="31" column="10" selection-start-line="31" selection-start-column="10" selection-end-line="31" selection-end-column="10" />
             </state>
           </provider>
         </entry>
@@ -345,6 +227,22 @@
       </MavenImportingSettings>
     </option>
   </component>
+  <component name="MavenProjectNavigator">
+    <treeState>
+      <expand>
+        <path>
+          <item name="" type="16c1761:MavenProjectsStructure$RootNode" />
+          <item name="wsm-base" type="9519ce18:MavenProjectsStructure$ProjectNode" />
+        </path>
+        <path>
+          <item name="" type="16c1761:MavenProjectsStructure$RootNode" />
+          <item name="wsm-base" type="9519ce18:MavenProjectsStructure$ProjectNode" />
+          <item name="Lifecycle" type="58874e2:MavenProjectsStructure$LifecycleNode" />
+        </path>
+      </expand>
+      <select />
+    </treeState>
+  </component>
   <component name="NodePackageJsonFileManager">
     <packageJsonPaths />
   </component>
@@ -360,6 +258,9 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="PackagesPane" />
+      <pane id="Scope" />
+      <pane id="AndroidView" />
       <pane id="ProjectPane">
         <subPane>
           <expand>
@@ -438,16 +339,6 @@
               <item name="main" type="462c0819:PsiDirectoryNode" />
               <item name="java" type="462c0819:PsiDirectoryNode" />
               <item name="admin" type="462c0819:PsiDirectoryNode" />
-              <item name="config" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="jm-smart-city" type="b2602c69:ProjectViewProjectNode" />
-              <item name="jm-smart-city" type="462c0819:PsiDirectoryNode" />
-              <item name="wsm-admin-web" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="java" type="462c0819:PsiDirectoryNode" />
-              <item name="admin" type="462c0819:PsiDirectoryNode" />
               <item name="handle" type="462c0819:PsiDirectoryNode" />
             </path>
             <path>
@@ -641,9 +532,6 @@
           <select />
         </subPane>
       </pane>
-      <pane id="Scope" />
-      <pane id="AndroidView" />
-      <pane id="PackagesPane" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -739,50 +627,51 @@
       <option name="presentableId" value="Default" />
       <updated>1573182301041</updated>
       <workItem from="1573182306625" duration="7204000" />
+      <workItem from="1576231069731" duration="247000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="7204000" />
+    <option name="totallyTimeSpent" value="7451000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="5" width="1936" height="1049" extended-state="0" />
     <layout>
-      <window_info anchor="right" id="Palette" />
-      <window_info anchor="bottom" id="Event Log" side_tool="true" />
-      <window_info anchor="right" id="Maven Projects" />
-      <window_info anchor="bottom" id="Database Changes" show_stripe_button="false" />
-      <window_info id="Capture Tool" />
-      <window_info id="Designer" />
-      <window_info anchor="bottom" id="Statistic" />
-      <window_info anchor="bottom" id="Docker" show_stripe_button="false" />
-      <window_info anchor="bottom" id="Tail" />
-      <window_info anchor="right" id="Database" />
+      <window_info anchor="right" id="Palette" order="3" />
+      <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" />
+      <window_info anchor="right" id="Maven Projects" order="3" visible="true" weight="0.32995737" />
+      <window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" />
+      <window_info id="Capture Tool" order="2" />
+      <window_info id="Designer" order="2" />
+      <window_info anchor="bottom" id="Statistic" order="7" />
+      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Tail" order="7" />
+      <window_info anchor="right" id="Database" order="3" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
-      <window_info id="UI Designer" />
-      <window_info anchor="bottom" id="Debug" order="3" visible="true" weight="0.4" />
+      <window_info id="UI Designer" order="2" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
       <window_info anchor="bottom" id="TODO" order="6" />
-      <window_info anchor="bottom" id="Messages" weight="0.32857144" />
-      <window_info anchor="right" id="Palette&#9;" />
-      <window_info id="Image Layers" />
-      <window_info anchor="bottom" id="Java Enterprise" />
-      <window_info anchor="right" id="Capture Analysis" />
-      <window_info anchor="bottom" id="Run" order="2" weight="0.26593408" />
-      <window_info anchor="bottom" id="Version Control" weight="0.3293348" />
-      <window_info anchor="bottom" id="Spring" />
-      <window_info anchor="bottom" id="Terminal" />
-      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25" />
-      <window_info anchor="right" id="Bean Validation" />
-      <window_info id="Web" side_tool="true" />
-      <window_info anchor="bottom" id="Find" order="1" />
-      <window_info anchor="right" id="Theme Preview" />
-      <window_info id="Favorites" side_tool="true" />
-      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="bottom" id="Messages" order="7" weight="0.32857144" />
+      <window_info anchor="right" id="Palette&#9;" order="3" />
+      <window_info id="Image Layers" order="2" />
+      <window_info anchor="bottom" id="Java Enterprise" order="7" />
+      <window_info anchor="right" id="Capture Analysis" order="3" />
+      <window_info anchor="bottom" id="Version Control" order="7" weight="0.3293348" />
+      <window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.26593408" />
+      <window_info anchor="bottom" id="Spring" order="7" />
+      <window_info anchor="bottom" id="Terminal" order="7" />
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25" />
+      <window_info anchor="right" id="Bean Validation" order="3" />
+      <window_info id="Web" order="2" side_tool="true" />
+      <window_info anchor="right" id="Theme Preview" order="3" />
+      <window_info id="Favorites" order="2" side_tool="true" />
       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
-      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="bottom" id="Find" order="1" />
       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
     </layout>
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -811,13 +700,7 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/hhh.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="85">
-          <caret line="5" column="16" selection-start-line="5" selection-start-column="16" selection-end-line="5" selection-end-column="16" />
-        </state>
-      </provider>
-    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/hhh.java" />
     <entry file="file://$PROJECT_DIR$/wsm-admin-service/src/main/java/com/wsm/admin/service/impl/RoleServiceImpl.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="102">
@@ -860,9 +743,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/admin/dataDictionary/list.html">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
     <entry file="file://$PROJECT_DIR$/README.md">
       <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
         <state split_layout="SPLIT">
@@ -878,16 +758,7 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/Swagger2.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="132">
-          <caret line="32" column="39" lean-forward="true" selection-start-line="32" selection-start-column="39" selection-end-line="32" selection-end-column="39" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/Swagger2.java" />
     <entry file="file://$PROJECT_DIR$/wsm-common/src/main/java/com/wsm/common/config/WebMvcConfig.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="1088">
@@ -909,24 +780,11 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/config/Swagger2.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-330">
-          <caret line="11" lean-forward="true" selection-start-line="11" selection-end-line="11" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/config/Swagger2.java" />
     <entry file="file://$PROJECT_DIR$/wsm-application/src/main/java/com/wsm/Application.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="153">
           <caret line="20" selection-start-line="20" selection-end-line="20" selection-end-column="15" />
-          <folding>
-            <element signature="e#1305#1306#0" expanded="true" />
-            <element signature="e#1367#1368#0" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -955,9 +813,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="493">
           <caret line="35" column="37" lean-forward="true" selection-start-line="35" selection-start-column="37" selection-end-line="35" selection-end-column="37" />
-          <folding>
-            <element signature="e#959#989#1" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -989,24 +844,9 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/sock.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-177" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/login.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-619" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/index.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-2455" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/home.html">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/sock.html" />
+    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/login.html" />
+    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/templates/index.html" />
     <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/logback.xml">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="472">
@@ -1025,9 +865,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="459">
           <caret line="29" lean-forward="true" selection-start-line="29" selection-end-line="29" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -1038,13 +875,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application.properties">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-310">
-          <caret line="20" column="36" selection-start-line="20" selection-start-column="25" selection-end-line="20" selection-end-column="36" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceController.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="153">
@@ -1075,25 +905,22 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/IndexController.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="105">
-          <caret line="46" column="20" selection-start-line="46" selection-start-column="20" selection-end-line="46" selection-end-column="20" />
+        <state relative-caret-position="459">
+          <caret line="53" column="20" selection-start-line="53" selection-start-column="20" selection-end-line="53" selection-end-column="20" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/KaptchaController.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="384">
+        <state relative-caret-position="442">
           <caret line="37" column="7" selection-start-line="37" selection-start-column="7" selection-end-line="37" selection-end-column="7" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/api/LiveController.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="229">
+        <state relative-caret-position="1292">
           <caret line="97" column="43" selection-start-line="97" selection-start-column="38" selection-end-line="97" selection-end-column="43" />
-          <folding>
-            <element signature="e#1099#1112#1" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -1134,8 +961,8 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-68">
-          <caret line="31" column="13" selection-start-line="31" selection-start-column="13" selection-end-line="31" selection-end-column="13" />
+        <state relative-caret-position="68">
+          <caret line="31" column="10" selection-start-line="31" selection-start-column="10" selection-end-line="31" selection-end-column="10" />
         </state>
       </provider>
     </entry>
@@ -1148,20 +975,28 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="17">
-          <caret line="35" column="13" selection-start-line="35" selection-start-column="13" selection-end-line="35" selection-end-column="13" />
+        <state relative-caret-position="119">
+          <caret line="35" column="3" selection-start-line="35" selection-start-column="3" selection-end-line="35" selection-end-column="3" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java">
       <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="527">
+          <caret line="37" column="53" selection-start-line="37" selection-start-column="53" selection-end-line="37" selection-end-column="53" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application-pro.properties">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application-dev.properties">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/wsm-application/src/main/resources/application.properties">
+      <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="289">
-          <caret line="17" lean-forward="true" selection-start-line="17" selection-end-line="17" />
-          <folding>
-            <element signature="imports" expanded="true" />
-            <element signature="e#1199#1200#0" expanded="true" />
-            <element signature="e#1272#1273#0" expanded="true" />
-          </folding>
+          <caret line="20" column="13" selection-start-line="20" selection-start-column="13" selection-end-line="20" selection-end-column="13" />
         </state>
       </provider>
     </entry>

+ 4 - 1
README.md

@@ -1 +1,4 @@
-江门市智慧城市管理系统
+江门市智慧城市管理系统
+
+问题
+1. 当警情超过24小时没有处理,传感器又没有心跳,心跳检测会把当前传感器设置为离线状态。

+ 11 - 1
pom.xml

@@ -61,6 +61,8 @@
         <zxing.version>2.1</zxing.version>
         <spring-boot-starter-websocket.version>2.1.3.RELEASE</spring-boot-starter-websocket.version>
         <poi.version>3.17</poi.version>
+        <!--<client.mqttv3.version>1.2.0</client.mqttv3.version>-->
+
     </properties>
 
     <!--dependencyManagement用于管理依赖版本号-->
@@ -131,7 +133,6 @@
                 <artifactId>thymeleaf-extras-shiro</artifactId>
                 <version>${thymeleaf.shiro.version}</version>
             </dependency>
-
             <!-- JPA -->
             <dependency>
                 <groupId>org.springframework.boot</groupId>
@@ -328,6 +329,15 @@
                 <version>${spring-boot-starter-websocket.version}</version>
             </dependency>
 
+
+            <!--mqtt包-->
+            <!-- https://mvnrepository.com/artifact/org.eclipse.paho/org.eclipse.paho.client.mqttv3 -->
+            <!--<dependency>-->
+                <!--<groupId>org.eclipse.paho</groupId>-->
+                <!--<artifactId>org.eclipse.paho.client.mqttv3</artifactId>-->
+                <!--<version>${client.mqttv3.version}}</version>-->
+            <!--</dependency>-->
+
         </dependencies>
     </dependencyManagement>
 

+ 11 - 0
wsm-admin-dao/src/main/java/com/wsm/admin/dao/IDeviceEventDao.java

@@ -2,8 +2,19 @@ package com.wsm.admin.dao;
 
 import com.wsm.admin.model.DeviceEvent;
 import com.wsm.common.dao.IBaseDao;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
+import java.util.List;
+
 @Repository
 public interface IDeviceEventDao extends IBaseDao<DeviceEvent, Long> {
+
+    List<DeviceEvent> findByContentAndPostTime(String content, Date postTime);
+
+    @Query(value = "SELECT * from tb_device_event where device_id = ?1 and rec_status = 'A' order by update_time desc LIMIT 0,1", nativeQuery = true)
+    DeviceEvent findByDeviceIdTop(Long id);
+
+
 }

+ 17 - 0
wsm-admin-dao/src/main/java/com/wsm/admin/model/Device.java

@@ -1,5 +1,7 @@
 package com.wsm.admin.model;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.wsm.common.model.BaseModel;
 import org.hibernate.annotations.Where;
 
@@ -23,6 +25,7 @@ public class Device extends BaseModel implements Serializable {
     /**
      * 设备id 16进制码(烟感专用字段)
      */
+    @JSONField(serialize = false)
     @Column(length = 50)
     private String deviceId16Hex;
     /**
@@ -105,4 +108,18 @@ public class Device extends BaseModel implements Serializable {
     public void setStatus(Byte status) {
         this.status = status;
     }
+
+
+    @Override
+    public String toString() {
+        return "Device{" +
+                "deviceId='" + deviceId + '\'' +
+                ", deviceId16Hex='" + deviceId16Hex + '\'' +
+                ", deviceType='" + deviceType + '\'' +
+                ", longitude=" + longitude +
+                ", latitude=" + latitude +
+                ", address='" + address + '\'' +
+                ", status=" + status +
+                '}';
+    }
 }

+ 29 - 1
wsm-admin-dao/src/main/java/com/wsm/admin/model/DeviceEvent.java

@@ -1,10 +1,13 @@
 package com.wsm.admin.model;
 
+import com.alibaba.fastjson.annotation.JSONField;
 import com.wsm.common.model.BaseModel;
+import net.minidev.json.annotate.JsonIgnore;
 import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 设备事件表
@@ -16,7 +19,7 @@ public class DeviceEvent extends BaseModel implements Serializable {
 
     private static final long serialVersionUID = 5512725645194142786L;
 
-    @ManyToOne(fetch = FetchType.LAZY)
+    @ManyToOne(fetch = FetchType.EAGER)
     private Device device;
     /**
      * 事件内容
@@ -28,6 +31,13 @@ public class DeviceEvent extends BaseModel implements Serializable {
     @Column(length = 2)
     private Byte handleStatus;
 
+    /**
+     * 上报时间 作去重校验
+     */
+    @Temporal(TemporalType.TIMESTAMP)
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private Date postTime;
+
     public Device getDevice() {
         return device;
     }
@@ -51,4 +61,22 @@ public class DeviceEvent extends BaseModel implements Serializable {
     public void setHandleStatus(Byte handleStatus) {
         this.handleStatus = handleStatus;
     }
+
+    public Date getPostTime() {
+        return postTime;
+    }
+
+    public void setPostTime(Date postTime) {
+        this.postTime = postTime;
+    }
+
+    @Override
+    public String toString() {
+        return "DeviceEvent{" +
+                "device=" + device +
+                ", content='" + content + '\'' +
+                ", handleStatus=" + handleStatus +
+                ", postTime=" + postTime +
+                '}';
+    }
 }

+ 13 - 0
wsm-admin-service/src/main/java/com/wsm/admin/service/IDeviceEventService.java

@@ -1,7 +1,20 @@
 package com.wsm.admin.service;
 
+import com.wsm.admin.model.Device;
 import com.wsm.admin.model.DeviceEvent;
 import com.wsm.common.service.IBaseService;
 
+import java.util.Date;
+import java.util.List;
+
 public interface IDeviceEventService extends IBaseService<DeviceEvent, Long> {
+
+    List<DeviceEvent> findByContentAndPostTime(String content, Date postTime);
+
+    /**
+     * 查询最新的一条
+     * @param deviceId
+     * @return
+     */
+    DeviceEvent findByDeviceIdTop(Long deviceId);
 }

+ 13 - 0
wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceEventServiceImpl.java

@@ -1,6 +1,7 @@
 package com.wsm.admin.service.impl;
 
 import com.wsm.admin.dao.IDeviceEventDao;
+import com.wsm.admin.model.Device;
 import com.wsm.admin.model.DeviceEvent;
 import com.wsm.admin.service.IDeviceEventService;
 import com.wsm.common.dao.IBaseDao;
@@ -8,6 +9,9 @@ import com.wsm.common.service.impl.BaseServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 @Service
 public class DeviceEventServiceImpl extends BaseServiceImpl<DeviceEvent, Long> implements IDeviceEventService {
 
@@ -20,4 +24,13 @@ public class DeviceEventServiceImpl extends BaseServiceImpl<DeviceEvent, Long> i
     }
 
 
+    @Override
+    public List<DeviceEvent> findByContentAndPostTime(String content, Date postTime) {
+        return deviceEventDao.findByContentAndPostTime(content, postTime);
+    }
+
+    @Override
+    public DeviceEvent findByDeviceIdTop(Long deviceId) {
+        return deviceEventDao.findByDeviceIdTop(deviceId);
+    }
 }

+ 0 - 1
wsm-admin-service/src/main/java/com/wsm/admin/service/impl/DeviceServiceImpl.java

@@ -19,7 +19,6 @@ public class DeviceServiceImpl extends BaseServiceImpl<Device, Long> implements
         return this.deviceDao;
     }
 
-
     @Override
     public Device findByDeviceId16Hex(String deviceId16Hex) {
         return deviceDao.findByDeviceId16Hex(deviceId16Hex);

+ 1 - 1
wsm-admin-service/src/main/java/com/wsm/admin/util/ResourceTreeUtil.java

@@ -11,7 +11,7 @@ public class ResourceTreeUtil {
     private List<ResourceTree> resultNodes = new ArrayList<ResourceTree>();//树形结构排序之后list内容
 
     private List<ResourceTree> nodes = new ArrayList<ResourceTree>();
-    ; //传入list参数
+    //传入list参数
 
     public ResourceTreeUtil(List<Resource> nodesList) {//通过构造函数初始化
         for (Resource n : nodesList) {

+ 7 - 0
wsm-admin-web/pom.xml

@@ -52,6 +52,13 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.paho</groupId>
+            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
+            <version>1.2.0</version>
+        </dependency>
+
     </dependencies>
 
 

+ 20 - 1
wsm-admin-web/src/main/java/com/wsm/admin/api/ApiDeviceController.java

@@ -1,14 +1,22 @@
 package com.wsm.admin.api;
 
+import com.wsm.admin.constant.MsgCode;
+import com.wsm.admin.model.Device;
 import com.wsm.admin.service.IDeviceService;
 import com.wsm.common.api.BaseController;
 import com.wsm.common.util.AjaxJson;
+import com.wsm.common.util.RedisUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.BoundGeoOperations;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
 @RestController
 @RequestMapping("/api/device")
 public class ApiDeviceController extends BaseController {
@@ -18,12 +26,23 @@ public class ApiDeviceController extends BaseController {
     @Autowired
     private IDeviceService deviceService;
 
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
     /**
      * 获取所有的设备信息
      * @return
      */
     @RequestMapping(value = {"/list"})
     public AjaxJson list() {
-       return AjaxJson.success(deviceService.findAll());
+        List<Device> list = (List) redisTemplate.opsForValue().get(MsgCode.REDIS_CYCLE_DEVICE_LIST);
+        if (list == null) {
+            logger.info("list size: ");
+            list = deviceService.findAll();
+            redisTemplate.opsForValue().set(MsgCode.REDIS_CYCLE_DEVICE_LIST, list, 24, TimeUnit.HOURS);
+
+        }
+       return AjaxJson.success(list);
     }
 }

+ 0 - 2
wsm-admin-web/src/main/java/com/wsm/admin/api/DataDictionaryController.java

@@ -15,8 +15,6 @@ import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
-
-
 /**
  * 数据字典管理
  */

+ 20 - 6
wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceController.java

@@ -1,15 +1,18 @@
 package com.wsm.admin.api;
 
+import com.wsm.admin.constant.MsgCode;
 import com.wsm.admin.model.Device;
 import com.wsm.admin.service.IDeviceService;
 import com.wsm.common.api.BaseController;
 import com.wsm.common.util.AjaxJson;
 import com.wsm.common.util.ConstantUtils;
+import com.wsm.common.util.RedisUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
@@ -30,6 +33,9 @@ public class DeviceController extends BaseController {
     @Autowired
     private IDeviceService deviceService;
 
+    @Autowired
+    private RedisTemplate redisTemplate;
+
     @RequestMapping(value = {"/list"})
     public String index(Model model) {
         Page<Device> deviceList = deviceService.findAll(getPageRequest(
@@ -51,13 +57,14 @@ public class DeviceController extends BaseController {
     @RequestMapping(value = {"/save"}, method = RequestMethod.POST)
     @ResponseBody
     public AjaxJson edit(Device device) {
+//        logger.info("dto: {}", device.toString());
         try {
-            String device16hex = null;
-            if ("YG".equals(device.getDeviceType())){
-                String deviceId = device.getDeviceId();
-                device16hex = "5947" + deviceId.substring(5, deviceId.length());
-                device.setDeviceId16Hex(device16hex);
-            }
+//            String device16hex = null;
+//            if ("YG".equals(device.getDeviceType())){
+//                String deviceId = device.getDeviceId();
+//                device16hex = "5947" + deviceId.substring(5, deviceId.length());
+//                device.setDeviceId16Hex(device16hex);
+//            }
             if (device.getId() != null) {
                 Device dbDevice = deviceService.find(Long.valueOf(device.getId()));
                 dbDevice.setDeviceId16Hex(device.getDeviceId16Hex());
@@ -71,6 +78,10 @@ public class DeviceController extends BaseController {
                 device.setStatus((byte)0);
                 deviceService.save(device);
             }
+
+            // 删除缓存
+            redisTemplate.delete(MsgCode.REDIS_CYCLE_DEVICE_LIST);
+
         } catch (Exception e) {
             logger.error("系统异常:", e);
             return AjaxJson.failure("系统异常:"+e);
@@ -94,6 +105,9 @@ public class DeviceController extends BaseController {
             }else{
                 ajaxJson = AjaxJson.failure("id不能为空");
             }
+
+            // 删除缓存
+            redisTemplate.delete(MsgCode.REDIS_CYCLE_DEVICE_LIST);
         } catch (Exception e) {
             logger.error("系统异常:", e);
             return AjaxJson.failure("系统异常:" + e);

+ 47 - 0
wsm-admin-web/src/main/java/com/wsm/admin/api/DeviceEventController.java

@@ -1,7 +1,10 @@
 package com.wsm.admin.api;
 
+import com.wsm.admin.constant.MsgCode;
+import com.wsm.admin.model.Device;
 import com.wsm.admin.model.DeviceEvent;
 import com.wsm.admin.service.IDeviceEventService;
+import com.wsm.admin.service.IDeviceService;
 import com.wsm.common.api.BaseController;
 import com.wsm.common.util.AjaxJson;
 import com.wsm.common.util.ConstantUtils;
@@ -10,6 +13,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.StringUtils;
@@ -18,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import java.util.Date;
+
 /**
  * 设备警告管理
  */
@@ -31,6 +37,12 @@ public class DeviceEventController extends BaseController {
     @Autowired
     private IDeviceEventService deviceEventService;
 
+    @Autowired
+    private IDeviceService deviceService;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
     @RequestMapping(value = {"/list"})
     public String index(Model model) {
         Page<DeviceEvent> deviceEventList = deviceEventService.findAll(getPageRequest(
@@ -77,4 +89,39 @@ public class DeviceEventController extends BaseController {
         }
         return ajaxJson;
     }
+
+
+    /**
+     * 修改
+     * @param
+     * @return
+     */
+    @RequestMapping(value = {"/save"}, method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxJson edit(DeviceEvent deviceEvent) {
+        logger.info("dto: {}", deviceEvent.toString());
+        DeviceEvent event = deviceEventService.find(deviceEvent.getId());
+        if (event != null){
+          event.setUpdateTime(new Date());
+          event.setHandleStatus(deviceEvent.getHandleStatus());
+//          deviceEventService.save(event)
+          event = deviceEventService.update(event);
+
+          // 3: 已处理
+          if (event.getHandleStatus() == 3) {
+              Device device = event.getDevice();
+              device.setStatus((byte)0);
+              device.setUpdateTime(new Date());
+              deviceService.update(device);
+
+              // 删除缓存
+              redisTemplate.delete(MsgCode.REDIS_CYCLE_DEVICE_LIST);
+          }
+        }
+
+
+
+        return AjaxJson.success();
+    }
+
 }

+ 7 - 0
wsm-admin-web/src/main/java/com/wsm/admin/api/IndexController.java

@@ -37,13 +37,20 @@ public class IndexController extends BaseController {
         Subject subject = SecurityUtils.getSubject();
         Object principal = subject.getPrincipal();
         User user = (User) principal;
+
+
         User dbUser = userService.findByUserName(user.getUserName());
         model.addAttribute("user", dbUser);
+
+
+        model.addAttribute("user", user);
         try {
             model.addAttribute("resources", resourceService.getResourcesByUser(dbUser));
         } catch (Exception e) {
             e.printStackTrace();
         }
+
+
         return "index";
     }
 

+ 88 - 34
wsm-admin-web/src/main/java/com/wsm/admin/handle/UdpServerHandler.java

@@ -25,6 +25,7 @@ import org.springframework.messaging.simp.SimpMessagingTemplate;
 import java.sql.Timestamp;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import static java.lang.Long.parseLong;
@@ -72,7 +73,7 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
         byte[] req = new byte[buf.readableBytes()];
         buf.readBytes(req);
         String receiveMsg = ByteUtil.bytesToHexString(req).toUpperCase();
-        log.warn("Received UDP Msg :" + receiveMsg);
+        log.warn("\nReceived UDP Msg :" + receiveMsg);
 
         if (StringUtils.isNotEmpty(receiveMsg)){
             String feedback = handleJG(receiveMsg);
@@ -86,60 +87,96 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
     }
 
     private String handleJG(String receiveMsg) {
-        StringBuffer feedback = new StringBuffer("68");
-        StringBuffer lStr = new StringBuffer("4B");
+        StringBuffer feedback = new StringBuffer();
+        // 第1个字节起始字符(68H)
+        feedback.append("68");
+        StringBuffer lStr = new StringBuffer();
+        // 第7个字节控制字  主站下发报文固定为4B
+        lStr.append("4B");
 
         log.warn("======接收到井盖传感器推送信息======");
         String[] str = DeviceUtil.turnToArray(receiveMsg);
         String afn  = str[12];
         String fn = str[14]+str[15]+str[16]+str[17];
         String frameNumber = str[13];
-//        log.warn("afn:"+afn);
-//        log.warn("fn:"+fn);
-//        log.warn("倒数第一个字符:"+str[str.length-1]);
-//        log.warn("倒数第二个字符:"+str[str.length-2]);
-
         String deviceId = DeviceUtil.getJGDeviceID(str);
         log.warn("设备号:"+deviceId);
+        // 第8-12个字节地址域,其中8-11是通信地址 将20160138按照(2.1主站回复报文的组织格式)中新终端地址格式转换,转为16 20 38 10 (每两字节高低位颠倒)再加上固定的04
+        lStr.append(DeviceUtil.getFeedBackJGDeviceID(str)).append("04");
+        // 第13个字节
+        lStr.append(afn);
+        // 第14个字节帧序号 按照终端上报报文的帧序号原样回复
+        lStr.append(frameNumber);
+        // 第15-18个字节
+        lStr.append(fn);
 
-        lStr.append(DeviceUtil.getFeedBackJGDeviceID(str)).append("04").append(afn).append(frameNumber).append(fn);
         String body = receiveMsg.substring(36, receiveMsg.length()-4);
         String[] bodyStr = DeviceUtil.turnToArray(body);
         log.warn("数据体是:" + body);
-
         if (StringUtils.isNotEmpty(body)){
+            log.warn("推送的是心跳、告警数据");
+            // 返回数据体
             StringBuffer feedbackBody = new StringBuffer();
-            feedbackBody.append("00").append("00").append("EE").append("32131031C318").append("00000000000000000000000000000000000000")
-                    .append("EE").append("C0").append("A8").append("01").append("E1").append("2008").append("EE").append(DeviceUtil.getFeedBackJGDeviceID(str))
-                    .append("55").append("00000000").append("EE").append("1008").append("00000000000000000000");
+            //上报失败重试次数(弃用)
+            feedbackBody.append("00");
+            //重发上报时间间隔(弃用)
+            feedbackBody.append("00");
+            //对时开关: 01-开 EE-关
+            feedbackBody.append("EE");
+            // 对时数据体
+            feedbackBody.append("32131031C318");
+            // 同步开关及数据(弃用)
+            feedbackBody.append("00000000000000000000000000000000000000");
+            // IP端口设置开关 01-开 EE-关
+            feedbackBody.append("EE");
+            // IP地址段1
+            feedbackBody.append("C0");
+            // IP地址段2
+            feedbackBody.append("A8");
+            // IP地址段3
+            feedbackBody.append("01");
+            // IP地址段4
+            feedbackBody.append("E1");
+            // IP地址段5
+            feedbackBody.append("2008");
+            // 通讯地址修改开关 01-开 EE-关
+            feedbackBody.append("EE");
+            // 新通讯地址
+            feedbackBody.append(DeviceUtil.getFeedBackJGDeviceID(str));
+            // 布防撤防状态: 55为布防  AA为撤防 其他终端不理会
+            feedbackBody.append("55");
+            // 预留(弃用)
+            feedbackBody.append("00000000");
+            // 上报时间设置开关 01-开 EE-关
+            feedbackBody.append("EE");
+            // 上报基准时间
+            feedbackBody.append("1008");
+            // 预留(弃用)
+            feedbackBody.append("00000000000000000000");
             lStr.append(feedbackBody);
 
-            log.warn("推送的是心跳、告警数据");
-            int count = (int) parseLong(bodyStr[0], 10);
+            int count = (int) parseLong(bodyStr[0], 16);
             log.warn("总共是:"+count + "个事件");
 
             for (int i = 0, length = 26; i < count; i++){
-                log.warn("=======第"+(i+1)+"个事件=======");
                 String eventStr = body.substring(8 + i*length, (8 + i*length)+26);
-                log.warn("======="+eventStr +"=======");
+                log.warn("=======第"+(i+1)+"个事件:"+eventStr+"=======");
                 String[] eventStrArr = DeviceUtil.turnToArray(eventStr);
                 String type = "ERC" + parseLong(eventStrArr[0], 16);
                 if (jgDeviceStatusMap.get(type) != null){
-                    log.warn("======="+jgDeviceStatusMap.get(type)+"=======\n");
-
+                    // 事件时间,作去重校验
                     String dateStr = eventStrArr[6]+eventStrArr[5]+eventStrArr[4]+eventStrArr[3]+eventStrArr[2];
                     DateTime dateTime = DateTime.parse(dateStr, DateTimeFormat.forPattern("yyMMddHHmm"));
-
-                    log.warn("=======时间"+dateTime.toDate()+"=======\n");
-
+                    log.warn("=======事件:"+jgDeviceStatusMap.get(type)+";时间:"+ new DateTime().toString("yyyy-MM-dd HH:mm")+"=======\n");
                     Device device = deviceService.findByDeviceId(deviceId);
                     String content = jgDeviceStatusMap.get(type);
                     boolean needEvent = false;
                     if (device != null){
                         if (LOW_PRESSURE_CODE.equals(type)){
-                            String pressure = eventStrArr[11];
+                            String warnPressure = eventStrArr[11];
+                            String currentPressure = eventStrArr[9];
                             // 低压
-                            if (Integer.valueOf(pressure) <= 20){
+                            if (Integer.valueOf(currentPressure) <= Integer.valueOf(warnPressure)){
                                 device.setStatus((byte)2);
                                 needEvent = true;
                             }
@@ -151,17 +188,24 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
                         deviceService.update(device);
 
                         if (needEvent){
+
+                            List<DeviceEvent> deviceEventList = deviceEventService.findByContentAndPostTime(content, dateTime.toDate());
+                            if (deviceEventList != null && deviceEventList.size() > 0){
+                                continue;
+                            }
+
                             DeviceEvent event = new DeviceEvent();
                             event.setDevice(device);
                             event.setContent(content);
                             event.setHandleStatus((byte)0);
-                            event.setCreateTime(dateTime.toDate());
-                            event.setUpdateTime(dateTime.toDate());
+                            event.setCreateTime(new DateTime().toDate());
+                            event.setUpdateTime(new DateTime().toDate());
+                            event.setPostTime(dateTime.toDate());
                             deviceEventService.save(event);
                             log.warn(device.getDeviceId() + ":"+ event.getContent());
 
                             JSONObject result = new JSONObject();
-                            result.put("id", device.getDeviceId());
+                            result.put("id", device.getId());
                             result.put("deviceType", device.getDeviceType());
                             result.put("status", type);
                             // 推送信息到前端
@@ -173,16 +217,26 @@ public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket
         }else{
             log.warn("推送的是上报完毕报文");
         }
-        StringBuffer a = new StringBuffer(ByteUtil.toBinary(lStr.toString().length()/2)).append("10");
-        StringBuffer zero = new StringBuffer();
-        for (int i = 0; i < 16-a.length(); i++){
-            zero.append("0");
+        // ===== 计算长度L start =====
+        StringBuffer countLength = new StringBuffer(ByteUtil.toBinary(lStr.toString().length()/2)).append("10");
+        StringBuffer zeroStr = new StringBuffer();
+        for (int i = 0; i < 16-countLength.length(); i++){
+            zeroStr.append("0");
         }
-        zero.append(a);
-        String ab = ByteUtil.binaryString2hexString(zero.toString());
+        zeroStr.append(countLength);
+        String ab = ByteUtil.binaryString2hexString(zeroStr.toString());
         String[] abArr = DeviceUtil.turnToArray(ab);
-        feedback.append(abArr[1]).append(abArr[0]).append(abArr[1]).append(abArr[0]).append("68");
+        // ===== 计算长度L end =====
+
+        // 第2-3个字节(长度L) 预留待替换
+        feedback.append(abArr[1]).append(abArr[0]);
+        // 第4-5个字节(长度L) 预留待替换
+        feedback.append(abArr[1]).append(abArr[0]);
+        // 第6个字节起始字符(68H)
+        feedback.append("68");
+        // 倒数第2个字节校验和CS  预留待替换
         lStr.append(ByteUtil.makeChecksum(lStr.toString()));
+        // 最后一个字节结束字符(16H)
         lStr.append("16");
         feedback.append(lStr);
         return feedback.toString().toUpperCase();

+ 21 - 11
wsm-admin-web/src/main/java/com/wsm/admin/init/StartupUdpEvent.java

@@ -1,15 +1,13 @@
 package com.wsm.admin.init;
 
+import com.wsm.admin.mqtt.ClientMQTT;
+import com.wsm.admin.tcp.init.CoverTcpServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextRefreshedEvent;
 
-/**
- * 启动UDP TCP 线程
- */
-
 public class StartupUdpEvent implements ApplicationListener<ContextRefreshedEvent> {
 
     private static final Logger log = LoggerFactory.getLogger(StartupUdpEvent.class);
@@ -21,14 +19,26 @@ public class StartupUdpEvent implements ApplicationListener<ContextRefreshedEven
         try {
             context = contextRefreshedEvent.getApplicationContext();
 
-            log.warn("启动UDP线程,接收UDP消息,端口:2000");
-            //接收UDP消息并保存至redis中
-            UdpServer udpServer = (UdpServer)StartupUdpEvent.getBean(UdpServer.class);
-            udpServer.run(2000);
+//            log.warn("启动UDP线程,接收UDP消息,端口:2000");
+//            //接收UDP消息并保存至redis中
+//            UdpServer udpServer = (UdpServer)StartupUdpEvent.getBean(UdpServer.class);
+//            udpServer.run(2000);
+//
+//            log.warn("启动TCP线程,接收TCP消息,端口:2020");
+//            TcpServer tcpServer = (TcpServer)StartupUdpEvent.getBean(TcpServer.class);
+//            tcpServer.startSocketServer(2020);
+
+            CoverTcpServer tcpServer = (CoverTcpServer)StartupUdpEvent.getBean(CoverTcpServer.class);
+            tcpServer.run(2000);
+            log.warn("启动井盖TCP线程,接收TCP消息,端口:2000");
+
+
+//            ClientMQTT clientMqtt = (ClientMQTT)StartupUdpEvent.getBean(ClientMQTT.class);
+//            clientMqtt.start();
+            ClientMQTT clientMQTT = new ClientMQTT();
+            clientMQTT.start();
+            log.warn("启动烟雾传感器MQTT");
 
-            log.warn("启动TCP线程,接收TCP消息,端口:2020");
-            TcpServer tcpServer = (TcpServer)StartupUdpEvent.getBean(TcpServer.class);
-            tcpServer.startSocketServer(2020);
 
         } catch (Exception e) {
             log.error("Exception", e);

+ 88 - 0
wsm-admin-web/src/main/java/com/wsm/admin/init/TaskSchedule.java

@@ -0,0 +1,88 @@
+package com.wsm.admin.init;
+
+import java.util.Date;
+import java.util.List;
+
+import com.wsm.admin.constant.MsgCode;
+import com.wsm.admin.model.Device;
+import com.wsm.admin.model.DeviceEvent;
+import com.wsm.admin.service.IDeviceEventService;
+import com.wsm.admin.service.IDeviceService;
+import com.wsm.common.util.RedisUtil;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * Created by owen on 2018/8/24.
+ *
+ * 定时任务,检测设备状态
+ */
+
+@Component
+public class TaskSchedule {
+
+    /** The logger. */
+    private Logger logger = Logger.getLogger(TaskSchedule.class);
+
+    @Autowired
+    private IDeviceService deviceService;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private IDeviceEventService deviceEventService;
+
+
+    /**
+     * 每天24点检查未开始的活动
+     * 每天24点执行一次  @Scheduled(cron=" 0 0 0 * * ? ") @Scheduled(cron=" * 1  * * ? ")
+     *
+     * Scheduled(cron=" 10 0/5 * * * ? ")   //每五分钟执行一次
+     */
+    @Scheduled(cron=" 10 0 0 * * ? ")
+//    @Scheduled(cron=" 10 0/5 * * * ? ")
+    public void checkDeviceId(){
+        logger.info("run checkDeviceId");
+
+        List<Device> list = deviceService.findAll();
+
+        for (Device d : list) {
+            boolean b = redisUtil.hasKey(d.getDeviceId());
+            // 如果不存在
+            if (!b) {
+                logger.info("离线设备号:" + d.getDeviceId());
+                DeviceEvent event = new DeviceEvent();
+//                DeviceEvent event = deviceEventService.findByDeviceIdTop(d.getId());
+                    event = new DeviceEvent();
+                    event.setCreateTime(new Date());
+                    event.setDevice(d);
+                    event.setPostTime(new Date());
+
+                // 0:报警 待解决
+                event.setHandleStatus((byte)0);
+                event.setContent("设备离线");
+                event.setUpdateTime(new Date());
+                deviceEventService.save(event);
+
+                //修改设备状态
+                // 3:故障
+                d.setStatus((byte)3);
+                d.setUpdateTime(new Date());
+                deviceService.update(d);
+                redisUtil.delete(MsgCode.REDIS_CYCLE_DEVICE_LIST);
+
+
+            }
+
+        }
+        logger.info("end checkDeviceId");
+
+
+    }
+
+
+}

+ 3 - 1
wsm-admin-web/src/main/java/com/wsm/admin/init/TcpServer.java

@@ -24,6 +24,7 @@ import java.nio.channels.Selector;
 import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SocketChannel;
 import java.nio.charset.Charset;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -226,11 +227,12 @@ public class TcpServer {
                     event.setContent(deviceStatusMap.get(hex));
                     event.setDevice(device);
                     event.setHandleStatus((byte)0);
+                    event.setPostTime(new Date());
                     deviceEventService.save(event);
                     log.warn(device.getDeviceId() + ":"+ event.getContent());
 
                     JSONObject result = new JSONObject();
-                    result.put("id", device.getDeviceId());
+                    result.put("id", device.getId());
                     result.put("deviceType", device.getDeviceType());
                     result.put("status", hex);
 

+ 8 - 1
wsm-admin-web/src/main/java/com/wsm/admin/shiro/ShiroConfig.java

@@ -18,7 +18,6 @@ import org.springframework.context.annotation.DependsOn;
 import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
-import javax.servlet.Filter;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -91,6 +90,8 @@ public class ShiroConfig {
 
         ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
         shiroFilter.setSecurityManager(securityManager());
+
+
         shiroFilter.setLoginUrl("/admin/login");
         //登录成功后要跳转的链接
         shiroFilter.setSuccessUrl("/admin/index");
@@ -117,8 +118,14 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/kaptcha", "anon");
         filterChainDefinitionMap.put("/api/**", "anon");
 
+        filterChainDefinitionMap.put("/test", "anon");
+
         filterChainDefinitionMap.put("/**", "authc");
 
+
+
+
+
         /*Map<String, Filter> filters = shiroFilter.getFilters();
         filters.put("authc", new CustomFormAuthenticationFilter());*/
 

+ 0 - 1
wsm-admin-web/src/main/java/com/wsm/admin/thread/TaskExecutePool.java

@@ -1,6 +1,5 @@
 package com.wsm.admin.thread;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;

+ 2 - 4
wsm-application/src/main/java/com/wsm/Application.java

@@ -11,14 +11,12 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.client.RestTemplate;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
-@ComponentScan(basePackages = {"com.wsm", "com.wsm.admin"})
-@SpringBootApplication(scanBasePackages = {"com.wsm", "com.wsm.admin"})
+@ComponentScan(basePackages = {"com.wsm", "com.wsm.admin", "com.wsm.common"})
+@SpringBootApplication(scanBasePackages = {"com.wsm", "com.wsm.admin", "com.wsm.common"})
 @EnableCaching
 @EnableScheduling
 @EnableAsync
-@EnableSwagger2
 @ServletComponentScan(basePackages = {"com.wsm.admin.filter"})
 public class Application extends SpringBootServletInitializer {
 

+ 10 - 0
wsm-application/src/main/resources/application-dev.properties

@@ -0,0 +1,10 @@
+
+#DB
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.url=jdbc:mysql://localhost:3306/jm-smart-city?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+spring.datasource.username=root
+spring.datasource.password=root
+spring.datasource.driverClassName=com.mysql.jdbc.Driver
+
+logging.file=log/vts.log
+

+ 14 - 0
wsm-application/src/main/resources/application-pro.properties

@@ -0,0 +1,14 @@
+
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.url=jdbc:mysql://192.168.0.248:3306/gis_vts?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+#spring.datasource.username=root
+#spring.datasource.password=4dage
+
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.url=jdbc:mysql://192.168.0.248:3306/jm-smart-city?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+spring.datasource.username=root
+spring.datasource.password=4dage
+spring.datasource.driverClassName=com.mysql.jdbc.Driver
+
+logging.file=log/vts.log
+

+ 4 - 6
wsm-application/src/main/resources/application.properties

@@ -1,10 +1,7 @@
 server.port=8081
-#DB
-spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.url=jdbc:mysql://localhost:3306/jm-smart-city?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
-spring.datasource.username=root
-spring.datasource.password=123456
-spring.datasource.driverClassName=com.mysql.jdbc.Driver
+
+spring.profiles.active=dev
+
 # jpa
 spring.jpa.show-sql=false
 spring.jpa.properties.jadira.usertype.autoRegisterUserTypes=true
@@ -47,6 +44,7 @@ spring.redis.pool.max-wait=-1
 #redis-sentinel的配置地址和端口
 #spring.redis.sentinel.nodes=10.189.80.25:26379,10.189.80.26:26379,10.189.80.27:26378
 
+# 配置开机启动监听
 context.listener.classes=com.wsm.admin.init.StartupUdpEvent
 #线程池
 spring.task.pool.corePoolSize=5

+ 0 - 4
wsm-application/src/main/resources/logback.xml

@@ -52,10 +52,6 @@
         <!--<level value="DEBUG"/>-->
     <!--</logger>-->
 
-    <!-- DEBUG 模式,会有很详细的日志输出信息,常用于开发环境-->
-    <!--<root level="DEBUG">-->
-
-    <!-- INFO 模式,会少很多信息,常用于生产环境-->
     <root level="INFO">
         <appender-ref ref="APP"/>
         <appender-ref ref="STDOUT"/>

+ 5 - 0
wsm-common/src/main/java/com/wsm/common/config/WebSocketConfig.java

@@ -1,5 +1,7 @@
 package com.wsm.common.config;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.messaging.simp.config.MessageBrokerRegistry;
 import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
@@ -9,9 +11,11 @@ import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
 @Configuration
 @EnableWebSocketMessageBroker
 public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
+    private Logger log = LoggerFactory.getLogger(getClass());
 
     @Override
     public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
+        log.info("run registerStompEndpoints");
         stompEndpointRegistry.addEndpoint("/webSocketServer")
                 .setAllowedOrigins("*") //解决跨域问题
                 .withSockJS();
@@ -19,6 +23,7 @@ public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
 
     @Override
     public void configureMessageBroker(MessageBrokerRegistry registry) {
+        log.info("run configureMessageBroker");
         registry.enableSimpleBroker("/topic");
     }
 }

+ 2 - 0
wsm-common/src/main/java/com/wsm/common/model/BaseModel.java

@@ -21,6 +21,8 @@ public abstract class BaseModel {
     @JSONField(format = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
+
+    @JSONField(serialize = false)
     @Column(length = 2)
     private String recStatus;
 

+ 15 - 0
wsm-common/src/main/java/com/wsm/common/util/DateTimeUtils.java

@@ -1,5 +1,6 @@
 package com.wsm.common.util;
 
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 import org.joda.time.DateTime;
@@ -74,4 +75,18 @@ public class DateTimeUtils {
 		return "常设展";
 	}
 
+	/**
+	 * 字符传转日期
+	 * @param strDate
+	 * @return
+	 */
+	public static Date parse(String strDate) {
+		try{
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			return sdf.parse(strDate);
+		}catch(Exception e){
+		}
+		return null;
+	}
+
 }