diff --git a/.gitignore b/.gitignore
index 6143e53f9e36d08e4da5d743017e2c04ca91d86d..7aa14f56bc4cc5d63f5a4e879495ead796fdf48d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,22 +1,30 @@
-# Compiled class file
-*.class
+target/
+!.mvn/wrapper/maven-wrapper.jar
-# Log file
-*.log
-
-# BlueJ files
-*.ctxt
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
-# Package Files #
-*.jar
-*.war
-*.ear
-*.zip
-*.tar.gz
-*.rar
+### NetBeans ###
+nbproject/private/
+build/
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+LOG_PATH_IS_UNDEFINED/
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
+### customer ###
+*.log
+*.gitignore
+/.idea/*
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index d3942e855ddb2fc30b2303714926da8d143a9ccb..077b5c2f2f22344ff9e21ca5a022906b8c10c04c 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -10,6 +10,8 @@
+
+
@@ -27,6 +29,8 @@
+
+
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 89083e8d1527f8cd98b533d051566c4aa533966d..0d517910cfae863cb6a1c540c41fd28c6890e6a2 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -5,6 +5,8 @@
+
+
diff --git a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml
index 2d3d1fbd0cff9a12216300093e71ca337309463d..7ee868b29a0b4d3eaf19b5f5273f56cc109937b6 100644
--- a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml
+++ b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml
index d0b496fb32a0dd49f2260896b46412c04912173e..af041bc83e96023dcafad147041bcc799754f45e 100644
--- a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml
+++ b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml
index 67d0182209f1a4e2b3b1ea1e456c01168fc31ef1..1ab5674a1ddf97620ee87a26153a9f04253c76be 100644
--- a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_11.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
index d716bf1e51ce98be1b3e7c96b446c2f50143aa31..d857a0ad1a438419de74c7e7871f6c06f0c05527 100644
--- a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml
index f19cb80b1a4ffcd98fae5a39ef61677a29b9ec6d..9a27920844d272bafb638ea61dc66cc0c842d4d0 100644
--- a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_11.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
index 24fe9a56d347f8b1a0690a6964f1d356e58fe025..4284a24004cfb3544a6e9db25d0c5e0d3a8e2c94 100644
--- a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_alibaba_druid_1_0_29.xml b/.idea/libraries/Maven__com_alibaba_druid_1_0_29.xml
index 41d7a64ec6b28257c7f9823836a556e973870c1d..28eda8774e4c4890d946103d18cc4aa16fba653c 100644
--- a/.idea/libraries/Maven__com_alibaba_druid_1_0_29.xml
+++ b/.idea/libraries/Maven__com_alibaba_druid_1_0_29.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_alibaba_fastjson_1_2_15.xml b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_15.xml
index 90c28ec3cd866c5952704c1b149a2691d3c31ef6..133fb5858003ead31eef837b8e71260c63950130 100644
--- a/.idea/libraries/Maven__com_alibaba_fastjson_1_2_15.xml
+++ b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_15.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml
index e0d1a8769806f7c8ce1765c7556591141037e507..b8f7ba02734a6864acaabbdb631759ddd6ef8ed3 100644
--- a/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml
+++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_3_4.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml
index e4c930ecff1b2dee9e4a07a2007bf0094d031d60..b47d537d6dce73dd8766d588ae11d8f774547ecb 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_8_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml
index 10916fc82161cc70e16b5378b01b61f704265968..8063b7b05d9864475dadc9b7dab73b7b646ce528 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml
index a69de1f935daae638ab220247ee541e3a7d695c7..781fc531d5523efddc8226b9eb43178da0500378 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_8_10.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_5.xml
index 78db75f95341b4f7193bdee0e18d6d4381682433..a94c8621e38516f6fe2fbefacd6a6521249f0059 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_5.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_5.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml
index eac9e19abe2b6c48b3d94cf70117a639ae230c11..3c983085f8ba1f038ed426b56ca8a1689c897c73 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_8_10.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_5.xml
index 1e6e9b0b95e1acefa279c2df0e7e6847cecb45b8..67a6ecc5e766de72fa09321ebd24dd9d1809611a 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_5.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_5.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_5.xml
index a4c9c440b62d7abed54d7a67d94a757855e83f75..f85d4cce89c78cd3b9bc0740dc8a37c5085e516d 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_5.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_5.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_5.xml
index 98d83a6c2e6538d5a99a56ba989a9fcb86e6b63f..64be1b67a3ee7d5f441580ae620dc509abaa3196 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_5.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_5.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_5.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_5.xml
index 71ccf997a024fd78884ab1e862fae785cf9b84ec..837fc70325f26c8f8641721e280abfc164eef597 100644
--- a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_5.xml
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_5.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml
index 4a5191949fe7062c3a1543f97711b5d483ae8c8d..9782da548b66a8efe8d2acbd9a7ba3d0eeec6a6d 100644
--- a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml
+++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_2_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
index 16b1d2c3ffa73ea42d95dc2a9176a2527b3f181e..d3b6947ca51acbc0eef423801ea210924f92d7f9 100644
--- a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
+++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
index 47f18e69a60f0421e43955d8268fd40483571248..da06b5f97b46c7e18993fb47007f9611f508d443 100644
--- a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
+++ b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml
index f454eff6365391cfd69519fa80c400a390e97cb0..29af6b5b7408cd5bd55e5f26eea36b98d32fb59a 100644
--- a/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml
+++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
index 8bd856053ade03f3c32c34d9ea4b355fd15cb4ad..ecdf40f58edaca5b0b18f4b839dcf124a319b25c 100644
--- a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
+++ b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_7_0.xml b/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_7_0.xml
index 73eb5f4ed1545cbead16a6de394e9aca7a23e824..182fe997696a75cbf34caf91e7437a8fbe59dbeb 100644
--- a/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_7_0.xml
+++ b/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_7_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_undertow_undertow_core_1_4_22_Final.xml b/.idea/libraries/Maven__io_undertow_undertow_core_1_4_22_Final.xml
index 8fd69762ab0c35771c461ce2fa450c3472c406b6..16b973eedb9d1e407d2b5cfbb71603676c6faca0 100644
--- a/.idea/libraries/Maven__io_undertow_undertow_core_1_4_22_Final.xml
+++ b/.idea/libraries/Maven__io_undertow_undertow_core_1_4_22_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_undertow_undertow_servlet_1_4_22_Final.xml b/.idea/libraries/Maven__io_undertow_undertow_servlet_1_4_22_Final.xml
index 790fc79d44d25eec4f0e85cea3f0588b6a12575c..ab88273647fab9e543681f8f865f7ecbbcfe62e6 100644
--- a/.idea/libraries/Maven__io_undertow_undertow_servlet_1_4_22_Final.xml
+++ b/.idea/libraries/Maven__io_undertow_undertow_servlet_1_4_22_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_undertow_undertow_websockets_jsr_1_4_22_Final.xml b/.idea/libraries/Maven__io_undertow_undertow_websockets_jsr_1_4_22_Final.xml
index e2ebf03802a1e08122680d3552d8322ea8d83bc4..c9c2c3e1719e54f650465a22758d11668976018a 100644
--- a/.idea/libraries/Maven__io_undertow_undertow_websockets_jsr_1_4_22_Final.xml
+++ b/.idea/libraries/Maven__io_undertow_undertow_websockets_jsr_1_4_22_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml b/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
index d4763e59fa8fe7356865a8265b7ab34423311580..c705addf1defc145d4f262af49a109bbf50d6d42 100644
--- a/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
+++ b/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
index a34a002c86a0b1a207275c58070a72b966bb40ec..7e5704e1eb55eae3ddd232d27de1cb1f8d3c056f 100644
--- a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
+++ b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml b/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml
index 69b911bb12222d1e0dd88e948b53c9b041a42ab0..5b6a533447df736de0aaea6985e4059900b81a44 100644
--- a/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml
+++ b/.idea/libraries/Maven__javax_servlet_jstl_1_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml b/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml
index 249890199fd6e68516a00c78e5fd9b2b2d7fc016..f1a39938fdc0b2a21a41d524264d9f68a445cc5c 100644
--- a/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml
+++ b/.idea/libraries/Maven__javax_transaction_javax_transaction_api_1_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml b/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml
index f276feac2e368bdcac1db9ea4561010337f005e5..ecaf6815dd87758a82c1aa0bc8aaa690114f637d 100644
--- a/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml
+++ b/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml b/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
index 21c2a6e2e874a9de9734dfd9b8193698fffd60e2..5890302c47d04d606ad7afd3eac78b631f37d990 100644
--- a/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
+++ b/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
index c722d66ff1dca0998ee54907f859b6da407609d4..4d72f8aef6af19e1ece5e79c527b818146ff849e 100644
--- a/.idea/libraries/Maven__junit_junit_4_12.xml
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_45.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_45.xml
index c4645c054b660ecabce26006d8e3c22f19417d42..738b23399670be5ef359a678834fae002d15ab10 100644
--- a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_45.xml
+++ b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_45.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml
index c8c6a495ee3a9db12131846f840e7b714fdb71d7..6b45884c4a3bf84fe24a9e090d83ee70608bb98d 100644
--- a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml
+++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_7_11.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml
index dce55693c4d0b65b0058ae10870aee5f2dcfde75..af2a77d65640479e38897d39994cd8eeaf3dc864 100644
--- a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml
+++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml
index ba16640aac2a5acf4744d4754833f2e12939b683..4a8787bcc67e03013e1cffc10073bc5565702017 100644
--- a/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml
+++ b/.idea/libraries/Maven__net_minidev_accessors_smart_1_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
index bc382c3bfe1f7a57a8d9d22ef10e7b851e216fec..735d6ddd4ec445d698135b2b34ed4ccd8ee29a97 100644
--- a/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
+++ b/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml
index cef0433aac07ca6dc812a6d90dd19b778fd43c4a..a915e69f1e5fe9fdaba5e89057ff67b42d55e8e0 100644
--- a/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml
+++ b/.idea/libraries/Maven__net_minidev_json_smart_2_2_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
index fd0c340f7ffa0f84a584219233b96df0d1d797ec..b523331771c09f5329a4067b42d6f8aa44041650 100644
--- a/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
+++ b/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_oschina_zcx7878_fastdfs_client_java_1_27_0_0.xml b/.idea/libraries/Maven__net_oschina_zcx7878_fastdfs_client_java_1_27_0_0.xml
index c90664e15ef5cb868a478f7743ebd2e6249c1430..9b4591321331309f9ba11ea983972c4e65aa5cf2 100644
--- a/.idea/libraries/Maven__net_oschina_zcx7878_fastdfs_client_java_1_27_0_0.xml
+++ b/.idea/libraries/Maven__net_oschina_zcx7878_fastdfs_client_java_1_27_0_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml
index d1eff7458b68ca4a5c7955d17204a14b3e431d85..626a96291ef14cdfa7b8d43a301f28b756f4856d 100644
--- a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml
+++ b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml
index 1199a84c2a1a8827f882389cabcb01f54f70427b..0b001118a1360680ba8218e2bf65d0ff0bf4af10 100644
--- a/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml
+++ b/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_4_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml
index c97f8e7c1be008fc8f1ea8b2cf9d5f8116d53313..fd533d50f34e98850c7cbfcdea8e8bef61508bec 100644
--- a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_10_0.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_10_0.xml
index be27365156c1145adddd07105afa0f52a4787918..e3939c670ba18b8251eaf4fb8796afc7688be66d 100644
--- a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_10_0.xml
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_10_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_27.xml
index abf036f5f825d0dbaa3a246a7bc85fa0446919b9..67d3b62e8e6d3ab83eca2da7f5a14b9f07e0647b 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml
index cb194fa588ce91ee2f7c5964276ec0fbe3fe574e..5ee5ea64358cd6e4ea53d811a5d8ad56306fcee2 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_31.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_27.xml
index b9d34391137da4c76ca68b0d1de1fa2845314c7f..054553651dddad1a2d454546742bb991b322faf3 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml
index 39eaa8252516f54a2af9915c3c88e137fc21f6f4..249ce1452ce2c58c1a7161f5477469489f8b21ba 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_31.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_27.xml
index fe14166df2cd67b43825ad758adabbef9a88b437..cf443157119a32a521745b6784c6c28769ecd388 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml
index 80a4e2f357b5ee6c20bd9bdd81cee0a6e2e7c712..d5835dc4f0d620301daee42eed1d4b1b770f3677 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_jasper_8_5_31.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_27.xml
index 03c1a372c3070d02541311888548d55cd6f27344..9b623c266743ff7c9d12e9e8078632b2a1c65286 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml
index b00302351fd5452696adf2fee972b7058e824524..74eb3d65ada6b4b8a5867f4ade81e7bae218e4cf 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_31.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_27.xml
index 3691bd40f2db9b1f4ea254b5746fbb8f70556a25..c3fb55507cacf9c2bc083479f42c3af9aee5a39a 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml
index a154168ea658c299d3015667f7b1dfd3e03bb31b..3f5952641f621e3dda0759d193d16b093359cf77 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_tomcat_annotations_api_8_5_31.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_tomcat_jdbc_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_tomcat_jdbc_8_5_27.xml
index ee2541e71674c376c1d1b8d1cbc14d14201aa132..5fa1b99665c25b5c2613e684f80b3dd39239beba 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_tomcat_jdbc_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_tomcat_jdbc_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_tomcat_juli_8_5_27.xml b/.idea/libraries/Maven__org_apache_tomcat_tomcat_juli_8_5_27.xml
index f9d95fa460eb9e84c90e4b6341ed8f6e1252ca61..1aa9c5d93b158540d0a75133c0910b93f83c7643 100644
--- a/.idea/libraries/Maven__org_apache_tomcat_tomcat_juli_8_5_27.xml
+++ b/.idea/libraries/Maven__org_apache_tomcat_tomcat_juli_8_5_27.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml
index 88aede32cf77fdbdcaad97f29fa26deeab66cedb..5c403bd59261cef9d4270b325688647e8f5b9156 100644
--- a/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml
+++ b/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_8_13.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml b/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml
index 04bab7df15d1873f42b124e38be2eb4771908541..e4e5ea26ae279cc8cbf668d2d35b8e119acabdfe 100644
--- a/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml
+++ b/.idea/libraries/Maven__org_assertj_assertj_core_2_6_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml b/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml
index 5eb907dde7e1583f53a9e79709e7131a44b681f2..443d739ed8407d4529f3a3c1449c5380becab74b 100644
--- a/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml
+++ b/.idea/libraries/Maven__org_assertj_assertj_core_3_9_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml
index 37f3705d76d630a6c671234db6c44661ca2ca6bc..d243e17ac800f2ec99b93881006fb3d41d06863f 100644
--- a/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml
+++ b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml
index e936c9521367f675368350b426450d8129a53bc6..c37cb730546626e1fd549705a911b9beba9eb37d 100644
--- a/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml
+++ b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml b/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml
index 29ecd395387cee9dc31db9abe512ef8c204661dd..d2405e4bd8c125d6a12714588d5d4ecbc74490ed 100644
--- a/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml
+++ b/.idea/libraries/Maven__org_eclipse_jdt_ecj_3_12_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_javax_el_3_0_0.xml b/.idea/libraries/Maven__org_glassfish_javax_el_3_0_0.xml
index a691350f7d53bd11929dfeb5587f3ca4492bee25..a64201f8ffa5817e22c563428af9022363ef4e91 100644
--- a/.idea/libraries/Maven__org_glassfish_javax_el_3_0_0.xml
+++ b/.idea/libraries/Maven__org_glassfish_javax_el_3_0_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
index 1633e4bd5b45608c5dc5edf54a55c1df7fee0957..1364f4a00932baa883775e8f0936b87e383ec656 100644
--- a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
index 9b0f74be153cbccf427638b661ea0a74bcadd1f2..dfe7f99aee39e4eef2ab9530c10531fd7ece4523 100644
--- a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml
index 5f8affe21022bca1a1dc58566124327afe4cba18..af4fc2184b70ce92627851bd655de609e4107286 100644
--- a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml
+++ b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_0_1_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_core_5_0_12_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_core_5_0_12_Final.xml
index 81ac38ee5b8905ebb4d213919e99879698fe9049..90c1ce68c9b44f7eaf446e52acf93a4db20be051 100644
--- a/.idea/libraries/Maven__org_hibernate_hibernate_core_5_0_12_Final.xml
+++ b/.idea/libraries/Maven__org_hibernate_hibernate_core_5_0_12_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_5_0_12_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_5_0_12_Final.xml
index 265d1056d0910c476ad4fe298349ad6dc76fd407..198ce739b6325dd83c789a1d5a30be3056b52582 100644
--- a/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_5_0_12_Final.xml
+++ b/.idea/libraries/Maven__org_hibernate_hibernate_entitymanager_5_0_12_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml
index 0524b3eb7ce66780a84340966fb40daecf4dab06..2f27b7ee6ed9898f1aad72a6312a9f52ea7fad84 100644
--- a/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml
+++ b/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_3_6_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml
index f636e13b2378a8191135623d279a27e6e8d01d0a..78518716ef88ad4d7b51983eaf691029044f7e3a 100644
--- a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml
+++ b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_9_Final.xml b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_9_Final.xml
index 46dec34a428543db60411f32d47fe716b4ffd36e..bd11dc7e77eb28bcb54ed08e6ac60a5f8513f670 100644
--- a/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_9_Final.xml
+++ b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_9_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml
index 477a8050dd41f87525a3bffc17029fbfc6869c12..5e2cd55969b21eab4190afc280a27c04b8ad2eba 100644
--- a/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml
+++ b/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_jandex_2_0_0_Final.xml b/.idea/libraries/Maven__org_jboss_jandex_2_0_0_Final.xml
index d82c9c7e20f30b337f6bbda27b8bcecdc3b02ac7..d0ebe145a29c0190e6611e83ef364f232459cd11 100644
--- a/.idea/libraries/Maven__org_jboss_jandex_2_0_0_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_jandex_2_0_0_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml
index a0bd468118ebec8f06b1c75692accc76b6c05991..2aef18cc3e49ce70687212bd5d6859c18281a6b7 100644
--- a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_1_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
index 432bc158e4c57f8a40c7baf29134ec9181bf75e4..5fbd53749e7b02a75533dcf1366ff5dcd4e29e12 100644
--- a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_2_spec_1_0_0_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_2_spec_1_0_0_Final.xml
index ac6446fb7f5fdcd15d11a22f0e8f0a33338d636d..2e670090a006d3c0a249a67395b45004bebe99af 100644
--- a/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_2_spec_1_0_0_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_2_spec_1_0_0_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_websocket_jboss_websocket_api_1_1_spec_1_1_0_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_websocket_jboss_websocket_api_1_1_spec_1_1_0_Final.xml
index 627e9646445f58321774f88d8d87260678a58e02..f4b40915c649a2a94fe10fa0c61ef1b16b0b8ec9 100644
--- a/.idea/libraries/Maven__org_jboss_spec_javax_websocket_jboss_websocket_api_1_1_spec_1_1_0_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_websocket_jboss_websocket_api_1_1_spec_1_1_0_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_xnio_xnio_api_3_3_8_Final.xml b/.idea/libraries/Maven__org_jboss_xnio_xnio_api_3_3_8_Final.xml
index bfe89dd759865fe93f46476bec2ed43c2ae7f5a5..8ea0da737aae1b778b0a3bcf2d6f33530579fa38 100644
--- a/.idea/libraries/Maven__org_jboss_xnio_xnio_api_3_3_8_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_xnio_xnio_api_3_3_8_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_xnio_xnio_nio_3_3_8_Final.xml b/.idea/libraries/Maven__org_jboss_xnio_xnio_nio_3_3_8_Final.xml
index 8ba3633bc643b37ecb33af690ef61302917cd36c..286939d95bee5badae3e5c52edc8bcac356141db 100644
--- a/.idea/libraries/Maven__org_jboss_xnio_xnio_nio_3_3_8_Final.xml
+++ b/.idea/libraries/Maven__org_jboss_xnio_xnio_nio_3_3_8_Final.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml b/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml
index 87f451a0cd5e89b1843e3afcd30ed8fc1481dca9..f5c03e5365b695fd11dda62ceddfad468f52a386 100644
--- a/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml
+++ b/.idea/libraries/Maven__org_mockito_mockito_core_1_10_19.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml b/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml
index e2dbca0b3a6b524827f5f018b4836f5fbe31f37f..ccdfadc4eeb8a6b672afd6aa9621c5396de839c8 100644
--- a/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml
+++ b/.idea/libraries/Maven__org_mockito_mockito_core_2_15_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml
index 326df5fd86d6975527b7c2bb7923edf34695dfcf..0b48550d1fce918c239d4144a6a8d8c893854828 100644
--- a/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml
+++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
index 824027d7e68e3ce05f9639ea3dc5c76b66b3b150..1758c1dba8e7030ed9d1246b5dd938c25c58a607 100644
--- a/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
+++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml
index eb7f5a2c088262e125e8419e9594aad980a8f5c8..27945340f8c7502706bd3c3e5c25a719fa93af61 100644
--- a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml
+++ b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_3.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
index 90be6d1904a5f66e5a7f5a98c74746ded4e580a2..02126214845b555527b67237235ab966665615cc 100644
--- a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
+++ b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml
index e3ad2fd8186559a0afb5be89e262574020274f8b..e9b43d0a28e26fc3cdfbfe91ddd72fb644698e2d 100644
--- a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml
+++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_4_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
index 93bb39391702e71c2ceae27e02541d5b92bc6979..96fe96dd3217a3de11915a3b7a2500cdb9587712 100644
--- a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
+++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml
index 470798ac034af417422bee4c8d29ab70830c3fbb..c4120939711f5eb82002b8d16ee1a54d1c61bfc3 100644
--- a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml
+++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_25.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
index 03e23a6645ce8c889d55058515e6fe55606d4243..f32ce01c0d784022703e801a5fb29f125b004c62 100644
--- a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
+++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_25.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml
index 765db5afa125cad3d876be5c4dfd8b0623b9adcb..c377983de81d85538969f21339064189770f09be 100644
--- a/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml
+++ b/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_25.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
index 162f57adaab7d5d3c28ec8334852348ce3bb644d..74212aa28ca037a57338ca66edb609abe4cef50a 100644
--- a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_10_RELEASE.xml
index d85604a1cd9234c9364049832292b43608f1a80b..c1c2c3eb49a0d1cdd522f7720c62319b2a19167c 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_2_RELEASE.xml
index 0280ba2efe746daee5d33ed97464a787e0f26e95..66fa889921ed1a263e67f15e63e8b44d55eb569e 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_10_RELEASE.xml
index a793d51b615a5a27aade1b0ba1777d51d3229154..af86d82dd66e7701903a85af1d0712a964e5e775 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_2_RELEASE.xml
index 4d3e81282995e4186cc5f44d0ac5fd35e3fdec43..33f4b7e9e0cb1e95bbd7da50f664ea07576149ca 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_10_RELEASE.xml
index e74481bb6673c371cf62120b035b1f9e7d8a80fa..5ea1d2da85cef46084efd84bd1ad7241bc8d8887 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_2_RELEASE.xml
index 42ccd2734966fa30bf694096ec5c584da9876a76..be9f1bdb6ff237e22067120521fdaf492c174b1a 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_1_5_10_RELEASE.xml
index 437a41754229eee53280741559cc2482535fbac6..2c765ab2d56a03c25ae4a4ad0a0c87d6e21cda14 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_1_5_10_RELEASE.xml
index 6469e1c793d15dc8f6fb35bcfe558f3d26bf2735..2339aef57b832467993a6503392f9390774298b0 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_jpa_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_1_5_10_RELEASE.xml
index df672effccbc5d43cc144268e4e0e9e34dd91568..d41329e3677016aa8d4e7f85aee2a323be203bae 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_1_5_10_RELEASE.xml
index 3795cb4f8177452caac9bdc47123c8cd40f29264..630732038227a5e165e3bd2143359ba414183c6b 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_2_RELEASE.xml
index 5607597ea5d050e7aa627c83c0519da1e018f799..330b015c6e2db8d7f6b067c5761c684c97fccfa8 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_10_RELEASE.xml
index e89f0ee2d415205889c03cd10511be7f4fa5c53d..53b7ddefb3e3d4066e9122b1a08b54229b309f08 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_0_2_RELEASE.xml
index facc76511dddad1907fd7f9520bc6037e41b8a72..3363a96fa6d039991507ef881a29c0a2925f26d7 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_10_RELEASE.xml
index c533e3c5066748b1df2f442e7a01747a44caf533..144c865f3194d5053e058ce57f8573d17049a673 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_10_RELEASE.xml
index f70cd2d5a3eeeff6664db1aa2f2f82d715a3f2ba..1b30ec80294df0d12fcc7a9e53201b3621748943 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_2_RELEASE.xml
index afbacef6dd61d0f30ade514a29f8225453fc0f5d..38f53c129453356affb9c622537efeed2253bae2 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_10_RELEASE.xml
index 38214ad934353b01f4c8d377314fe7208514dd6c..bf896739ff02d09393039f03f477b35e5c80a6c7 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_2_RELEASE.xml
index bde27ebfeadccbf3b4d1d7ccd644a8169af7f670..fd789ec5117aaaf8a6d634845103272b91882626 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_undertow_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_undertow_1_5_10_RELEASE.xml
index 0aaf3b1e87f5f56b9c795fac7c136ca9ec87926c..ed6ef4abcd07501fff40717a5edacf1059548d96 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_undertow_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_undertow_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_10_RELEASE.xml
index 2531401d08cdaec6dcc572a40ed40a69a31df7aa..982db621f985672e09c3ab35c31864b05b237ad4 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_2_RELEASE.xml
index cb9a51b0715674a4698433f02a49020a0b47d18d..94351003d731139a07c4e85b8ba71460fea29c76 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_websocket_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_websocket_2_0_2_RELEASE.xml
index f21a278d7fe84d05a39833601adb6c66e06de723..3648bd8fd98f37947e5bd4c66f3664dd219bb27c 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_websocket_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_websocket_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_10_RELEASE.xml
index 0cbee00fd90d87d296a9c75f98515ca269c3fb9f..5726fac54d4f81dbc7e43b308cf45224442dc485 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_2_RELEASE.xml
index feb79c468b2a6d9d36dbedbe494b1413c9638f32..bb4fedda9d864bdab54345a07ffc56cfd4f3982d 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_10_RELEASE.xml
index a166460a451d627544d4a898082d26077f2386a4..156966d1dd251a44a64d5dddbcfb5237cde6b0c3 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_1_5_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_2_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_2_RELEASE.xml
index ef7152d9d6382ca5cf5ede1e2ad6d9e2bed8c38b..92bc780e869cc757b022edff6f1f847b51bbf2c2 100644
--- a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_2_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_2_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_commons_1_13_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_commons_1_13_10_RELEASE.xml
index 2104e7d109441a06c33a98af79e0405183b23cd8..9314774abf7fd1bbffcf64f2112532519ffe2c05 100644
--- a/.idea/libraries/Maven__org_springframework_data_spring_data_commons_1_13_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_data_spring_data_commons_1_13_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_1_11_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_1_11_10_RELEASE.xml
index b393add7fca357026d26ee075c626adafc59ee3d..23d1c9e1fdf49233491cbe333bce802ad2a46bdf 100644
--- a/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_1_11_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_data_spring_data_jpa_1_11_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_1_2_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_1_2_10_RELEASE.xml
index be92183bed3870c72bdb91a529008d59a6f1ca53..ff608471decbe8344f9d54c348f9c6ab1b0a1c13 100644
--- a/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_1_2_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_1_2_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_redis_1_8_10_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_1_8_10_RELEASE.xml
index 420b6ebd2cc9bdc205e2cd7b909bad78340b5f81..b09691587b695d97f921fd56f47a6b4a2745d8fd 100644
--- a/.idea/libraries/Maven__org_springframework_data_spring_data_redis_1_8_10_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_1_8_10_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_0_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_0_14_RELEASE.xml
index dcb10011b780706dca99a9d4f13ee5023a48c6d7..4908a3c788b7ec4b9e3aecde98a59a604455ec70 100644
--- a/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_0_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_security_oauth_spring_security_oauth2_2_0_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_4_RELEASE.xml
index 23805f7a619509f91736bbd915830a49fc268c3e..747d588a7a607242590f19a728885365b044b412 100644
--- a/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_4_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_security_spring_security_config_4_2_4_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_4_RELEASE.xml
index a6b5f8dbbc7ce5d7cbc9187fca68f97e98045ad3..cce102644b3771c10d99e745cca718d6126df8fd 100644
--- a/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_4_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_security_spring_security_core_4_2_4_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_4_RELEASE.xml
index b6d15b0fb6802c14d4b62965c1c344b4027fb6db..6e7c0335c514a81f79534df79f57516f02507902 100644
--- a/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_4_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_security_spring_security_web_4_2_4_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_14_RELEASE.xml
index 33d02d051321d82b1e7c1d0d641fe6fefeb877d7..27f88362e27732a2bca6be3fa921470a334a6c58 100644
--- a/.idea/libraries/Maven__org_springframework_spring_aop_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_5_0_6_RELEASE.xml
index 2e5e0cd2958e39e1a9d07d50e0b2b76bbc5f1ac6..cf6d6a3aa5751ec717d12f2c240d3778b4850d6d 100644
--- a/.idea/libraries/Maven__org_springframework_spring_aop_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_aop_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_aspects_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aspects_4_3_14_RELEASE.xml
index 9038a9d84a567fa03ea899f23ee845dc06a208e3..74d6c82a9af50bbaf289bf5270b0357dc6454a72 100644
--- a/.idea/libraries/Maven__org_springframework_spring_aspects_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_aspects_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_14_RELEASE.xml
index cc32c79e2feb12c381b33894739e1a867a84020b..1e22c2467456681aeee918efa25731d4824bf05b 100644
--- a/.idea/libraries/Maven__org_springframework_spring_beans_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_5_0_6_RELEASE.xml
index 60c94f91c099de2ef8c4e78e15f70b9cb18dfc42..c465436b892f508544ff6fcb93833fd21da78927 100644
--- a/.idea/libraries/Maven__org_springframework_spring_beans_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_beans_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_context_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_4_3_14_RELEASE.xml
index 2615ead755c2de363b6dfee2fe8276a2281db158..a9d03a504f283f1224009e560fd4c29bbea4f082 100644
--- a/.idea/libraries/Maven__org_springframework_spring_context_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_context_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_context_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_5_0_6_RELEASE.xml
index 02289872d12c65c3ee4ebdba41d1f5a063e3b6ac..bf3892b91031d96da67489c55b8ab39b4e77d6b2 100644
--- a/.idea/libraries/Maven__org_springframework_spring_context_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_context_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_context_support_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_support_4_3_14_RELEASE.xml
index a8bfca043c8acf70b8cc427e25305b6602b941e5..37097db0763f85ad0b9faa8ba2c1f3d31d1afa0d 100644
--- a/.idea/libraries/Maven__org_springframework_spring_context_support_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_context_support_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_core_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_4_3_14_RELEASE.xml
index 767a379dab1f0406d92dd2648f69a2f84d2a5e45..3a3838e7db80b85506b238c61cd66a28dae20a6b 100644
--- a/.idea/libraries/Maven__org_springframework_spring_core_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_core_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_core_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_5_0_6_RELEASE.xml
index 5aa46abbbf755560eb035e3bba734036c98dd41b..57b6ca3359f40036a76436564dee84137fed490a 100644
--- a/.idea/libraries/Maven__org_springframework_spring_core_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_core_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_14_RELEASE.xml
index 0c84763a3ec8b1e1e398ed2a84a475e07e5df1b0..283861fcca9eb51ba73585819c4625c302c2bdcb 100644
--- a/.idea/libraries/Maven__org_springframework_spring_expression_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_5_0_6_RELEASE.xml
index be16e9008622b842acdbc78d555d30460d9072bc..d3a4a22c422569b631edc841134c2abd5aaea59b 100644
--- a/.idea/libraries/Maven__org_springframework_spring_expression_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_expression_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_6_RELEASE.xml
index 1af17f4db38d5fd897d37d86d22599c358991d23..8435f3ad97bd0341635b6cea72139ea2c03a1b0a 100644
--- a/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_jcl_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_jdbc_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jdbc_4_3_14_RELEASE.xml
index d1bf0141d8aee422e564aac62ab2196064dddbeb..d20124b9ceb0fb08ef5137d662f0c84be3f3a9ca 100644
--- a/.idea/libraries/Maven__org_springframework_spring_jdbc_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_jdbc_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_6_RELEASE.xml
index 40f6802838694d52c90e49229a2eda5d584cb318..812a221c7e406af75a058ab28197fbefdc4b7e49 100644
--- a/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_messaging_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_orm_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_orm_4_3_14_RELEASE.xml
index 994e9391dcbfe4b2d5326dd5d90b39b75ddfbeb9..cefc72ad2f16b59ef6a2f320cdbbd029a414298a 100644
--- a/.idea/libraries/Maven__org_springframework_spring_orm_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_orm_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_oxm_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_oxm_4_3_14_RELEASE.xml
index dc2d6f7e72b2cd2d9973a6b56bbb35c907e00df0..db84aecd5019b2d3db05975b41b8e7f53b069ee2 100644
--- a/.idea/libraries/Maven__org_springframework_spring_oxm_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_oxm_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_test_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_test_4_3_14_RELEASE.xml
index ddb787b6ced899452872d36add29741d5ac05d54..0f7b68d8b1f1eb816f1205d9b17fba3fc5df92c8 100644
--- a/.idea/libraries/Maven__org_springframework_spring_test_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_test_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_test_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_test_5_0_6_RELEASE.xml
index 92f31f2b5dc6d53e92ad336ce68fa4dfdb722557..8c4db1094a5f2fb32bc6c82fe306db33b417162e 100644
--- a/.idea/libraries/Maven__org_springframework_spring_test_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_test_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_tx_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_tx_4_3_14_RELEASE.xml
index 62076ed982ecc39dbe1d20b2d47b6b86a0fff9b5..a48087a05443181073bbcb9267a31e23506c26ea 100644
--- a/.idea/libraries/Maven__org_springframework_spring_tx_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_tx_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_web_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_4_3_14_RELEASE.xml
index bddfa8073f1e31645b32b43a9ed1d6437a3b6d01..837ecd473b60e571a548d61148eecd14e188fc68 100644
--- a/.idea/libraries/Maven__org_springframework_spring_web_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_web_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_web_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_5_0_6_RELEASE.xml
index 8303a6b03cc834870a2e2783887069dc922bc924..e904f06b4e5185bd5839f52c7e6ada6f2b40f5e7 100644
--- a/.idea/libraries/Maven__org_springframework_spring_web_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_web_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_14_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_14_RELEASE.xml
index cfc5d990fc838455042dff8348efbeee2927c8c2..e02367df1635f26faf2b074d135580bb8a5e339c 100644
--- a/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_14_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_3_14_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_6_RELEASE.xml
index c1a58a7b381a57220a718c2c2735787c751a8aa0..5c711457f533772318735a9e4612ff18a7202def 100644
--- a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_6_RELEASE.xml
index d2c643a5d828ef0c4adb5e9d8b664f32b9cbdeb7..f2e89b773ca7239620fe2cf12dd67e6f81e7c400 100644
--- a/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_6_RELEASE.xml
+++ b/.idea/libraries/Maven__org_springframework_spring_websocket_5_0_6_RELEASE.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml
index a346198f37d778727ea72bfdbe6f42253e965358..fec8bf811b76e5f844656b0399613464dd03cd49 100644
--- a/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml
+++ b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_5_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml
index bf072add403c30783e073df4bd35ac86462b3ab2..8e1f138abb999f7622ecf175142b80b6f608f826 100644
--- a/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_17.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml
index 8a53e93ddd133bf751edb425072524c60f5f469c..07b5aa90219c16e4b66dba402258818331bc7bee 100644
--- a/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml b/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml
index e5d7e694d814eea5bbc2ca384385a8b971e50b7c..7916a1a55bcdb2444241028d642139f1d065d8de 100644
--- a/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml
+++ b/.idea/libraries/Maven__redis_clients_jedis_2_9_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 65e4fe937ce49cb2c1bd16c25486d0b792acebbf..3b90ffee960de1b39b6be74a832e5c822ac8879b 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -16,6 +16,8 @@
+
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 5ccbaa3ed978004bbd667dea3585c7e1eb7e9e56..e15153a4de9d22d178f2726810d79e82ca03b5e2 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -6,6 +6,8 @@
+
+
diff --git a/springboot-hibernate-interceptoer/pom.xml b/springboot-hibernate-interceptoer/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a67fd6e7dba06e4a917abbaf0753e344a7b12e54
--- /dev/null
+++ b/springboot-hibernate-interceptoer/pom.xml
@@ -0,0 +1,73 @@
+
+
+
+ spring-boot-demo
+ com.vesus
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ springboot-hibernate-interceptoer
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+ com.alibaba
+ druid
+ 1.0.29
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+ org.springframework.boot
+ spring-boot-devtools
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
+ org.hibernate
+ hibernate-envers
+ 5.0.12.Final
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 1.4.2.RELEASE
+
+
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/SpringBootHibernateAditInterceptorApplication.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/SpringBootHibernateAditInterceptorApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..e816720d44223c8e7e17ffa69f8e17c5c7f92e95
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/SpringBootHibernateAditInterceptorApplication.java
@@ -0,0 +1,63 @@
+package com.vesus;
+
+import com.vesus.audit.AuditOperationRecordAware;
+import com.vesus.audit.AuditOperationRecordAwareImpl;
+import com.vesus.listener.CustomAuditor;
+import com.vesus.listener.CustomInterceptor;
+import org.hibernate.SessionFactory;
+import org.hibernate.jpa.HibernateEntityManagerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.domain.AuditorAware;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+@SpringBootApplication
+@EnableTransactionManagement
+@EnableJpaRepositories
+@EnableJpaAuditing
+public class SpringBootHibernateAditInterceptorApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBootHibernateAditInterceptorApplication.class, args);
+ }
+
+ @Bean
+ public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
+ return hemf.getSessionFactory();
+ }
+
+ @Bean
+ AuditOperationRecordAware auditOperationRecordAware() {
+ return new AuditOperationRecordAwareImpl();
+ }
+
+
+ @Bean
+ AuditorAware auditorProvider() {
+ return new CustomAuditor();
+ }
+
+
+ @Resource
+ private SessionFactory sessionFactory;
+ //@Autowired
+ //AuditOperationRecord auditOperationRecord;
+
+ @Autowired
+ CustomInterceptor interceptor;
+
+ @PostConstruct
+ public void registerInterceptor() {
+ //CustomInterceptor interceptor = new CustomInterceptor();
+ //interceptor.setAuditOperationRecord(auditOperationRecord);
+ sessionFactory.withOptions().interceptor(interceptor);
+ }
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditEntityAlias.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditEntityAlias.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b46ff2368bcb2d47fe3cd711debbc9d70fef95
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditEntityAlias.java
@@ -0,0 +1,12 @@
+package com.vesus.audit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface AuditEntityAlias {
+ String value();
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditFieldAlias.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditFieldAlias.java
new file mode 100644
index 0000000000000000000000000000000000000000..dcb8cbe7f740e97f83a334bc4a5e3b53b1098652
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditFieldAlias.java
@@ -0,0 +1,12 @@
+package com.vesus.audit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface AuditFieldAlias {
+ String value() default "";
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditModifyFieldObject.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditModifyFieldObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2940f83ec405b6dd0b05c5ff4b86a72686badd3
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditModifyFieldObject.java
@@ -0,0 +1,61 @@
+package com.vesus.audit;
+
+public class AuditModifyFieldObject {
+
+ private Object oldValue;
+ private Object newValue;
+ private Object property;
+ private Object type;
+ private String alias;
+ private boolean isAudit;
+
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public Object getOldValue() {
+ return oldValue;
+ }
+
+
+ public void setOldValue(Object oldValue) {
+ this.oldValue = oldValue;
+ }
+
+ public Object getNewValue() {
+ return newValue;
+ }
+
+ public void setNewValue(Object newValue) {
+ this.newValue = newValue;
+ }
+
+ public Object getProperty() {
+ return property;
+ }
+
+ public void setProperty(Object property) {
+ this.property = property;
+ }
+
+ public Object getType() {
+ return type;
+ }
+
+ public void setType(Object type) {
+ this.type = type;
+ }
+
+ public boolean isAudit() {
+ return isAudit;
+ }
+
+ public void setAudit(boolean audit) {
+ isAudit = audit;
+ }
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecord.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecord.java
new file mode 100644
index 0000000000000000000000000000000000000000..f646d79359129e0dcff72e5ecea0aceab06c8f41
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecord.java
@@ -0,0 +1,174 @@
+package com.vesus.audit;
+
+import org.hibernate.type.Type;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class AuditOperationRecord {
+
+ private AuditOperationRecordAware auditOperationRecordAware;
+
+ @Autowired(required = false)
+ public void setAuditOperationRecordAware(AuditOperationRecordAware auditOperationRecordAware) {
+ this.auditOperationRecordAware = auditOperationRecordAware;
+ }
+
+ public boolean onSaveRecord(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
+ System.out.println("=========添加============》");
+ boolean result = processor(entity, id, state, null, propertyNames, types);
+ return result;
+ }
+
+
+ public boolean onUpdateRecord(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
+ System.out.println("=========更新============》");
+ boolean result = processor(entity, id, currentState, previousState, propertyNames, types);
+ return result;
+ }
+
+
+ public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
+ System.out.println("=========删除============》");
+ processor(entity, id, null, state, propertyNames, types);
+ }
+
+ /**
+ * 处理相同变更实体信息的公共类
+ *
+ * @param entity
+ * 操作实体对象
+ * @param id
+ * 操作实体主键编号
+ * @param currentState
+ * 当前更改字段对象数组
+ * @param previousState
+ * 变更前字段信息对象数组
+ * @param propertyNames
+ * 英文属性名数组
+ * @param types
+ * 属性类型数组hibernate封装
+ * @return
+ */
+ private boolean processor(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
+ Class> entityClass = entity.getClass();
+ if (auditOperationRecordAware == null) {
+ return true;
+ }
+ if (!entityClass.isAnnotationPresent(AuditEntityAlias.class)) {
+ return true;
+ }
+ AuditEntityAlias entityAlias = entityClass.getAnnotation(AuditEntityAlias.class);
+ String tableName = entityAlias.value();
+
+ //设置别名和审计字段长度
+ boolean[] isAudits = new boolean[propertyNames.length];
+ String[] alias = new String[propertyNames.length];
+ try {
+ for (int i = 0; i < propertyNames.length; i++) {
+ //Field field = entityClass.getField(propertyNames[i]);
+ Field field = entityClass.getDeclaredField(propertyNames[i]);
+ field.setAccessible(true);
+ if (field.isAnnotationPresent(AuditFieldAlias.class)) {
+ AuditFieldAlias auditFieldAlias = field.getAnnotation(AuditFieldAlias.class);
+ isAudits[i] = true;
+ alias[i] = auditFieldAlias.value();
+ } else {
+ isAudits[i] = false;
+ alias[i] = "";
+ }
+ }
+ } catch (NoSuchFieldException e) {
+ System.err.println(e.getMessage());
+ }
+
+ //生成改变字段信息列表
+ List auditModifyFieldObject = getAuditModifyFieldObject(currentState, previousState, propertyNames, types, alias, isAudits);
+ long timestamp = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()).getTime();
+ AuditOperationType operationType = AuditOperationType.UPDATE;
+ //根据变更对象是否为空判断操作类型
+ if (previousState != null && currentState != null) {
+ operationType = AuditOperationType.UPDATE;
+ }
+ if (previousState == null && currentState != null) {
+ operationType = AuditOperationType.INSERT;
+ }
+ if (previousState != null && currentState == null) {
+ operationType = AuditOperationType.DELETE;
+ }
+ if (auditOperationRecordAware != null) {
+ auditOperationRecordAware.saveAuditOperationLog(tableName, id, auditModifyFieldObject, timestamp, operationType);
+ }
+ return true;
+
+ }
+
+ /**
+ * 获取自定义封装的字段修改对象类,用来保存更改前后的字段变化信息
+ *
+ * @param currentState
+ * 操作后对象,也是当前对象
+ * @param previousState
+ * 变更前对象
+ * @param propertyNames
+ * 属性英文变量名称
+ * @param types
+ * 属性类型,这里是hibernate帮忙生成的一个类型
+ * @param alias
+ * 中文别名,这个属性需要结合 AuditFieldAlias 注解使用才能获取别名
+ * @param isAudits
+ * 是否审计,如果为true表示此字段需要保存更改变更,false相反
+ * @return
+ */
+ private List getAuditModifyFieldObject(Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types, String[] alias, boolean[] isAudits) {
+ List list = new ArrayList<>(10);
+ int fieldCount = 0;
+ //获取字段总个数
+ if (currentState != null && currentState.length > 0 && fieldCount == 0) {
+ fieldCount = currentState.length;
+ }
+ if (previousState != null && previousState.length > 0 && fieldCount == 0) {
+ fieldCount = previousState.length;
+ }
+ for (int i = 0; i < fieldCount; i++) {
+ AuditModifyFieldObject auditModifyObject = new AuditModifyFieldObject();
+ //设置更改前的值
+ if (previousState != null && previousState[i] != null) {
+ auditModifyObject.setOldValue(previousState[i]);
+ }
+ // 设置更改后的当前值
+ if (currentState != null && currentState[i] != null) {
+ auditModifyObject.setNewValue(currentState[i]);
+ }
+ //设置属性名
+ if (propertyNames != null && propertyNames[i] != null) {
+ auditModifyObject.setProperty(propertyNames[i]);
+ }
+ //设置类型
+ if (types != null && types[i] != null) {
+ auditModifyObject.setType(types[i]);
+ }
+ // 设置别名
+ if (alias != null && alias[i] != null) {
+ auditModifyObject.setAlias(alias[i]);
+ }
+ // 是否审计
+ if (isAudits != null && isAudits[i]) {
+ auditModifyObject.setAudit(true);
+ } else {
+ auditModifyObject.setAudit(false);
+ }
+ list.add(auditModifyObject);
+ }
+ return list;
+ }
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecordAware.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecordAware.java
new file mode 100644
index 0000000000000000000000000000000000000000..676fff1bc0b18ab184d418eab91303dcae6aa569
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecordAware.java
@@ -0,0 +1,8 @@
+package com.vesus.audit;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface AuditOperationRecordAware {
+ void saveAuditOperationLog(String tableName, Serializable id, List auditModifyFieldObject, long timestamp, AuditOperationType operationType);
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecordAwareImpl.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecordAwareImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..92723fc7a033d81d5145c414f3681f3ba36b46bb
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationRecordAwareImpl.java
@@ -0,0 +1,82 @@
+package com.vesus.audit;
+
+import com.vesus.domain.AuditRecordLog;
+import com.vesus.service.AuditRecordLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class AuditOperationRecordAwareImpl implements AuditOperationRecordAware {
+
+ @Autowired
+ private AuditRecordLogService auditRecordLogService;
+
+ @Override
+ public void saveAuditOperationLog(String tableName, Serializable id, List auditModifyFieldObject, long timestamp, AuditOperationType operation) {
+
+
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String date = df.format(new Date(timestamp));
+ System.out.println("更改的表名=========》" + tableName);
+ System.out.println("主键=========》" + id);
+ System.out.println("更改时间=========》" + date);
+
+
+ // todo 保存到数据库
+ int i = 0;
+ for (AuditModifyFieldObject modifyFieldObject : auditModifyFieldObject) {
+ Object oldValue = modifyFieldObject.getOldValue();
+ Object newValue = modifyFieldObject.getNewValue();
+ if (modifyFieldObject.isAudit() && !(oldValue == null && newValue == null) && !("".equals(oldValue) && "".equals(newValue))) {
+ AuditRecordLog auditRecordLog = new AuditRecordLog();
+ // 判断值不全是空或者前后值是否相等
+ if (oldValue == null || newValue == null) {
+ auditRecordLog.setOldValue(oldValue + "");
+ auditRecordLog.setNewValue(newValue + "");
+ } else {
+ if (!oldValue.equals(newValue)) {
+ auditRecordLog.setOldValue(oldValue + "");
+ auditRecordLog.setNewValue(newValue + "");
+ } else {
+ continue;
+ }
+ }
+ auditRecordLog.setPropertyName(modifyFieldObject.getProperty() + "");
+ auditRecordLog.setAlias(modifyFieldObject.getAlias());
+ auditRecordLog.setEntityName(tableName);
+ auditRecordLog.setModifiedDate(date);
+ String username = "特斯特" + i++; //todo 获取用户名等信息
+ auditRecordLog.setUserName(username);
+ String description = "";
+ //如果是添加
+ if (AuditOperationType.INSERT.equals(operation)) {
+ description = getOperationDescription(username, date, operation, newValue + "");
+
+ }
+ //如果是更新
+ if (AuditOperationType.UPDATE.equals(operation)) {
+ description = getOperationDescription(username, date, operation, oldValue + "为" + newValue + "");
+ }
+ //如果是删除
+ if (AuditOperationType.DELETE.equals(operation)) {
+ description = getOperationDescription(username, date, operation, oldValue + "");
+
+ }
+ auditRecordLog.setDescription(description);
+ System.out.println("============描述========》" + description);
+ auditRecordLogService.save(auditRecordLog);
+ }
+ }
+
+ }
+
+ private String getOperationDescription(String userName, String datetime, AuditOperationType operation, String obj) {
+ return new StringBuffer().append(userName).append("在").append(datetime).append(operation.getValue()).append("了").append(obj).toString();
+
+ }
+
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationType.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..cdbe7ea80b97b66585e7f3d052f74cf5b0afd0fd
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditOperationType.java
@@ -0,0 +1,74 @@
+package com.vesus.audit;
+
+/**
+ * 审计操作对象类别枚举
+ */
+public enum AuditOperationType {
+ INSERT((byte) 0) {
+ @Override
+ public String getValue() {
+ return "新增";
+ }
+ }, UPDATE((byte) 1) {
+ @Override
+ public String getValue() {
+ return "修改";
+ }
+ }, DELETE((byte) 2) {
+ @Override
+ public String getValue() {
+ return "删除";
+ }
+ };
+
+ private String value;
+ private Byte representation;
+
+ AuditOperationType(byte representation) {
+ this.representation = representation;
+ }
+
+ AuditOperationType() {
+ value = toString();
+ }
+
+ public static AuditOperationType parse(final String value) {
+ AuditOperationType operation = null;
+ for (final AuditOperationType op : AuditOperationType.values()) {
+ if (op.getValue().equals(value)) {
+ operation = op;
+ break;
+ }
+ }
+ return operation;
+ }
+
+ public static AuditOperationType parseNumber(final Object representation) {
+ System.out.println(representation.getClass().getName());
+ if (representation == null || !(representation instanceof Byte)) {
+ return null;
+ }
+ switch ((Byte) representation) {
+ case 0: {
+ return INSERT;
+ }
+ case 1: {
+ return UPDATE;
+ }
+ case 2: {
+ return DELETE;
+ }
+ default: {
+ throw new IllegalArgumentException("Unknown representation: " + representation);
+ }
+ }
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public Byte getRepresentation() {
+ return representation;
+ }
+}
\ No newline at end of file
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditPrimaryID.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditPrimaryID.java
new file mode 100644
index 0000000000000000000000000000000000000000..2abd7d6e26339c616522c16f6100dc5de0c20e71
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/audit/AuditPrimaryID.java
@@ -0,0 +1,11 @@
+package com.vesus.audit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface AuditPrimaryID {
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/controller/TUserController.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/controller/TUserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..184ad6174681308458b0ad79a218fab226d3f791
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/controller/TUserController.java
@@ -0,0 +1,64 @@
+package com.vesus.controller;
+
+
+import com.vesus.domain.TUser;
+import com.vesus.service.TUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/tUserController")
+public class TUserController {
+
+ @Autowired
+ private TUserService tUserService;
+
+ @RequestMapping("/save")
+ public TUser save(TUser tUser) {
+ return tUserService.save(tUser);
+ }
+
+ @RequestMapping("/findOneById")
+ public TUser findOneById(Integer id) {
+ return tUserService.findOne(id);
+ }
+
+ @RequestMapping("/findOptionalOneById")
+ public Optional findOptionOneById(Integer id) {
+ return tUserService.findById(id);
+ }
+
+ @RequestMapping("/existsById")
+ public boolean existsById(Integer id) {
+ return tUserService.existsById(id);
+ }
+
+ @RequestMapping("/findAll")
+ public List findAll() {
+ return tUserService.findAll();
+ }
+
+ @RequestMapping("/findAllByEntityManager")
+ public List findAllByEntityManager() {
+ return tUserService.findAllByEntityManager("select * from t_user", TUser.class);
+ }
+
+ @RequestMapping("/count")
+ public Long count() {
+ return tUserService.count();
+ }
+
+ @RequestMapping("/deleteById")
+ public void deleteById(Integer id) {
+ tUserService.deleteById(id);
+ }
+
+ @RequestMapping("/deleteByEntity")
+ public void delete(TUser tUser) {
+ tUserService.delete(tUser);
+ }
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/AuditRecordLog.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/AuditRecordLog.java
new file mode 100644
index 0000000000000000000000000000000000000000..896f66cef9398fd01fabaebaf63e3a192a3be38b
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/AuditRecordLog.java
@@ -0,0 +1,120 @@
+package com.vesus.domain;
+
+
+@Entity
+@Table(name = "t_audit_record_log")
+public class AuditRecordLog {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private int id;
+
+ @Column(name = "t_entity_name")
+ private String entityName;
+
+ @Column(name = "t_property_name")
+ private String propertyName;
+
+ @Column(name = "t_alias")
+ private String alias;
+
+ @Column(name = "t_old_value")
+ private String oldValue;
+
+ @Column(name = "t_new_value")
+ private String newValue;
+
+ @Column(name = "t_user_id")
+ private int userId;
+
+ @Column(name = "t_user_name")
+ private String userName;
+
+ @Column(name = "t_modified_date")
+ private String modifiedDate;
+
+ @Column(name = "t_description")
+ private String description;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ public void setPropertyName(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ public String getEntityName() {
+ return entityName;
+ }
+
+ public void setEntityName(String entityName) {
+ this.entityName = entityName;
+ }
+
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public String getOldValue() {
+ return oldValue;
+ }
+
+ public void setOldValue(String oldValue) {
+ this.oldValue = oldValue;
+ }
+
+ public String getNewValue() {
+ return newValue;
+ }
+
+ public void setNewValue(String newValue) {
+ this.newValue = newValue;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getModifiedDate() {
+ return modifiedDate;
+ }
+
+ public void setModifiedDate(String modifiedDate) {
+ this.modifiedDate = modifiedDate;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/CustomerRevisionEntity.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/CustomerRevisionEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b27c14714099de248da70f11c7e8670c497e6fe
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/CustomerRevisionEntity.java
@@ -0,0 +1,50 @@
+package com.vesus.domain;
+
+
+import com.vesus.listener.CustomRevisionListener;
+import org.hibernate.envers.RevisionEntity;
+import org.hibernate.envers.RevisionNumber;
+import org.hibernate.envers.RevisionTimestamp;
+
+
+@Entity
+@Table(name = "t_revisions_info")
+@RevisionEntity(CustomRevisionListener.class)
+public class CustomerRevisionEntity {
+ @Id
+ @GeneratedValue
+ @RevisionNumber
+ @Column(name = "id")
+ private int id;
+
+ @RevisionTimestamp
+ @Column(name = "timestamp")
+ private long timestamp;
+
+ @Column(name = "user_name")
+ private String userName;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/TUser.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/TUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..379ffb30119660c82aa40bdbf72dafecb13f3e05
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/domain/TUser.java
@@ -0,0 +1,137 @@
+package com.vesus.domain;
+
+import com.vesus.audit.AuditEntityAlias;
+import com.vesus.audit.AuditFieldAlias;
+import com.vesus.audit.AuditPrimaryID;
+import com.vesus.listener.CustomAuditListener;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+
+import java.io.Serializable;
+
+
+/**
+ * @author wx11055@163.com
+ * @date 2018-06-27 23:19:28
+ * Created by wuxia .
+ */
+@Entity
+@Table(name = "t_user")
+@Audited
+@EntityListeners(CustomAuditListener.class)
+@AuditEntityAlias("用户信息表")
+//@AuditTable(value = "_revisions_info")
+public class TUser implements Serializable {
+
+ /**
+ * 编号
+ */
+ @Id
+ @GeneratedValue
+ @Column(name = "t_id")
+ @AuditPrimaryID
+ private Integer id;
+
+ @Column(name = "t_address")
+ @AuditFieldAlias("联系地址")
+ private String tAddress;
+
+ @Column(name = "t_age")
+ @AuditFieldAlias("年龄")
+ private Integer tAge;
+
+ @Column(name = "t_name")
+ @AuditFieldAlias("姓名")
+ private String tName;
+
+ @Column(name = "t_pwd")
+ @AuditFieldAlias("密码")
+ private String tPwd;
+
+ @Column(name = "t_creator")
+ @CreatedBy
+ @LastModifiedBy
+ private String tCreator;
+
+
+ @Column(name = "t_modified_date")
+ @LastModifiedDate
+ private String tModifiedDate;
+
+ public String gettCreator() {
+ return tCreator;
+ }
+
+ public void settCreator(String tCreator) {
+ this.tCreator = tCreator;
+ }
+
+ public String gettModifiedDate() {
+ return tModifiedDate;
+ }
+
+ public void settModifiedDate(String tModifiedDate) {
+ this.tModifiedDate = tModifiedDate;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+
+ public String gettAddress() {
+ return tAddress;
+ }
+
+ public void settAddress(String tAddress) {
+ this.tAddress = tAddress;
+ }
+
+ public Integer gettAge() {
+ return tAge;
+ }
+
+ public void settAge(Integer tAge) {
+ this.tAge = tAge;
+ }
+
+ public String gettName() {
+ return tName;
+ }
+
+ public void settName(String tName) {
+ this.tName = tName;
+ }
+
+ public String gettPwd() {
+ return tPwd;
+ }
+
+ public void settPwd(String tPwd) {
+ this.tPwd = tPwd;
+ }
+
+
+ //@PrePersist
+ //public void onPrePersist() {
+ //
+ // System.out.println("============>>>>>>>持久化保存之前");
+ //}
+ //
+ //@PreUpdate
+ //public void onPreUpdate() {
+ // System.out.println("=============>>>>>>>更新之前");
+ //}
+ //
+ //@PreRemove
+ //public void onPreRemove() {
+ // System.out.println("=================>>>>>删除前");
+ //}
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomAuditListener.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomAuditListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..2603843dd65b5a87b405c5fcc1de23d29ffc80ce
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomAuditListener.java
@@ -0,0 +1,18 @@
+package com.vesus.listener;
+
+
+import javax.persistence.PrePersist;
+import javax.persistence.PreRemove;
+import javax.persistence.PreUpdate;
+
+public class CustomAuditListener {
+
+
+ @PrePersist
+ @PreUpdate
+ @PreRemove
+ private void beforeAnyOperation(Object object) {
+ }
+
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomAuditor.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomAuditor.java
new file mode 100644
index 0000000000000000000000000000000000000000..462b5fc40a5c1eb96ef71d9df876e3e0aa7e96b0
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomAuditor.java
@@ -0,0 +1,27 @@
+package com.vesus.listener;
+
+
+import org.springframework.data.domain.AuditorAware;
+
+public class CustomAuditor implements AuditorAware {
+ private String username;
+ private String userId;
+
+ @Override
+ public String getCurrentAuditor() {
+ return this.username;
+ }
+
+ public CustomAuditor() {
+ super();
+ }
+
+ public CustomAuditor(String username) {
+ this.username = username;
+ }
+
+ public CustomAuditor(String username, String userId) {
+ this.username = username;
+ this.userId = userId;
+ }
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomInterceptor.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..70caa6b71af66dc9a8d6c44054e57f0cd17cde30
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomInterceptor.java
@@ -0,0 +1,42 @@
+package com.vesus.listener;
+
+
+import com.vesus.audit.AuditOperationRecord;
+import org.hibernate.EmptyInterceptor;
+import org.hibernate.type.Type;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+@Component
+public class CustomInterceptor extends EmptyInterceptor {
+
+ @Autowired(required = false)
+ AuditOperationRecord auditOperationRecord;
+
+
+ public void setAuditOperationRecord(AuditOperationRecord auditOperationRecord) {
+ this.auditOperationRecord = auditOperationRecord;
+ }
+
+ @Override
+ public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
+ auditOperationRecord.onSaveRecord(entity, id, state, propertyNames, types);
+ return super.onSave(entity, id, state, propertyNames, types);
+ }
+
+ @Override
+ public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
+ auditOperationRecord.onUpdateRecord(entity, id, currentState, previousState, propertyNames, types);
+
+ return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types);
+
+ }
+
+ @Override
+ public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
+ auditOperationRecord.onDelete(entity, id, state, propertyNames, types);
+ super.onDelete(entity, id, state, propertyNames, types);
+
+ }
+}
\ No newline at end of file
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomRevisionListener.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomRevisionListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1295aa10a00b6effef25c658cc40a0e9c38fabe
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/listener/CustomRevisionListener.java
@@ -0,0 +1,16 @@
+package com.vesus.listener;
+
+
+import com.vesus.domain.CustomerRevisionEntity;
+import org.hibernate.envers.RevisionListener;
+
+/**
+ * 修订监听器
+ */
+public class CustomRevisionListener implements RevisionListener {
+
+ public void newRevision(Object revisionEntity) {
+ CustomerRevisionEntity exampleRevEntity = (CustomerRevisionEntity) revisionEntity;
+ exampleRevEntity.setUserName("matosiki");
+ }
+}
\ No newline at end of file
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/repository/AuditRecordLogRepository.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/repository/AuditRecordLogRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..6557320726de98256768defdf5ff167c1ea73d5d
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/repository/AuditRecordLogRepository.java
@@ -0,0 +1,11 @@
+package com.vesus.repository;
+
+
+import com.vesus.domain.AuditRecordLog;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository("operationRevisionLogRepository")
+public interface AuditRecordLogRepository extends CrudRepository {
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/repository/TUserRepository.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/repository/TUserRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..af300c686b826cff8f80508a989935f7cc246f34
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/repository/TUserRepository.java
@@ -0,0 +1,30 @@
+package com.vesus.repository;
+
+
+import com.vesus.domain.TUser;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.stream.Stream;
+
+/**
+ * @author wx11055@163.com
+ * @date 2018-06-27 23:19:28
+ * Created by CodeGen .
+ */
+@Repository("tUserRepository")
+public interface TUserRepository extends CrudRepository {
+ @Query("select l from TUser l")
+ Page findAllPaged(Pageable pageable);
+
+ //Page findAllAndSortPaged(Pageable pageable, Sort sort);
+
+ @Query("select l from TUser l")
+ Stream findAllAndStreamPaged(Pageable pageable);
+
+ //Page queryFirst10ByName(String name, Pageable pageable);
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/AuditRecordLogService.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/AuditRecordLogService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ad6b652516561debd79dd369533c17b8b261a1a
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/AuditRecordLogService.java
@@ -0,0 +1,19 @@
+package com.vesus.service;
+
+
+import com.vesus.domain.AuditRecordLog;
+
+import java.util.List;
+
+public interface AuditRecordLogService {
+
+ List findAll();
+
+ AuditRecordLog save(AuditRecordLog businessChangeLog);
+
+ AuditRecordLog findOne(long id);
+
+ void delete(long id);
+
+ List findByName(String name);
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/TUserService.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/TUserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a388763c9e61b09b28bbca6931f258ff2b7476b
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/TUserService.java
@@ -0,0 +1,40 @@
+package com.vesus.service;
+
+
+import com.vesus.domain.TUser;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author wx11055@163.com
+ * @date 2018-06-27 23:19:28
+ * Created by wuxia .
+ */
+public interface TUserService {
+
+ TUser save(TUser tUser);
+
+ Iterable saveAll(Iterable list);
+
+ TUser findOne(Integer id);
+
+ Optional findById(Integer id);
+
+ boolean existsById(Integer id);
+
+ List findAll();
+
+ Long count();
+
+ void deleteById(Integer id);
+
+ void delete(TUser tUser);
+
+ void deleteAll(Iterable extends TUser> iter);
+
+ Page findAllPaged(Integer pageNum, Integer pageSize);
+
+ List findAllByEntityManager(String excuteSql, Class returnType);
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/imp/AuditRecordLogServiceImpl.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/imp/AuditRecordLogServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..66bdf7694c69b53071c81226752b4b5b6d49c841
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/imp/AuditRecordLogServiceImpl.java
@@ -0,0 +1,42 @@
+package com.vesus.service.imp;
+
+
+import com.vesus.domain.AuditRecordLog;
+import com.vesus.repository.AuditRecordLogRepository;
+import com.vesus.service.AuditRecordLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class AuditRecordLogServiceImpl implements AuditRecordLogService {
+
+ @Autowired
+ private AuditRecordLogRepository auditRecordLogRepository;
+
+ @Override
+ public List findAll() {
+ return null;
+ }
+
+ @Override
+ public AuditRecordLog save(AuditRecordLog auditRecordLog) {
+ return auditRecordLogRepository.save(auditRecordLog);
+ }
+
+ @Override
+ public AuditRecordLog findOne(long id) {
+ return null;
+ }
+
+ @Override
+ public void delete(long id) {
+
+ }
+
+ @Override
+ public List findByName(String name) {
+ return null;
+ }
+}
diff --git a/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/imp/TUserServiceImpl.java b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/imp/TUserServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7efe1748af741bf921f1235f2ee1c2f5e9ba2489
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/java/com/vesus/service/imp/TUserServiceImpl.java
@@ -0,0 +1,101 @@
+package com.vesus.service.imp;
+
+
+import com.vesus.domain.TUser;
+import com.vesus.repository.TUserRepository;
+import com.vesus.service.TUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service("tUserService")
+@Transactional(propagation = Propagation.REQUIRED)
+public class TUserServiceImpl implements TUserService {
+
+ @Autowired
+ private TUserRepository tUserRepository;
+
+ //
+ //@PersistenceContext
+ //private EntityManager em;
+
+ @Override
+ public TUser save(TUser tUser) {
+ return tUserRepository.save(tUser);
+ }
+
+ @Override
+ public Iterable saveAll(Iterable list) {
+ // return tUserRepository.saveAll(list);
+ return null;
+ }
+
+
+ @Override
+ public TUser findOne(Integer id) {
+ // return tUserRepository.findById(id).get();
+
+ return tUserRepository.findOne(id);
+ }
+
+ @Override
+ public Optional findById(Integer id) {
+ //return tUserRepository.findById(id);
+ return null;
+ }
+
+
+ @Override
+ public boolean existsById(Integer id) {
+ //return tUserRepository.existsById(id);
+
+ return tUserRepository.exists(id);
+ }
+
+ @Override
+ public List findAll() {
+ return (List) tUserRepository.findAll();
+ }
+
+ @Override
+ public Long count() {
+ return tUserRepository.count();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ // tUserRepository.deleteById(id);
+ tUserRepository.delete(id);
+ }
+
+ @Override
+ public void delete(TUser tUser) {
+ tUserRepository.delete(tUser);
+ }
+
+
+ @Override
+ public void deleteAll(Iterable extends TUser> iter) {
+ // tUserRepository.deleteAll(iter);
+ }
+
+ @Override
+ public Page findAllPaged(Integer pageNum, Integer pageSize) {
+ Pageable pageable = new PageRequest(pageNum, pageSize);
+ return tUserRepository.findAllPaged(pageable);
+ }
+
+ public List findAllByEntityManager(String excuteSql, Class returnType) {
+ //Query query = em.createNativeQuery(excuteSql, returnType);
+ //List list = query.getResultList();
+ return null;
+ }
+
+}
diff --git a/springboot-hibernate-interceptoer/src/main/resources/application.properties b/springboot-hibernate-interceptoer/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..83672eba5b3bdfc28d4e886c296b187d27578a26
--- /dev/null
+++ b/springboot-hibernate-interceptoer/src/main/resources/application.properties
@@ -0,0 +1,34 @@
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.username=root
+spring.datasource.password=root
+spring.jpa.show-sql=true
+spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
+spring.jpa.database=mysql
+server.port=8080
+spring.jpa.hibernate.ddl-auto=update
+hibernate.hbm2ddl.auto=true
+
+###########################################################
+#ƱĺĬΪ
+org.hibernate.envers.audit_table_suffix=_AUD
+#ƱǰĬΪ_AUD
+org.hibernate.envers.audit_table_prefix=V_
+#Ʊм¼汾ŵֶ
+org.hibernate.envers.revision_field_name=VER
+#Ʊݲ͵ֶƣ0 1 2ɾ
+org.hibernate.envers.revision_type_field_name=REVTYPE
+#Ƿֹ֧ʱ¼ļ¼,ĬΪtrue
+org.hibernate.envers.revision_on_collection_change=true
+#Ƿֶֹʱ¼ļ¼ʹVersionֶΣĬֵΪtrue
+org.hibernate.envers.do_not_audit_optimistic_locking_field=true
+#Ƿɾʱ¼ֶλֻ¼idֵĬΪfalse falseֻ¼id true¼ȫֶ
+org.hibernate.envers.store_data_at_delete=true
+#ƱschemaĬΪnull
+org.hibernate.envers.default_schema=DateBaseName
+#ƱcatalogĬΪnull
+#org.hibernate.envers.default_catalog
+###########################################################
+
+##############hierbate###################
+spring.jpa.properties.hibernate.ejb.interceptor=com.vesus.listener.CustomInterceptor
diff --git a/springboot-hibernate-listener-audit/pom.xml b/springboot-hibernate-listener-audit/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..922b4cd0f684c0ddb5774e124aa3226aa5c6ddf6
--- /dev/null
+++ b/springboot-hibernate-listener-audit/pom.xml
@@ -0,0 +1,73 @@
+
+
+
+ spring-boot-demo
+ com.vesus
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ springboot-hibernate-listener-audit
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+ com.alibaba
+ druid
+ 1.0.29
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+ org.springframework.boot
+ spring-boot-devtools
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
+ org.hibernate
+ hibernate-envers
+ 5.0.12.Final
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 1.4.2.RELEASE
+
+
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/SpringBootHibernateListenerAuditApplication.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/SpringBootHibernateListenerAuditApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e7ee349f862a37a1db3566bdfcb331ed5e7ddab
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/SpringBootHibernateListenerAuditApplication.java
@@ -0,0 +1,59 @@
+package com.vesus;
+
+import com.vesus.audit.AuditOperationRecordAware;
+import com.vesus.listener.AuditOperationEventListener;
+import com.vesus.listener.AuditOperationRecordAwareImpl;
+import org.hibernate.SessionFactory;
+import org.hibernate.event.service.spi.EventListenerRegistry;
+import org.hibernate.event.spi.EventType;
+import org.hibernate.internal.SessionFactoryImpl;
+import org.hibernate.jpa.HibernateEntityManagerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+@SpringBootApplication
+@EnableTransactionManagement
+@EnableJpaRepositories
+public class SpringBootHibernateListenerAuditApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBootHibernateListenerAuditApplication.class, args);
+ }
+
+
+ @Bean
+ AuditOperationRecordAware auditOperationRecordAware() {
+ return new AuditOperationRecordAwareImpl();
+ }
+
+
+ @Bean
+ public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
+ return hemf.getSessionFactory();
+ }
+
+ @Autowired
+ private AuditOperationEventListener auditOperationEventListener;
+
+ @Resource
+ private SessionFactory sessionFactory;
+
+ @PostConstruct
+ public void registerListeners() {
+ EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(
+ EventListenerRegistry.class);
+ registry.getEventListenerGroup(EventType.POST_INSERT).appendListener(auditOperationEventListener);
+ registry.getEventListenerGroup(EventType.POST_UPDATE).appendListener(auditOperationEventListener);
+ registry.getEventListenerGroup(EventType.POST_DELETE).appendListener(auditOperationEventListener);
+ }
+
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditEntityAlias.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditEntityAlias.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b46ff2368bcb2d47fe3cd711debbc9d70fef95
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditEntityAlias.java
@@ -0,0 +1,12 @@
+package com.vesus.audit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface AuditEntityAlias {
+ String value();
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditFieldAlias.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditFieldAlias.java
new file mode 100644
index 0000000000000000000000000000000000000000..dcb8cbe7f740e97f83a334bc4a5e3b53b1098652
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditFieldAlias.java
@@ -0,0 +1,12 @@
+package com.vesus.audit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface AuditFieldAlias {
+ String value() default "";
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditModifyFieldObject.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditModifyFieldObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2940f83ec405b6dd0b05c5ff4b86a72686badd3
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditModifyFieldObject.java
@@ -0,0 +1,61 @@
+package com.vesus.audit;
+
+public class AuditModifyFieldObject {
+
+ private Object oldValue;
+ private Object newValue;
+ private Object property;
+ private Object type;
+ private String alias;
+ private boolean isAudit;
+
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public Object getOldValue() {
+ return oldValue;
+ }
+
+
+ public void setOldValue(Object oldValue) {
+ this.oldValue = oldValue;
+ }
+
+ public Object getNewValue() {
+ return newValue;
+ }
+
+ public void setNewValue(Object newValue) {
+ this.newValue = newValue;
+ }
+
+ public Object getProperty() {
+ return property;
+ }
+
+ public void setProperty(Object property) {
+ this.property = property;
+ }
+
+ public Object getType() {
+ return type;
+ }
+
+ public void setType(Object type) {
+ this.type = type;
+ }
+
+ public boolean isAudit() {
+ return isAudit;
+ }
+
+ public void setAudit(boolean audit) {
+ isAudit = audit;
+ }
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationRecord.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationRecord.java
new file mode 100644
index 0000000000000000000000000000000000000000..f646d79359129e0dcff72e5ecea0aceab06c8f41
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationRecord.java
@@ -0,0 +1,174 @@
+package com.vesus.audit;
+
+import org.hibernate.type.Type;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class AuditOperationRecord {
+
+ private AuditOperationRecordAware auditOperationRecordAware;
+
+ @Autowired(required = false)
+ public void setAuditOperationRecordAware(AuditOperationRecordAware auditOperationRecordAware) {
+ this.auditOperationRecordAware = auditOperationRecordAware;
+ }
+
+ public boolean onSaveRecord(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
+ System.out.println("=========添加============》");
+ boolean result = processor(entity, id, state, null, propertyNames, types);
+ return result;
+ }
+
+
+ public boolean onUpdateRecord(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
+ System.out.println("=========更新============》");
+ boolean result = processor(entity, id, currentState, previousState, propertyNames, types);
+ return result;
+ }
+
+
+ public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
+ System.out.println("=========删除============》");
+ processor(entity, id, null, state, propertyNames, types);
+ }
+
+ /**
+ * 处理相同变更实体信息的公共类
+ *
+ * @param entity
+ * 操作实体对象
+ * @param id
+ * 操作实体主键编号
+ * @param currentState
+ * 当前更改字段对象数组
+ * @param previousState
+ * 变更前字段信息对象数组
+ * @param propertyNames
+ * 英文属性名数组
+ * @param types
+ * 属性类型数组hibernate封装
+ * @return
+ */
+ private boolean processor(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
+ Class> entityClass = entity.getClass();
+ if (auditOperationRecordAware == null) {
+ return true;
+ }
+ if (!entityClass.isAnnotationPresent(AuditEntityAlias.class)) {
+ return true;
+ }
+ AuditEntityAlias entityAlias = entityClass.getAnnotation(AuditEntityAlias.class);
+ String tableName = entityAlias.value();
+
+ //设置别名和审计字段长度
+ boolean[] isAudits = new boolean[propertyNames.length];
+ String[] alias = new String[propertyNames.length];
+ try {
+ for (int i = 0; i < propertyNames.length; i++) {
+ //Field field = entityClass.getField(propertyNames[i]);
+ Field field = entityClass.getDeclaredField(propertyNames[i]);
+ field.setAccessible(true);
+ if (field.isAnnotationPresent(AuditFieldAlias.class)) {
+ AuditFieldAlias auditFieldAlias = field.getAnnotation(AuditFieldAlias.class);
+ isAudits[i] = true;
+ alias[i] = auditFieldAlias.value();
+ } else {
+ isAudits[i] = false;
+ alias[i] = "";
+ }
+ }
+ } catch (NoSuchFieldException e) {
+ System.err.println(e.getMessage());
+ }
+
+ //生成改变字段信息列表
+ List auditModifyFieldObject = getAuditModifyFieldObject(currentState, previousState, propertyNames, types, alias, isAudits);
+ long timestamp = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()).getTime();
+ AuditOperationType operationType = AuditOperationType.UPDATE;
+ //根据变更对象是否为空判断操作类型
+ if (previousState != null && currentState != null) {
+ operationType = AuditOperationType.UPDATE;
+ }
+ if (previousState == null && currentState != null) {
+ operationType = AuditOperationType.INSERT;
+ }
+ if (previousState != null && currentState == null) {
+ operationType = AuditOperationType.DELETE;
+ }
+ if (auditOperationRecordAware != null) {
+ auditOperationRecordAware.saveAuditOperationLog(tableName, id, auditModifyFieldObject, timestamp, operationType);
+ }
+ return true;
+
+ }
+
+ /**
+ * 获取自定义封装的字段修改对象类,用来保存更改前后的字段变化信息
+ *
+ * @param currentState
+ * 操作后对象,也是当前对象
+ * @param previousState
+ * 变更前对象
+ * @param propertyNames
+ * 属性英文变量名称
+ * @param types
+ * 属性类型,这里是hibernate帮忙生成的一个类型
+ * @param alias
+ * 中文别名,这个属性需要结合 AuditFieldAlias 注解使用才能获取别名
+ * @param isAudits
+ * 是否审计,如果为true表示此字段需要保存更改变更,false相反
+ * @return
+ */
+ private List getAuditModifyFieldObject(Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types, String[] alias, boolean[] isAudits) {
+ List list = new ArrayList<>(10);
+ int fieldCount = 0;
+ //获取字段总个数
+ if (currentState != null && currentState.length > 0 && fieldCount == 0) {
+ fieldCount = currentState.length;
+ }
+ if (previousState != null && previousState.length > 0 && fieldCount == 0) {
+ fieldCount = previousState.length;
+ }
+ for (int i = 0; i < fieldCount; i++) {
+ AuditModifyFieldObject auditModifyObject = new AuditModifyFieldObject();
+ //设置更改前的值
+ if (previousState != null && previousState[i] != null) {
+ auditModifyObject.setOldValue(previousState[i]);
+ }
+ // 设置更改后的当前值
+ if (currentState != null && currentState[i] != null) {
+ auditModifyObject.setNewValue(currentState[i]);
+ }
+ //设置属性名
+ if (propertyNames != null && propertyNames[i] != null) {
+ auditModifyObject.setProperty(propertyNames[i]);
+ }
+ //设置类型
+ if (types != null && types[i] != null) {
+ auditModifyObject.setType(types[i]);
+ }
+ // 设置别名
+ if (alias != null && alias[i] != null) {
+ auditModifyObject.setAlias(alias[i]);
+ }
+ // 是否审计
+ if (isAudits != null && isAudits[i]) {
+ auditModifyObject.setAudit(true);
+ } else {
+ auditModifyObject.setAudit(false);
+ }
+ list.add(auditModifyObject);
+ }
+ return list;
+ }
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationRecordAware.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationRecordAware.java
new file mode 100644
index 0000000000000000000000000000000000000000..676fff1bc0b18ab184d418eab91303dcae6aa569
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationRecordAware.java
@@ -0,0 +1,8 @@
+package com.vesus.audit;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface AuditOperationRecordAware {
+ void saveAuditOperationLog(String tableName, Serializable id, List auditModifyFieldObject, long timestamp, AuditOperationType operationType);
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationType.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..cdbe7ea80b97b66585e7f3d052f74cf5b0afd0fd
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditOperationType.java
@@ -0,0 +1,74 @@
+package com.vesus.audit;
+
+/**
+ * 审计操作对象类别枚举
+ */
+public enum AuditOperationType {
+ INSERT((byte) 0) {
+ @Override
+ public String getValue() {
+ return "新增";
+ }
+ }, UPDATE((byte) 1) {
+ @Override
+ public String getValue() {
+ return "修改";
+ }
+ }, DELETE((byte) 2) {
+ @Override
+ public String getValue() {
+ return "删除";
+ }
+ };
+
+ private String value;
+ private Byte representation;
+
+ AuditOperationType(byte representation) {
+ this.representation = representation;
+ }
+
+ AuditOperationType() {
+ value = toString();
+ }
+
+ public static AuditOperationType parse(final String value) {
+ AuditOperationType operation = null;
+ for (final AuditOperationType op : AuditOperationType.values()) {
+ if (op.getValue().equals(value)) {
+ operation = op;
+ break;
+ }
+ }
+ return operation;
+ }
+
+ public static AuditOperationType parseNumber(final Object representation) {
+ System.out.println(representation.getClass().getName());
+ if (representation == null || !(representation instanceof Byte)) {
+ return null;
+ }
+ switch ((Byte) representation) {
+ case 0: {
+ return INSERT;
+ }
+ case 1: {
+ return UPDATE;
+ }
+ case 2: {
+ return DELETE;
+ }
+ default: {
+ throw new IllegalArgumentException("Unknown representation: " + representation);
+ }
+ }
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public Byte getRepresentation() {
+ return representation;
+ }
+}
\ No newline at end of file
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditPrimaryID.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditPrimaryID.java
new file mode 100644
index 0000000000000000000000000000000000000000..2abd7d6e26339c616522c16f6100dc5de0c20e71
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/audit/AuditPrimaryID.java
@@ -0,0 +1,11 @@
+package com.vesus.audit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface AuditPrimaryID {
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/controller/TUserController.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/controller/TUserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..586f394d48844a2601a496f7bf54e83673ee6795
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/controller/TUserController.java
@@ -0,0 +1,63 @@
+package com.vesus.controller;
+
+import com.vesus.domain.TUser;
+import com.vesus.service.TUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/tUserController")
+public class TUserController {
+
+ @Autowired
+ private TUserService tUserService;
+
+ @RequestMapping("/save")
+ public TUser save(TUser tUser) {
+ return tUserService.save(tUser);
+ }
+
+ @RequestMapping("/findOneById")
+ public TUser findOneById(Integer id) {
+ return tUserService.findOne(id);
+ }
+
+ @RequestMapping("/findOptionalOneById")
+ public Optional findOptionOneById(Integer id) {
+ return tUserService.findById(id);
+ }
+
+ @RequestMapping("/existsById")
+ public boolean existsById(Integer id) {
+ return tUserService.existsById(id);
+ }
+
+ @RequestMapping("/findAll")
+ public List findAll() {
+ return tUserService.findAll();
+ }
+
+ @RequestMapping("/findAllByEntityManager")
+ public List findAllByEntityManager() {
+ return tUserService.findAllByEntityManager("select * from t_user", TUser.class);
+ }
+
+ @RequestMapping("/count")
+ public Long count() {
+ return tUserService.count();
+ }
+
+ @RequestMapping("/deleteById")
+ public void deleteById(Integer id) {
+ tUserService.deleteById(id);
+ }
+
+ @RequestMapping("/deleteByEntity")
+ public void delete(TUser tUser) {
+ tUserService.delete(tUser);
+ }
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/domain/AuditRecordLog.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/domain/AuditRecordLog.java
new file mode 100644
index 0000000000000000000000000000000000000000..00c8476bc834248cadd3611feda18155f050c59e
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/domain/AuditRecordLog.java
@@ -0,0 +1,122 @@
+package com.vesus.domain;
+
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "t_audit_record_log")
+public class AuditRecordLog {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private int id;
+
+ @Column(name = "t_entity_name")
+ private String entityName;
+
+ @Column(name = "t_property_name")
+ private String propertyName;
+
+ @Column(name = "t_alias")
+ private String alias;
+
+ @Column(name = "t_old_value")
+ private String oldValue;
+
+ @Column(name = "t_new_value")
+ private String newValue;
+
+ @Column(name = "t_user_id")
+ private int userId;
+
+ @Column(name = "t_user_name")
+ private String userName;
+
+ @Column(name = "t_modified_date")
+ private String modifiedDate;
+
+ @Column(name = "t_description")
+ private String description;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ public void setPropertyName(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ public String getEntityName() {
+ return entityName;
+ }
+
+ public void setEntityName(String entityName) {
+ this.entityName = entityName;
+ }
+
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ public String getOldValue() {
+ return oldValue;
+ }
+
+ public void setOldValue(String oldValue) {
+ this.oldValue = oldValue;
+ }
+
+ public String getNewValue() {
+ return newValue;
+ }
+
+ public void setNewValue(String newValue) {
+ this.newValue = newValue;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getModifiedDate() {
+ return modifiedDate;
+ }
+
+ public void setModifiedDate(String modifiedDate) {
+ this.modifiedDate = modifiedDate;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/domain/TUser.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/domain/TUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..feff4319efcbb2cb308c5129ea8c49dfdd6180eb
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/domain/TUser.java
@@ -0,0 +1,88 @@
+package com.vesus.domain;
+
+import com.vesus.audit.AuditEntityAlias;
+import com.vesus.audit.AuditFieldAlias;
+import com.vesus.audit.AuditPrimaryID;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * @author wx11055@163.com
+ * @date 2018-06-27 23:19:28
+ * Created by wuxia .
+ */
+@Entity
+@Table(name = "t_user")
+@AuditEntityAlias("用户信息表")
+public class TUser implements Serializable {
+
+ /**
+ * 编号
+ */
+ @Id
+ @GeneratedValue
+ @Column(name = "t_id")
+ @AuditPrimaryID
+ private Integer id;
+
+ @Column(name = "t_address")
+ @AuditFieldAlias("联系地址")
+ private String tAddress;
+
+ @Column(name = "t_age")
+ @AuditFieldAlias("年龄")
+ private Integer tAge;
+
+ @Column(name = "t_name")
+ @AuditFieldAlias("姓名")
+ private String tName;
+
+ @Column(name = "t_pwd")
+ @AuditFieldAlias("密码")
+ private String tPwd;
+
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+
+ public String gettAddress() {
+ return tAddress;
+ }
+
+ public void settAddress(String tAddress) {
+ this.tAddress = tAddress;
+ }
+
+ public Integer gettAge() {
+ return tAge;
+ }
+
+ public void settAge(Integer tAge) {
+ this.tAge = tAge;
+ }
+
+ public String gettName() {
+ return tName;
+ }
+
+ public void settName(String tName) {
+ this.tName = tName;
+ }
+
+ public String gettPwd() {
+ return tPwd;
+ }
+
+ public void settPwd(String tPwd) {
+ this.tPwd = tPwd;
+ }
+
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/listener/AuditOperationEventListener.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/listener/AuditOperationEventListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..83f5c274b97d69981348e76a6547afdcd92b686a
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/listener/AuditOperationEventListener.java
@@ -0,0 +1,60 @@
+package com.vesus.listener;
+
+
+import com.vesus.audit.AuditOperationRecord;
+import org.hibernate.event.internal.DefaultLoadEventListener;
+import org.hibernate.event.spi.*;
+import org.hibernate.persister.entity.EntityPersister;
+import org.hibernate.type.Type;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+
+@Component
+public class AuditOperationEventListener extends DefaultLoadEventListener implements PostInsertEventListener, PostUpdateEventListener, PostDeleteEventListener {
+
+ @Autowired
+ AuditOperationRecord auditOperationRecord;
+
+ public void onPostUpdate(PostUpdateEvent event) {
+ Object entity = event.getEntity();
+ Object[] oldState = event.getOldState();
+ Object[] state = event.getState();
+ Serializable id = event.getId();
+ EntityPersister persister = event.getPersister();
+ String[] propertyNames = persister.getPropertyNames();
+ Type[] types = persister.getPropertyTypes();
+ auditOperationRecord.onUpdateRecord(entity, id, state, oldState, propertyNames, types);
+ }
+
+ @Override
+ public void onPostDelete(PostDeleteEvent event) {
+ Object entity = event.getEntity();
+ Object[] state = event.getDeletedState();
+ Serializable id = event.getId();
+ EntityPersister persister = event.getPersister();
+ String[] propertyNames = persister.getPropertyNames();
+ Type[] types = persister.getPropertyTypes();
+ auditOperationRecord.onDelete(entity, id, state, propertyNames, types);
+ }
+
+ @Override
+ public void onPostInsert(PostInsertEvent event) {
+ Object entity = event.getEntity();
+ Object[] state = event.getState();
+ Serializable id = event.getId();
+ EntityPersister persister = event.getPersister();
+ String[] propertyNames = persister.getPropertyNames();
+ Type[] types = persister.getPropertyTypes();
+ auditOperationRecord.onSaveRecord(entity, id, state, propertyNames, types);
+
+ }
+
+ @Override
+ public boolean requiresPostCommitHanding(EntityPersister persister) {
+ System.out.println("=================requiresPostCommitHanding====================");
+ return false;
+ }
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/listener/AuditOperationRecordAwareImpl.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/listener/AuditOperationRecordAwareImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e25abf4d479b5076de214d6646fdb2684671946
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/listener/AuditOperationRecordAwareImpl.java
@@ -0,0 +1,85 @@
+package com.vesus.listener;
+
+import com.vesus.audit.AuditModifyFieldObject;
+import com.vesus.audit.AuditOperationRecordAware;
+import com.vesus.audit.AuditOperationType;
+import com.vesus.domain.AuditRecordLog;
+import com.vesus.service.AuditRecordLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+public class AuditOperationRecordAwareImpl implements AuditOperationRecordAware {
+
+ @Autowired
+ private AuditRecordLogService auditRecordLogService;
+
+ @Override
+ public void saveAuditOperationLog(String tableName, Serializable id, List auditModifyFieldObject, long timestamp, AuditOperationType operation) {
+
+
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String date = df.format(new Date(timestamp));
+ System.out.println("更改的表名=========》" + tableName);
+ System.out.println("主键=========》" + id);
+ System.out.println("更改时间=========》" + date);
+
+
+ // todo 保存到数据库
+ int i = 0;
+ for (AuditModifyFieldObject modifyFieldObject : auditModifyFieldObject) {
+ Object oldValue = modifyFieldObject.getOldValue();
+ Object newValue = modifyFieldObject.getNewValue();
+ if (modifyFieldObject.isAudit() && !(oldValue == null && newValue == null) && !("".equals(oldValue) && "".equals(newValue))) {
+ AuditRecordLog auditRecordLog = new AuditRecordLog();
+ // 判断值不全是空或者前后值是否相等
+ if (oldValue == null || newValue == null) {
+ auditRecordLog.setOldValue(oldValue + "");
+ auditRecordLog.setNewValue(newValue + "");
+ } else {
+ if (!oldValue.equals(newValue)) {
+ auditRecordLog.setOldValue(oldValue + "");
+ auditRecordLog.setNewValue(newValue + "");
+ } else {
+ continue;
+ }
+ }
+ auditRecordLog.setPropertyName(modifyFieldObject.getProperty() + "");
+ auditRecordLog.setAlias(modifyFieldObject.getAlias());
+ auditRecordLog.setEntityName(tableName);
+ auditRecordLog.setModifiedDate(date);
+ String username = "特斯特" + i++; //todo 获取用户名等信息
+ auditRecordLog.setUserName(username);
+ String description = "";
+ //如果是添加
+ if (AuditOperationType.INSERT.equals(operation)) {
+ description = getOperationDescription(username, date, operation, newValue + "");
+
+ }
+ //如果是更新
+ if (AuditOperationType.UPDATE.equals(operation)) {
+ description = getOperationDescription(username, date, operation, oldValue + "为" + newValue + "");
+ }
+ //如果是删除
+ if (AuditOperationType.DELETE.equals(operation)) {
+ description = getOperationDescription(username, date, operation, oldValue + "");
+
+ }
+ auditRecordLog.setDescription(description);
+ System.out.println("============描述========》" + description);
+ auditRecordLogService.save(auditRecordLog);
+ }
+ }
+
+ }
+
+ private String getOperationDescription(String userName, String datetime, AuditOperationType operation, String obj) {
+ return new StringBuffer().append(userName).append("在").append(datetime).append(operation.getValue()).append("了").append(obj).toString();
+
+ }
+
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/repository/AuditRecordLogRepository.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/repository/AuditRecordLogRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..f41c6d6c1960400bf99dc04c3364e86d1d1d7537
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/repository/AuditRecordLogRepository.java
@@ -0,0 +1,10 @@
+package com.vesus.repository;
+
+import com.vesus.domain.AuditRecordLog;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository("operationRevisionLogRepository")
+public interface AuditRecordLogRepository extends CrudRepository {
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/repository/TUserRepository.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/repository/TUserRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0da38946b0cc8fe9a7abf49d96463b14a0f3470
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/repository/TUserRepository.java
@@ -0,0 +1,29 @@
+package com.vesus.repository;
+
+import com.vesus.domain.TUser;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.stream.Stream;
+
+/**
+ * @author wx11055@163.com
+ * @date 2018-06-27 23:19:28
+ * Created by CodeGen .
+ */
+@Repository("tUserRepository")
+public interface TUserRepository extends CrudRepository {
+ @Query("select l from TUser l")
+ Page findAllPaged(Pageable pageable);
+
+ //Page findAllAndSortPaged(Pageable pageable, Sort sort);
+
+ @Query("select l from TUser l")
+ Stream findAllAndStreamPaged(Pageable pageable);
+
+ //Page queryFirst10ByName(String name, Pageable pageable);
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/AuditRecordLogService.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/AuditRecordLogService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ad6b652516561debd79dd369533c17b8b261a1a
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/AuditRecordLogService.java
@@ -0,0 +1,19 @@
+package com.vesus.service;
+
+
+import com.vesus.domain.AuditRecordLog;
+
+import java.util.List;
+
+public interface AuditRecordLogService {
+
+ List findAll();
+
+ AuditRecordLog save(AuditRecordLog businessChangeLog);
+
+ AuditRecordLog findOne(long id);
+
+ void delete(long id);
+
+ List findByName(String name);
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/TUserService.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/TUserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a388763c9e61b09b28bbca6931f258ff2b7476b
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/TUserService.java
@@ -0,0 +1,40 @@
+package com.vesus.service;
+
+
+import com.vesus.domain.TUser;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author wx11055@163.com
+ * @date 2018-06-27 23:19:28
+ * Created by wuxia .
+ */
+public interface TUserService {
+
+ TUser save(TUser tUser);
+
+ Iterable saveAll(Iterable list);
+
+ TUser findOne(Integer id);
+
+ Optional findById(Integer id);
+
+ boolean existsById(Integer id);
+
+ List findAll();
+
+ Long count();
+
+ void deleteById(Integer id);
+
+ void delete(TUser tUser);
+
+ void deleteAll(Iterable extends TUser> iter);
+
+ Page findAllPaged(Integer pageNum, Integer pageSize);
+
+ List findAllByEntityManager(String excuteSql, Class returnType);
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/imp/AuditRecordLogServiceImpl.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/imp/AuditRecordLogServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..76c90701d0e598b554f7a5e693bc3059e015dfa2
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/imp/AuditRecordLogServiceImpl.java
@@ -0,0 +1,41 @@
+package com.vesus.service.imp;
+
+import com.vesus.domain.AuditRecordLog;
+import com.vesus.repository.AuditRecordLogRepository;
+import com.vesus.service.AuditRecordLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class AuditRecordLogServiceImpl implements AuditRecordLogService {
+
+ @Autowired
+ private AuditRecordLogRepository auditRecordLogRepository;
+
+ @Override
+ public List findAll() {
+ return null;
+ }
+
+ @Override
+ public AuditRecordLog save(AuditRecordLog auditRecordLog) {
+ return auditRecordLogRepository.save(auditRecordLog);
+ }
+
+ @Override
+ public AuditRecordLog findOne(long id) {
+ return null;
+ }
+
+ @Override
+ public void delete(long id) {
+
+ }
+
+ @Override
+ public List findByName(String name) {
+ return null;
+ }
+}
diff --git a/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/imp/TUserServiceImpl.java b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/imp/TUserServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..5452ba9916d3787fc3742175ca9d0defcd8587cd
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/java/com/vesus/service/imp/TUserServiceImpl.java
@@ -0,0 +1,97 @@
+package com.vesus.service.imp;
+
+import com.vesus.domain.TUser;
+import com.vesus.repository.TUserRepository;
+import com.vesus.service.TUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service("tUserService")
+@Transactional(propagation = Propagation.REQUIRED)
+public class TUserServiceImpl implements TUserService {
+
+ @Autowired
+ private TUserRepository tUserRepository;
+
+
+ @Override
+ public TUser save(TUser tUser) {
+ return tUserRepository.save(tUser);
+ }
+
+ @Override
+ public Iterable saveAll(Iterable list) {
+ // return tUserRepository.saveAll(list);
+ return null;
+ }
+
+
+ @Override
+ public TUser findOne(Integer id) {
+ // return tUserRepository.findById(id).get();
+
+ return tUserRepository.findOne(id);
+ }
+
+ @Override
+ public Optional findById(Integer id) {
+ //return tUserRepository.findById(id);
+ return null;
+ }
+
+
+ @Override
+ public boolean existsById(Integer id) {
+ //return tUserRepository.existsById(id);
+
+ return tUserRepository.exists(id);
+ }
+
+ @Override
+ public List findAll() {
+ return (List) tUserRepository.findAll();
+ }
+
+ @Override
+ public Long count() {
+ return tUserRepository.count();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ // tUserRepository.deleteById(id);
+ tUserRepository.delete(id);
+ }
+
+ @Override
+ public void delete(TUser tUser) {
+ tUserRepository.delete(tUser);
+ }
+
+
+ @Override
+ public void deleteAll(Iterable extends TUser> iter) {
+ // tUserRepository.deleteAll(iter);
+ }
+
+ @Override
+ public Page findAllPaged(Integer pageNum, Integer pageSize) {
+ Pageable pageable = new PageRequest(pageNum, pageSize);
+ return tUserRepository.findAllPaged(pageable);
+ }
+
+ public List findAllByEntityManager(String excuteSql, Class returnType) {
+ //Query query = em.createNativeQuery(excuteSql, returnType);
+ //List list = query.getResultList();
+ return null;
+ }
+
+}
diff --git a/springboot-hibernate-listener-audit/src/main/resources/application.properties b/springboot-hibernate-listener-audit/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..630487fbd41389c99f5022688c7f36acc87bc852
--- /dev/null
+++ b/springboot-hibernate-listener-audit/src/main/resources/application.properties
@@ -0,0 +1,11 @@
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.username=root
+spring.datasource.password=root
+spring.jpa.show-sql=true
+spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
+spring.jpa.database=mysql
+server.port=8080
+spring.jpa.hibernate.ddl-auto=update
+hibernate.hbm2ddl.auto=true
+