diff --git a/Rk-progect/.idea/.gitignore b/Rk-progect/.idea/.gitignore
new file mode 100644
index 00000000..f7478806
--- /dev/null
+++ b/Rk-progect/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/../../../../../:\workspace\gcy\Rk-progect\.idea/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/Rk-progect/.idea/artifacts/ruoyi_admin_war.xml b/Rk-progect/.idea/artifacts/ruoyi_admin_war.xml
new file mode 100644
index 00000000..73b727f6
--- /dev/null
+++ b/Rk-progect/.idea/artifacts/ruoyi_admin_war.xml
@@ -0,0 +1,14 @@
+
+
+ $PROJECT_DIR$/ruoyi-admin/target
+
+
+ ruoyi-admin
+ war
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/artifacts/ruoyi_admin_war_exploded.xml b/Rk-progect/.idea/artifacts/ruoyi_admin_war_exploded.xml
new file mode 100644
index 00000000..b869871d
--- /dev/null
+++ b/Rk-progect/.idea/artifacts/ruoyi_admin_war_exploded.xml
@@ -0,0 +1,149 @@
+
+
+ $PROJECT_DIR$/ruoyi-admin/target/ruoyi-admin
+
+
+ true
+ ruoyi-admin
+ war
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/artifacts/ruoyi_project_war.xml b/Rk-progect/.idea/artifacts/ruoyi_project_war.xml
new file mode 100644
index 00000000..3c273541
--- /dev/null
+++ b/Rk-progect/.idea/artifacts/ruoyi_project_war.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/classes/artifacts/ruoyi_project_war
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/artifacts/ruoyi_project_war_exploded.xml b/Rk-progect/.idea/artifacts/ruoyi_project_war_exploded.xml
new file mode 100644
index 00000000..f84ff4f7
--- /dev/null
+++ b/Rk-progect/.idea/artifacts/ruoyi_project_war_exploded.xml
@@ -0,0 +1,105 @@
+
+
+ $PROJECT_DIR$/classes/artifacts/ruoyi_project_war_exploded
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/compiler.xml b/Rk-progect/.idea/compiler.xml
new file mode 100644
index 00000000..6454247f
--- /dev/null
+++ b/Rk-progect/.idea/compiler.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/dataSources.xml b/Rk-progect/.idea/dataSources.xml
new file mode 100644
index 00000000..40460b3b
--- /dev/null
+++ b/Rk-progect/.idea/dataSources.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://39.107.100.226:3335/q
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/dataSources/36846734-8996-4d77-93bb-ab8b867833a4.xml b/Rk-progect/.idea/dataSources/36846734-8996-4d77-93bb-ab8b867833a4.xml
new file mode 100644
index 00000000..5e9b825e
--- /dev/null
+++ b/Rk-progect/.idea/dataSources/36846734-8996-4d77-93bb-ab8b867833a4.xml
@@ -0,0 +1,775 @@
+
+
+
+
+ 5.7.35
+ InnoDB
+ InnoDB
+ exact
+
+
+ utf8_general_ci
+
+
+ latin1_swedish_ci
+
+
+ utf8_general_ci
+
+
+ 1
+ utf8_general_ci
+
+
+ utf8_general_ci
+
+
+ armscii8
+
+
+ armscii8
+ 1
+
+
+ ascii
+
+
+ ascii
+ 1
+
+
+ big5
+
+
+ big5
+ 1
+
+
+ binary
+ 1
+
+
+ cp1250
+
+
+ cp1250
+
+
+ cp1250
+
+
+ cp1250
+ 1
+
+
+ cp1250
+
+
+ cp1251
+
+
+ cp1251
+
+
+ cp1251
+ 1
+
+
+ cp1251
+
+
+ cp1251
+
+
+ cp1256
+
+
+ cp1256
+ 1
+
+
+ cp1257
+
+
+ cp1257
+ 1
+
+
+ cp1257
+
+
+ cp850
+
+
+ cp850
+ 1
+
+
+ cp852
+
+
+ cp852
+ 1
+
+
+ cp866
+
+
+ cp866
+ 1
+
+
+ cp932
+
+
+ cp932
+ 1
+
+
+ dec8
+
+
+ dec8
+ 1
+
+
+ eucjpms
+
+
+ eucjpms
+ 1
+
+
+ euckr
+
+
+ euckr
+ 1
+
+
+ gb18030
+
+
+ gb18030
+ 1
+
+
+ gb18030
+
+
+ gb2312
+
+
+ gb2312
+ 1
+
+
+ gbk
+
+
+ gbk
+ 1
+
+
+ geostd8
+
+
+ geostd8
+ 1
+
+
+ greek
+
+
+ greek
+ 1
+
+
+ hebrew
+
+
+ hebrew
+ 1
+
+
+ hp8
+
+
+ hp8
+ 1
+
+
+ keybcs2
+
+
+ keybcs2
+ 1
+
+
+ koi8r
+
+
+ koi8r
+ 1
+
+
+ koi8u
+
+
+ koi8u
+ 1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+ 1
+
+
+ latin2
+
+
+ latin2
+
+
+ latin2
+
+
+ latin2
+ 1
+
+
+ latin2
+
+
+ latin5
+
+
+ latin5
+ 1
+
+
+ latin7
+
+
+ latin7
+
+
+ latin7
+ 1
+
+
+ latin7
+
+
+ macce
+
+
+ macce
+ 1
+
+
+ macroman
+
+
+ macroman
+ 1
+
+
+ sjis
+
+
+ sjis
+ 1
+
+
+ swe7
+
+
+ swe7
+ 1
+
+
+ tis620
+
+
+ tis620
+ 1
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+ 1
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ujis
+
+
+ ujis
+ 1
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+ 1
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16le
+
+
+ utf16le
+ 1
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+ 1
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+ 1
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+ 1
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ localhost
+ SUPER
+SELECT|performance_schema:null
+SELECT|mysql.user:null
+
+
+
+ localhost
+ TRIGGER|sys:null
+SELECT|sys.sys_config:null
+
+
+
+ %
+ ALL PRIVILEGES!
+
+
+
+ localhost
+ ALL PRIVILEGES!
+
+
+
+
+ 1
+ 依托单位id
+ int(11)|0s
+ 1
+ null
+
+
+ 2
+ 依托单位名称
+ varchar(255)|0s
+
+
+ 1
+ id
+ 1
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/dataSources/36846734-8996-4d77-93bb-ab8b867833a4/storage_v2/_src_/schema/information_schema.FNRwLQ.meta b/Rk-progect/.idea/dataSources/36846734-8996-4d77-93bb-ab8b867833a4/storage_v2/_src_/schema/information_schema.FNRwLQ.meta
new file mode 100644
index 00000000..1ff3db2e
--- /dev/null
+++ b/Rk-progect/.idea/dataSources/36846734-8996-4d77-93bb-ab8b867833a4/storage_v2/_src_/schema/information_schema.FNRwLQ.meta
@@ -0,0 +1,2 @@
+#n:information_schema
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git a/Rk-progect/.idea/deployment.xml b/Rk-progect/.idea/deployment.xml
new file mode 100644
index 00000000..c4f60316
--- /dev/null
+++ b/Rk-progect/.idea/deployment.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/easyCodeTableSetting.xml b/Rk-progect/.idea/easyCodeTableSetting.xml
new file mode 100644
index 00000000..659ee0f7
--- /dev/null
+++ b/Rk-progect/.idea/easyCodeTableSetting.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/encodings.xml b/Rk-progect/.idea/encodings.xml
new file mode 100644
index 00000000..9a4da16a
--- /dev/null
+++ b/Rk-progect/.idea/encodings.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/jarRepositories.xml b/Rk-progect/.idea/jarRepositories.xml
new file mode 100644
index 00000000..dadd8c76
--- /dev/null
+++ b/Rk-progect/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/Rk-progect/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
new file mode 100644
index 00000000..1492f575
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/Rk-progect/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
new file mode 100644
index 00000000..75dcab39
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_alibaba_druid_1_1_22.xml b/Rk-progect/.idea/libraries/Maven__com_alibaba_druid_1_1_22.xml
new file mode 100644
index 00000000..771d128d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_alibaba_druid_1_1_22.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_1_22.xml b/Rk-progect/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_1_22.xml
new file mode 100644
index 00000000..1f7a6f9f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_alibaba_druid_spring_boot_starter_1_1_22.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_alibaba_fastjson_1_2_73.xml b/Rk-progect/.idea/libraries/Maven__com_alibaba_fastjson_1_2_73.xml
new file mode 100644
index 00000000..8992fd89
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_alibaba_fastjson_1_2_73.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml
new file mode 100644
index 00000000..74b95a0a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_10.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_10.xml
new file mode 100644
index 00000000..a120714e
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_10.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_10.xml
new file mode 100644
index 00000000..9a857dd4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_9_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_10_6.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_10_6.xml
new file mode 100644
index 00000000..fd805ee8
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_10_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_10.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_10.xml
new file mode 100644
index 00000000..b44bc79a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_10.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_10.xml
new file mode 100644
index 00000000..c513239d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_10.xml b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_10.xml
new file mode 100644
index 00000000..ba09b8d2
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_1_0.xml b/Rk-progect/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_1_0.xml
new file mode 100644
index 00000000..8c72f519
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_oshi_oshi_core_5_2_5.xml b/Rk-progect/.idea/libraries/Maven__com_github_oshi_oshi_core_5_2_5.xml
new file mode 100644
index 00000000..17be3af4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_oshi_oshi_core_5_2_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_1_4.xml b/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_1_4.xml
new file mode 100644
index 00000000..c8a710b4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_5_1_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_2_5.xml b/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_2_5.xml
new file mode 100644
index 00000000..31c26584
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_autoconfigure_1_2_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_2_5.xml b/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_2_5.xml
new file mode 100644
index 00000000..5374009b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_pagehelper_pagehelper_spring_boot_starter_1_2_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_penggle_kaptcha_2_3_2.xml b/Rk-progect/.idea/libraries/Maven__com_github_penggle_kaptcha_2_3_2.xml
new file mode 100644
index 00000000..9418d72b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_penggle_kaptcha_2_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_04.xml b/Rk-progect/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_04.xml
new file mode 100644
index 00000000..795a65f3
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_github_virtuald_curvesapi_1_04.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_google_guava_guava_20_0.xml b/Rk-progect/.idea/libraries/Maven__com_google_guava_guava_20_0.xml
new file mode 100644
index 00000000..0c75e603
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_google_guava_guava_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml b/Rk-progect/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
new file mode 100644
index 00000000..a24baa73
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml b/Rk-progect/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml
new file mode 100644
index 00000000..7e1d6c0f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml b/Rk-progect/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml
new file mode 100644
index 00000000..9841b3fb
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_sun_mail_javax_mail_1_6_2.xml b/Rk-progect/.idea/libraries/Maven__com_sun_mail_javax_mail_1_6_2.xml
new file mode 100644
index 00000000..edccf64d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_sun_mail_javax_mail_1_6_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/Rk-progect/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
new file mode 100644
index 00000000..1be35329
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__com_zaxxer_HikariCP_3_2_0.xml b/Rk-progect/.idea/libraries/Maven__com_zaxxer_HikariCP_3_2_0.xml
new file mode 100644
index 00000000..f91bbd4f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__com_zaxxer_HikariCP_3_2_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml b/Rk-progect/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml
new file mode 100644
index 00000000..7230dcba
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml b/Rk-progect/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml
new file mode 100644
index 00000000..dd060601
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml b/Rk-progect/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml
new file mode 100644
index 00000000..a607db29
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml b/Rk-progect/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml
new file mode 100644
index 00000000..b13fb4e8
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_3_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_io_commons_io_2_5.xml b/Rk-progect/.idea/libraries/Maven__commons_io_commons_io_2_5.xml
new file mode 100644
index 00000000..2813b88a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_io_commons_io_2_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml b/Rk-progect/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml
new file mode 100644
index 00000000..53385a38
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_logging_commons_logging_1_0_4.xml b/Rk-progect/.idea/libraries/Maven__commons_logging_commons_logging_1_0_4.xml
new file mode 100644
index 00000000..bef23836
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_logging_commons_logging_1_0_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml b/Rk-progect/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
new file mode 100644
index 00000000..a4e9c93c
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_api_2_2_7.xml b/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_api_2_2_7.xml
new file mode 100644
index 00000000..ef09d158
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_api_2_2_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_impl_2_2_7.xml b/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_impl_2_2_7.xml
new file mode 100644
index 00000000..c386a801
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_impl_2_2_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_spi_2_2_7.xml b/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_spi_2_2_7.xml
new file mode 100644
index 00000000..2a43e920
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__de_odysseus_juel_juel_spi_2_2_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__eu_bitwalker_UserAgentUtils_1_19.xml b/Rk-progect/.idea/libraries/Maven__eu_bitwalker_UserAgentUtils_1_19.xml
new file mode 100644
index 00000000..9789303b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__eu_bitwalker_UserAgentUtils_1_19.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml b/Rk-progect/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml
new file mode 100644
index 00000000..71a19c3b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_jsonwebtoken_jjwt_0_9_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_lettuce_lettuce_core_5_1_8_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__io_lettuce_lettuce_core_5_1_8_RELEASE.xml
new file mode 100644
index 00000000..8ba4e717
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_lettuce_lettuce_core_5_1_8_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_netty_netty_buffer_4_1_52_Final.xml b/Rk-progect/.idea/libraries/Maven__io_netty_netty_buffer_4_1_52_Final.xml
new file mode 100644
index 00000000..c31b3b52
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_netty_netty_buffer_4_1_52_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_netty_netty_codec_4_1_52_Final.xml b/Rk-progect/.idea/libraries/Maven__io_netty_netty_codec_4_1_52_Final.xml
new file mode 100644
index 00000000..242fc772
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_netty_netty_codec_4_1_52_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_netty_netty_common_4_1_52_Final.xml b/Rk-progect/.idea/libraries/Maven__io_netty_netty_common_4_1_52_Final.xml
new file mode 100644
index 00000000..bbca998f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_netty_netty_common_4_1_52_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_netty_netty_handler_4_1_52_Final.xml b/Rk-progect/.idea/libraries/Maven__io_netty_netty_handler_4_1_52_Final.xml
new file mode 100644
index 00000000..84aa0485
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_netty_netty_handler_4_1_52_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_netty_netty_resolver_4_1_52_Final.xml b/Rk-progect/.idea/libraries/Maven__io_netty_netty_resolver_4_1_52_Final.xml
new file mode 100644
index 00000000..c63bb2ac
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_netty_netty_resolver_4_1_52_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_netty_netty_transport_4_1_52_Final.xml b/Rk-progect/.idea/libraries/Maven__io_netty_netty_transport_4_1_52_Final.xml
new file mode 100644
index 00000000..41a5fc4e
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_netty_netty_transport_4_1_52_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_projectreactor_reactor_core_3_2_20_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__io_projectreactor_reactor_core_3_2_20_RELEASE.xml
new file mode 100644
index 00000000..44e1039a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_projectreactor_reactor_core_3_2_20_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml
new file mode 100644
index 00000000..743b0c67
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_core_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml
new file mode 100644
index 00000000..5ccb3997
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_schema_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml
new file mode 100644
index 00000000..42014bb2
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_spi_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml
new file mode 100644
index 00000000..25d240bf
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml
new file mode 100644
index 00000000..6cb1ced5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml
new file mode 100644
index 00000000..adc61e42
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml
new file mode 100644
index 00000000..c3af806f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_10.xml b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_10.xml
new file mode 100644
index 00000000..74a4d5ef
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_21.xml b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_21.xml
new file mode 100644
index 00000000..91ba4675
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_21.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_models_1_5_10.xml b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_models_1_5_10.xml
new file mode 100644
index 00000000..b22c1826
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_models_1_5_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_models_1_5_21.xml b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_models_1_5_21.xml
new file mode 100644
index 00000000..f116e50b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__io_swagger_swagger_models_1_5_21.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_activation_activation_1_1_1.xml b/Rk-progect/.idea/libraries/Maven__javax_activation_activation_1_1_1.xml
new file mode 100644
index 00000000..052b8fd2
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_activation_activation_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml b/Rk-progect/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml
new file mode 100644
index 00000000..d6241bcd
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml b/Rk-progect/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
new file mode 100644
index 00000000..81db6c65
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_annotation_jsr250_api_1_0.xml b/Rk-progect/.idea/libraries/Maven__javax_annotation_jsr250_api_1_0.xml
new file mode 100644
index 00000000..640522a1
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_annotation_jsr250_api_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml b/Rk-progect/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml
new file mode 100644
index 00000000..9f3d1315
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_servlet_javax_servlet_api_4_0_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml b/Rk-progect/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
new file mode 100644
index 00000000..97149930
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml b/Rk-progect/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml
new file mode 100644
index 00000000..6dc0472a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__joda_time_joda_time_2_10_6.xml b/Rk-progect/.idea/libraries/Maven__joda_time_joda_time_2_10_6.xml
new file mode 100644
index 00000000..a5de641f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__joda_time_joda_time_2_10_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__junit_junit_4_12.xml b/Rk-progect/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 00000000..f5db5813
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__math_geom2d_javaGeom_0_11_1.xml b/Rk-progect/.idea/libraries/Maven__math_geom2d_javaGeom_0_11_1.xml
new file mode 100644
index 00000000..5366b9c8
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__math_geom2d_javaGeom_0_11_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_16.xml b/Rk-progect/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_16.xml
new file mode 100644
index 00000000..915b32bb
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_16.xml b/Rk-progect/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_16.xml
new file mode 100644
index 00000000..724ecfcb
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__net_java_dev_jna_jna_5_6_0.xml b/Rk-progect/.idea/libraries/Maven__net_java_dev_jna_jna_5_6_0.xml
new file mode 100644
index 00000000..4199b240
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__net_java_dev_jna_jna_5_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__net_java_dev_jna_jna_platform_5_6_0.xml b/Rk-progect/.idea/libraries/Maven__net_java_dev_jna_jna_platform_5_6_0.xml
new file mode 100644
index 00000000..0fb59a2c
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__net_java_dev_jna_jna_platform_5_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml b/Rk-progect/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
new file mode 100644
index 00000000..1be8dbf4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml b/Rk-progect/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
new file mode 100644
index 00000000..ef3f961e
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_bpmn_converter_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_bpmn_converter_6_0_0.xml
new file mode 100644
index 00000000..2dbd383c
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_bpmn_converter_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_bpmn_model_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_bpmn_model_6_0_0.xml
new file mode 100644
index 00000000..41b5bfea
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_bpmn_model_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_common_rest_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_common_rest_6_0_0.xml
new file mode 100644
index 00000000..cac1a020
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_common_rest_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_dmn_api_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_dmn_api_6_0_0.xml
new file mode 100644
index 00000000..a58fc9aa
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_dmn_api_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_dmn_model_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_dmn_model_6_0_0.xml
new file mode 100644
index 00000000..d30d8849
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_dmn_model_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_engine_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_engine_6_0_0.xml
new file mode 100644
index 00000000..40b9b215
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_engine_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_form_api_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_form_api_6_0_0.xml
new file mode 100644
index 00000000..10e08b26
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_form_api_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_form_model_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_form_model_6_0_0.xml
new file mode 100644
index 00000000..e3611b7a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_form_model_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_image_generator_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_image_generator_6_0_0.xml
new file mode 100644
index 00000000..952b4fe4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_image_generator_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_json_converter_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_json_converter_6_0_0.xml
new file mode 100644
index 00000000..354cd859
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_json_converter_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_process_validation_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_process_validation_6_0_0.xml
new file mode 100644
index 00000000..2ad646ed
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_process_validation_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_rest_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_rest_6_0_0.xml
new file mode 100644
index 00000000..905a9f39
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_rest_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_6_0_0.xml
new file mode 100644
index 00000000..de346ab1
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_boot_starter_basic_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_boot_starter_basic_6_0_0.xml
new file mode 100644
index 00000000..8b09e3c3
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_boot_starter_basic_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_boot_starter_rest_api_6_0_0.xml b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_boot_starter_rest_api_6_0_0.xml
new file mode 100644
index 00000000..403215f4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_activiti_activiti_spring_boot_starter_rest_api_6_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_avalon_framework_avalon_framework_api_4_3_1.xml b/Rk-progect/.idea/libraries/Maven__org_apache_avalon_framework_avalon_framework_api_4_3_1.xml
new file mode 100644
index 00000000..3dce3ccc
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_avalon_framework_avalon_framework_api_4_3_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_avalon_framework_avalon_framework_impl_4_3_1.xml b/Rk-progect/.idea/libraries/Maven__org_apache_avalon_framework_avalon_framework_impl_4_3_1.xml
new file mode 100644
index 00000000..2292e494
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_avalon_framework_avalon_framework_impl_4_3_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml
new file mode 100644
index 00000000..ce0dd0b5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_email_1_4.xml b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_email_1_4.xml
new file mode 100644
index 00000000..89e1bbb2
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_email_1_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml
new file mode 100644
index 00000000..ef1d126d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_6_2.xml b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_6_2.xml
new file mode 100644
index 00000000..a0547ea9
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_commons_commons_pool2_2_6_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5.xml b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5.xml
new file mode 100644
index 00000000..6366593d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_12.xml b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_12.xml
new file mode 100644
index 00000000..1897a289
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_1.xml b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_1.xml
new file mode 100644
index 00000000..c08290f8
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_13.xml b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_13.xml
new file mode 100644
index 00000000..f47e6222
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5.xml b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5.xml
new file mode 100644
index 00000000..ff620912
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_12.xml b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_12.xml
new file mode 100644
index 00000000..9eeba6fa
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml b/Rk-progect/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml
new file mode 100644
index 00000000..39be3598
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml b/Rk-progect/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml
new file mode 100644
index 00000000..04db6be2
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_3_17.xml b/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_3_17.xml
new file mode 100644
index 00000000..2aaef9b5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_3_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_17.xml b/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_17.xml
new file mode 100644
index 00000000..41701cdf
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_17.xml b/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_17.xml
new file mode 100644
index 00000000..a80907ac
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_38.xml b/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_38.xml
new file mode 100644
index 00000000..6f4105ba
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_38.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_38.xml b/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_38.xml
new file mode 100644
index 00000000..8ebc6229
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_38.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_38.xml b/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_38.xml
new file mode 100644
index 00000000..c9f975f1
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_38.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml
new file mode 100644
index 00000000..8484214b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_velocity_velocity_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml
new file mode 100644
index 00000000..1e284c6b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_anim_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_anim_1_7.xml
new file mode 100644
index 00000000..e149f9a6
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_anim_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_awt_util_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_awt_util_1_7.xml
new file mode 100644
index 00000000..afc7765f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_awt_util_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_bridge_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_bridge_1_7.xml
new file mode 100644
index 00000000..74aee4db
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_bridge_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_codec_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_codec_1_7.xml
new file mode 100644
index 00000000..3a39e9e3
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_codec_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_css_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_css_1_7.xml
new file mode 100644
index 00000000..b9ec9ac7
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_css_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_dom_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_dom_1_7.xml
new file mode 100644
index 00000000..542ad40d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_dom_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_ext_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_ext_1_7.xml
new file mode 100644
index 00000000..68de70dc
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_ext_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_gvt_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_gvt_1_7.xml
new file mode 100644
index 00000000..fcb6ef42
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_gvt_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_js_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_js_1_7.xml
new file mode 100644
index 00000000..f0a0f44a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_js_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_parser_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_parser_1_7.xml
new file mode 100644
index 00000000..a7165cc3
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_parser_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_script_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_script_1_7.xml
new file mode 100644
index 00000000..1a304b2f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_script_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_svg_dom_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_svg_dom_1_7.xml
new file mode 100644
index 00000000..16d3c5a5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_svg_dom_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_svggen_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_svggen_1_7.xml
new file mode 100644
index 00000000..41e6e2ef
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_svggen_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_transcoder_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_transcoder_1_7.xml
new file mode 100644
index 00000000..3ddd1744
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_transcoder_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_util_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_util_1_7.xml
new file mode 100644
index 00000000..20832b9d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_util_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_xml_1_7.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_xml_1_7.xml
new file mode 100644
index 00000000..9f3d9f33
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_batik_xml_1_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_fop_0_94.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_fop_0_94.xml
new file mode 100644
index 00000000..b713b73a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_fop_0_94.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_xmlgraphics_commons_1_2.xml b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_xmlgraphics_commons_1_2.xml
new file mode 100644
index 00000000..4383d5a5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_apache_xmlgraphics_xmlgraphics_commons_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_6.xml b/Rk-progect/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_6.xml
new file mode 100644
index 00000000..7543d1af
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml b/Rk-progect/.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml
new file mode 100644
index 00000000..eef1bd6f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/Rk-progect/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 00000000..a548e929
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml b/Rk-progect/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
new file mode 100644
index 00000000..c7aab4d0
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_20_Final.xml b/Rk-progect/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_20_Final.xml
new file mode 100644
index 00000000..371ace88
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_20_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_3_Final.xml b/Rk-progect/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_3_Final.xml
new file mode 100644
index 00000000..a26df08c
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_3_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml b/Rk-progect/.idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml
new file mode 100644
index 00000000..227fd1fc
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mapstruct_mapstruct_1_2_0_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml b/Rk-progect/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml
new file mode 100644
index 00000000..0f96e55f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_3_4_2.xml b/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_3_4_2.xml
new file mode 100644
index 00000000..4cc53c43
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_3_4_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_3_4_6.xml b/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_3_4_6.xml
new file mode 100644
index 00000000..0af423ac
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_3_4_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_spring_1_3_2.xml b/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_spring_1_3_2.xml
new file mode 100644
index 00000000..b90afeee
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mybatis_mybatis_spring_1_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_1_3_2.xml b/Rk-progect/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_1_3_2.xml
new file mode 100644
index 00000000..1ccc7e3e
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_1_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_1_3_2.xml b/Rk-progect/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_1_3_2.xml
new file mode 100644
index 00000000..6b8fe8c7
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_1_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/Rk-progect/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
new file mode 100644
index 00000000..2c2db685
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml b/Rk-progect/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
new file mode 100644
index 00000000..1c0a5baa
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml b/Rk-progect/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml
new file mode 100644
index 00000000..efa73616
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml b/Rk-progect/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml
new file mode 100644
index 00000000..a627ae92
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/Rk-progect/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
new file mode 100644
index 00000000..71e9fefb
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml b/Rk-progect/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml
new file mode 100644
index 00000000..16ee3931
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml b/Rk-progect/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml
new file mode 100644
index 00000000..609a6744
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml b/Rk-progect/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml
new file mode 100644
index 00000000..b0228263
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..bc6dded4
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..1e3d3007
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_devtools_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_devtools_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..40a42ed0
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_devtools_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..0ea05dd8
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..61d0bff5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_aop_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..5e19e839
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_redis_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..537a774a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..c61ca081
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..3266c6ce
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..b8441878
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_security_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..11133c31
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..2b2f8de7
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..c0253869
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..de8cdf79
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_17_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_17_RELEASE.xml
new file mode 100644
index 00000000..f00da123
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_17_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_1_20_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_1_20_RELEASE.xml
new file mode 100644
index 00000000..09010846
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_1_20_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_1_20_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_1_20_RELEASE.xml
new file mode 100644
index 00000000..40ade277
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_1_20_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_1_20_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_1_20_RELEASE.xml
new file mode 100644
index 00000000..1f1db7cf
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_1_20_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml
new file mode 100644
index 00000000..a7f9436a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml
new file mode 100644
index 00000000..12d5b67a
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_1_12_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_1_12_RELEASE.xml
new file mode 100644
index 00000000..514459bb
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_config_5_1_12_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_1_12_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_1_12_RELEASE.xml
new file mode 100644
index 00000000..0bc85138
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_core_5_1_12_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_1_12_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_1_12_RELEASE.xml
new file mode 100644
index 00000000..9576e840
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_crypto_5_1_12_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_1_12_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_1_12_RELEASE.xml
new file mode 100644
index 00000000..37b96e16
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_security_spring_security_web_5_1_12_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_aop_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_aop_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..1f52c898
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_aop_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_beans_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_beans_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..84ba647f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_beans_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_context_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_context_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..f17ee5e5
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_context_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_context_support_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_context_support_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..d654fdff
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_context_support_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_core_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_core_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..c9362667
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_core_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_expression_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_expression_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..538ecb4f
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_expression_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..43687fe7
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_jdbc_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_jdbc_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..071279dd
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_jdbc_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_orm_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_orm_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..3d2c3c23
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_orm_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_oxm_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_oxm_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..db9ecf5b
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_oxm_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_test_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_test_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..eac37d18
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_test_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_tx_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_tx_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..09798d77
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_tx_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_web_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_web_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..96d3197d
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_web_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_18_RELEASE.xml b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_18_RELEASE.xml
new file mode 100644
index 00000000..2375e03e
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_18_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_4.xml b/Rk-progect/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_4.xml
new file mode 100644
index 00000000..7cfc60ba
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml b/Rk-progect/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml
new file mode 100644
index 00000000..ff4d7eac
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__stax_stax_api_1_0_1.xml b/Rk-progect/.idea/libraries/Maven__stax_stax_api_1_0_1.xml
new file mode 100644
index 00000000..1de9f49c
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__stax_stax_api_1_0_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__xalan_xalan_2_6_0.xml b/Rk-progect/.idea/libraries/Maven__xalan_xalan_2_6_0.xml
new file mode 100644
index 00000000..a1622415
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__xalan_xalan_2_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml b/Rk-progect/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml
new file mode 100644
index 00000000..a199e689
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__xml_apis_xml_apis_1_4_01.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/libraries/Maven__xml_apis_xml_apis_ext_1_3_04.xml b/Rk-progect/.idea/libraries/Maven__xml_apis_xml_apis_ext_1_3_04.xml
new file mode 100644
index 00000000..fe51a8ad
--- /dev/null
+++ b/Rk-progect/.idea/libraries/Maven__xml_apis_xml_apis_ext_1_3_04.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/misc.xml b/Rk-progect/.idea/misc.xml
new file mode 100644
index 00000000..9736c3a2
--- /dev/null
+++ b/Rk-progect/.idea/misc.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Android
+
+
+ IconsUsabilityLintAndroid
+
+
+ LintAndroid
+
+
+ UsabilityLintAndroid
+
+
+
+
+ AndroidLintIconDuplicates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/modules.xml b/Rk-progect/.idea/modules.xml
new file mode 100644
index 00000000..e8f939dc
--- /dev/null
+++ b/Rk-progect/.idea/modules.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/sshConfigs.xml b/Rk-progect/.idea/sshConfigs.xml
new file mode 100644
index 00000000..ea7158e7
--- /dev/null
+++ b/Rk-progect/.idea/sshConfigs.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/uiDesigner.xml b/Rk-progect/.idea/uiDesigner.xml
new file mode 100644
index 00000000..e96534fb
--- /dev/null
+++ b/Rk-progect/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/.idea/webServers.xml b/Rk-progect/.idea/webServers.xml
new file mode 100644
index 00000000..0f9e5f1d
--- /dev/null
+++ b/Rk-progect/.idea/webServers.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/RK-project.iml b/Rk-progect/RK-project.iml
new file mode 100644
index 00000000..f409c0ea
--- /dev/null
+++ b/Rk-progect/RK-project.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/bpmn/leave.bpmn b/Rk-progect/bpmn/leave.bpmn
new file mode 100644
index 00000000..8aeb92c4
--- /dev/null
+++ b/Rk-progect/bpmn/leave.bpmn
@@ -0,0 +1,137 @@
+
+
+
+ 请假流程演示
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/META-INF/MANIFEST.MF b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..c99fd994
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Created-By: IntelliJ IDEA
+Built-By: ThinkPad
+Build-Jdk: 1.8.0_261
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaAttachmentMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaAttachmentMapper.xml
new file mode 100644
index 00000000..50aee55d
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaAttachmentMapper.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_id, title, path, filename, ext, file_size, type, create_by, create_time, update_by, update_time, del_flag from "PUBLIC"."pa_attachment"
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_attachment"
+
+ project_id,
+ title,
+ path,
+ filename,
+ ext,
+ file_size,
+ type,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+
+
+ #{projectId},
+ #{title},
+ #{path},
+ #{filename},
+ #{ext},
+ #{fileSize},
+ #{type},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+
+
+
+
+ update "PUBLIC"."pa_attachment"
+
+ project_id = #{projectId},
+ title = #{title},
+ path = #{path},
+ filename = #{filename},
+ ext = #{ext},
+ file_size = #{fileSize},
+ type = #{type},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ del_flag = #{delFlag},
+
+ where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_attachment" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_attachment" where id in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaDeptMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaDeptMapper.xml
new file mode 100644
index 00000000..961b78eb
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaDeptMapper.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_dept"("id", "name","city")
+ values (#{id},#{name},#{city})
+
+
+
+ insert into "PUBLIC"."pa_dept"("id", "name","city")
+ values
+
+ (#{entity.id},#{entity.name},#{entity.city})
+
+
+
+
+ insert into"PUBLIC"."pa_dept"(name)
+ values
+
+ (#{entity.name})
+
+ on duplicate key update
+ name = values(name)
+
+
+
+
+ update "PUBLIC"."pa_dept"
+
+
+ name = #{name},
+
+
+ city = #{city},
+
+
+ where id = #{id}
+
+
+
+
+ delete from "PUBLIC"."pa_dept" where id = #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaFinanceBudgetMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaFinanceBudgetMapper.xml
new file mode 100644
index 00000000..24af9cfe
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaFinanceBudgetMapper.xml
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, finance_id, type, project_id, topic_id, ss_id, name, fy_plan, fy_result, fy_over, fy_tatio, sy_plan, sy_result, sy_over, sy_tatio, sort, remark, finaljuesuan, failid, total_notarizeresult, create_by, create_time, update_by, update_time, del_flag from "PUBLIC"."pa_finance_budget"
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_finance_budget"
+
+ id,
+ finance_id,
+ type,
+ project_id,
+ topic_id,
+ ss_id,
+ name,
+ fy_plan,
+ fy_result,
+ fy_over,
+ fy_tatio,
+ sy_plan,
+ sy_result,
+ sy_over,
+ sy_tatio,
+ sort,
+ remark,
+ finaljuesuan,
+ failid,
+ total_notarizeresult,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+
+
+ #{id},
+ #{financeId},
+ #{type},
+ #{projectId},
+ #{topicId},
+ #{ssId},
+ #{name},
+ #{fyPlan},
+ #{fyResult},
+ #{fyOver},
+ #{fyTatio},
+ #{syPlan},
+ #{syResult},
+ #{syOver},
+ #{syTatio},
+ #{sort},
+ #{remark},
+ #{finaljuesuan},
+ #{failid},
+ #{totalNotarizeresult},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+
+
+
+
+ update "PUBLIC"."pa_finance_budget"
+
+ finance_id = #{financeId},
+ type = #{type},
+ project_id = #{projectId},
+ topic_id = #{topicId},
+ ss_id = #{ssId},
+ name = #{name},
+ fy_plan = #{fyPlan},
+ fy_result = #{fyResult},
+ fy_over = #{fyOver},
+ fy_tatio = #{fyTatio},
+ sy_plan = #{syPlan},
+ sy_result = #{syResult},
+ sy_over = #{syOver},
+ sy_tatio = #{syTatio},
+ sort = #{sort},
+ remark = #{remark},
+ finaljuesuan = #{finaljuesuan},
+ failid = #{failid},
+ total_notarizeresult = #{totalNotarizeresult},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ del_flag = #{delFlag},
+
+ where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_finance_budget" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_finance_budget" where id in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaInstructionMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaInstructionMapper.xml
new file mode 100644
index 00000000..7c05c839
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaInstructionMapper.xml
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select "id", year, "num", "total_num", "title", "secret_level", "secret_year", "user_name", "dept_id", "dept_name", "print_date","status","remark", "create_by", "create_time", "update_by", "update_time", "del_flag", "instructions" from "PUBLIC"."pa_instruction"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_instruction"
+
+ year,
+ "num",
+ "total_num",
+ "title",
+ "secret_level",
+ "secret_year",
+ "user_name",
+ "dept_id",
+ "dept_name",
+ "print_date",
+ "status",
+ "remark",
+ "create_by",
+ "create_time",
+ "update_by",
+ "update_time",
+ "del_flag",
+ "instructions",
+
+
+ #{year},
+ #{num},
+ #{totalNum},
+ #{title},
+ #{secretLevel},
+ #{secretYear},
+ #{userName},
+ #{deptId},
+ #{deptName},
+ #{printDate},
+ #{status},
+ #{remark},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+ #{instructions},
+
+
+
+
+ update "PUBLIC"."pa_instruction"
+
+ year = #{year},
+ "num" = #{num},
+ "total_num" = #{totalNum},
+ "title"= #{title},
+ "secret_level" = #{secretLevel},
+ "secret_year" = #{secretYear},
+ "user_name" = #{userName},
+ "dept_id" = #{deptId},
+ "dept_name" = #{deptName},
+ "print_date" = #{printDate},
+ "status" = #{status},
+ "remark" = #{remark},
+ "create_by" = #{createBy},
+ "create_time" = #{createTime},
+ "update_by" = #{updateBy},
+ "update_time" = #{updateTime},
+ "del_flag" = #{delFlag},
+
+ where "id" = #{id}
+
+
+
+ delete from "PUBLIC"."pa_instruction" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_instruction" where "id" in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaParticipantsMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaParticipantsMapper.xml
new file mode 100644
index 00000000..da432062
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaParticipantsMapper.xml
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, category, object_id, export_id, name, sex, birthday, careid, post, company, tel, phone_num, email, professional, address, postal_code, contact, type, is_academician, department_id, cae_id, is_head, sort, inputs, credentials_t, create_by, create_time, update_by, update_time, del_flag from "PUBLIC"."pa_participants"
+
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_participants"
+
+ id,
+ category,
+ object_id,
+ export_id,
+ name,
+ sex,
+ birthday,
+ careid,
+ post,
+ company,
+ tel,
+ phone_num,
+ email,
+ professional,
+ address,
+ postal_code,
+ contact,
+ type,
+ is_academician,
+ department_id,
+ cae_id,
+ is_head,
+ sort,
+ inputs,
+ credentials_t,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+
+
+ #{id},
+ #{category},
+ #{objectId},
+ #{exportId},
+ #{name},
+ #{sex},
+ #{birthday},
+ #{careid},
+ #{post},
+ #{company},
+ #{tel},
+ #{phoneNum},
+ #{email},
+ #{professional},
+ #{address},
+ #{postalCode},
+ #{contact},
+ #{type},
+ #{isAcademician},
+ #{departmentId},
+ #{caeId},
+ #{isHead},
+ #{sort},
+ #{inputs},
+ #{credentialsT},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+
+
+
+
+ update "PUBLIC"."pa_participants"
+
+ category = #{category},
+ object_id = #{objectId},
+ export_id = #{exportId},
+ name = #{name},
+ sex = #{sex},
+ birthday = #{birthday},
+ careid = #{careid},
+ post = #{post},
+ company = #{company},
+ tel = #{tel},
+ phone_num = #{phoneNum},
+ email = #{email},
+ professional = #{professional},
+ address = #{address},
+ postal_code = #{postalCode},
+ contact = #{contact},
+ type = #{type},
+ is_academician = #{isAcademician},
+ department_id = #{departmentId},
+ cae_id = #{caeId},
+ is_head = #{isHead},
+ sort = #{sort},
+ inputs = #{inputs},
+ credentials_t = #{credentialsT},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ del_flag = #{delFlag},
+
+ where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_participants" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_participants" where id in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaProjectInfoMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaProjectInfoMapper.xml
new file mode 100644
index 00000000..b38562eb
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaProjectInfoMapper.xml
@@ -0,0 +1,893 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, category, code, name, type, department_id,department_name,user_id, deadline, total_outlay, first_outlay, second_outlay, status, begin_date, complete_date, end_date, approval_date, is_secrecy, secrecy_level, secrecy_term, is_topic, task_target, result_target, method_route, plan, spend_explain, rely_id, last_date, review_status_xb, review_status_cw, total_budget, first_budget, second_budget, apply_id, project_source, project_source_company, review_status_zwh, is_agreement, rely_unit_head, rely_unit_headtocw, task_period, otherplan, point, result,introduction, proprotion, term, create_by, create_time, update_by, update_time, del_flag,user_name,yituo_unit,yituo_area,important_key,is_result,pishi_status,pishi_content from "PUBLIC"."pa_project_info"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_project_info"
+
+ id,
+ category,
+ code,
+ name,
+ type,
+ department_id,
+ department_name,
+ user_id,
+ deadline,
+ total_outlay,
+ first_outlay,
+ second_outlay,
+ status,
+ begin_date,
+ complete_date,
+ end_date,
+ approval_date,
+ is_secrecy,
+ secrecy_level,
+ secrecy_term,
+ is_topic,
+ task_target,
+ result_target,
+ method_route,
+ plan,
+ spend_explain,
+ rely_id,
+ last_date,
+ review_status_xb,
+ review_status_cw,
+ total_budget,
+ first_budget,
+ second_budget,
+ apply_id,
+ project_source,
+ project_source_company,
+ review_status_zwh,
+ is_agreement,
+ rely_unit_head,
+ rely_unit_headtocw,
+ task_period,
+ otherplan,
+ point,
+ result,
+ introduction,
+ proprotion,
+ term,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+ user_name,
+ yituo_unit,
+ yituo_area,
+ important_key,
+ is_result,
+ pishi_status,
+ pishi_content,
+ pishi_content,
+
+
+ #{id},
+ #{category},
+ #{code},
+ #{name},
+ #{type},
+ #{departmentId},
+ #{departmentName},
+ #{userId},
+ #{deadline},
+ #{totalOutlay},
+ #{firstOutlay},
+ #{secondOutlay},
+ #{status},
+ #{beginDate},
+ #{completeDate},
+ #{endDate},
+ #{approvalDate},
+ #{isSecrecy},
+ #{secrecyLevel},
+ #{secrecyTerm},
+ #{isTopic},
+ #{taskTarget},
+ #{resultTarget},
+ #{methodRoute},
+ #{plan},
+ #{spendExplain},
+ #{relyId},
+ #{lastDate},
+ #{reviewStatusXb},
+ #{reviewStatusCw},
+ #{totalBudget},
+ #{firstBudget},
+ #{secondBudget},
+ #{applyId},
+ #{projectSource},
+ #{projectSourceCompany},
+ #{reviewStatusZwh},
+ #{isAgreement},
+ #{relyUnitHead},
+ #{relyUnitHeadtocw},
+ #{taskPeriod},
+ #{otherplan},
+ #{point},
+ #{result},
+ #{introduction},
+ #{proprotion},
+ #{term},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+ #{userName},
+ #{yituoUnit},
+ #{yituoArea},
+ #{importantKey},
+ #{isResult},
+ #{pishiStatus},
+ #{pishiContent},
+ #{year},
+
+
+
+
+
+ update "PUBLIC"."pa_project_info"
+
+ category = #{category},
+ code = #{code},
+ name = #{name},
+ user_name = #{userName},
+ type = #{type},
+ department_id = #{departmentId},
+ user_id = #{userId},
+ deadline = #{deadline},
+ total_outlay = #{totalOutlay},
+ first_outlay = #{firstOutlay},
+ second_outlay = #{secondOutlay},
+ status = #{status},
+ begin_date = #{beginDate},
+ complete_date = #{completeDate},
+ end_date = #{endDate},
+ approval_date = #{approvalDate},
+ is_secrecy = #{isSecrecy},
+ secrecy_level = #{secrecyLevel},
+ secrecy_term = #{secrecyTerm},
+ is_topic = #{isTopic},
+ task_target = #{taskTarget},
+ result_target = #{resultTarget},
+ method_route = #{methodRoute},
+ plan = #{plan},
+ spend_explain = #{spendExplain},
+ rely_id = #{relyId},
+ last_date = #{lastDate},
+ review_status_xb = #{reviewStatusXb},
+ review_status_cw = #{reviewStatusCw},
+ total_budget = #{totalBudget},
+ first_budget = #{firstBudget},
+ second_budget = #{secondBudget},
+ apply_id = #{applyId},
+ project_source = #{projectSource},
+ project_source_company = #{projectSourceCompany},
+ review_status_zwh = #{reviewStatusZwh},
+ is_agreement = #{isAgreement},
+ rely_unit_head = #{relyUnitHead},
+ rely_unit_headtocw = #{relyUnitHeadtocw},
+ task_period = #{taskPeriod},
+ otherplan = #{otherplan},
+ point = #{point},
+ result = #{result},
+ introduction = #{introduction},
+ proprotion = #{proprotion},
+ term = #{term},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ del_flag = #{delFlag},
+ yituo_unit = #{yituoUnit},
+ yituo_area = #{yituoArea},
+ important_key = #{importantKey},
+ is_result= #{isResult},
+ pishi_status = #{pishiStatus},
+ pishi_content = #{pishiContent},
+
+ where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_project_info" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_project_info" where id in
+
+ #{id}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaResultMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaResultMapper.xml
new file mode 100644
index 00000000..57425856
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaResultMapper.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select "id", "name","dept_id", "dept_name", "user_name", "create_by", "create_time", "update_by", "update_time", "del_flag","remark" from "PUBLIC"."pa_result"
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_result"
+
+ "name",
+ "dept_id",
+ "dept_name",
+ "user_name",
+ "create_by",
+ "create_time",
+ "update_by",
+ "update_time",
+ "del_flag",
+ "remark",
+ "volume_order",
+ "rd_team",
+
+
+ #{name},
+ #{deptId},
+ #{deptName},
+ #{userName},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+ #{remark},
+ #{VolumeOrder},
+ #{RDTeam},
+
+
+
+
+ update "PUBLIC"."pa_result"
+
+ "name" = #{name},
+ "dept_id" = #{deptId},
+ "dept_name" = #{deptName},
+ "user_name" = #{userName},
+ "create_by" = #{createBy},
+ "create_time" = #{createTime},
+ "update_by" = #{updateBy},
+ "update_time" = #{updateTime},
+ "del_flag" = #{delFlag},
+ "remark" = #{remark},
+
+ where "id" = #{id}
+
+
+
+ delete from "PUBLIC"."pa_result" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_result" where "id" in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaSpecialSubjectMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaSpecialSubjectMapper.xml
new file mode 100644
index 00000000..50984807
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaSpecialSubjectMapper.xml
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_id, topic_id, code, name, relation, department_id, user_id, total_outlay, begin_date, complete_date, end_date, status, method, password, spend_explain, rely_id, last_date, first_outlay, second_outlay, deadline, total_budget, first_budget, second_budget, rely_unit_head, rely_unit_headtocw, task_period, otherplan, plan, result, introduction, proprotion, task_target, result_target, term, create_by, create_time, update_by, update_time, del_flag,user_name,rely_name from "PUBLIC"."pa_special_subject"
+
+
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_special_subject"
+
+ id,
+ project_id,
+ topic_id,
+ code,
+ name,
+ relation,
+ department_id,
+ user_id,
+ total_outlay,
+ begin_date,
+ complete_date,
+ end_date,
+ status,
+ method,
+ password,
+ spend_explain,
+ rely_id,
+ last_date,
+ first_outlay,
+ second_outlay,
+ deadline,
+ total_budget,
+ first_budget,
+ second_budget,
+ rely_unit_head,
+ rely_unit_headtocw,
+ task_period,
+ otherplan,
+ plan,
+ result,
+ introduction,
+ proprotion,
+ task_target,
+ result_target,
+ term,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+ user_name,
+ rely_name,
+
+
+ #{id},
+ #{projectId},
+ #{topicId},
+ #{code},
+ #{name},
+ #{relation},
+ #{departmentId},
+ #{userId},
+ #{totalOutlay},
+ #{beginDate},
+ #{completeDate},
+ #{endDate},
+ #{status},
+ #{method},
+ #{password},
+ #{spendExplain},
+ #{relyId},
+ #{lastDate},
+ #{firstOutlay},
+ #{secondOutlay},
+ #{deadline},
+ #{totalBudget},
+ #{firstBudget},
+ #{secondBudget},
+ #{relyUnitHead},
+ #{relyUnitHeadtocw},
+ #{taskPeriod},
+ #{otherplan},
+ #{plan},
+ #{result},
+ #{introduction},
+ #{proprotion},
+ #{taskTarget},
+ #{resultTarget},
+ #{term},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+ #{userName},
+ #{relyName},
+
+
+
+
+ update "PUBLIC"."pa_special_subject"
+
+ project_id = #{projectId},
+ topic_id = #{topicId},
+ code = #{code},
+ name = #{name},
+ user_name = #{userName},
+ relation = #{relation},
+ department_id = #{departmentId},
+ user_id = #{userId},
+ total_outlay = #{totalOutlay},
+ begin_date = #{beginDate},
+ complete_date = #{completeDate},
+ end_date = #{endDate},
+ status = #{status},
+ method = #{method},
+ password = #{password},
+ spend_explain = #{spendExplain},
+ rely_id = #{relyId},
+ last_date = #{lastDate},
+ first_outlay = #{firstOutlay},
+ second_outlay = #{secondOutlay},
+ deadline = #{deadline},
+ total_budget = #{totalBudget},
+ first_budget = #{firstBudget},
+ second_budget = #{secondBudget},
+ rely_unit_head = #{relyUnitHead},
+ rely_unit_headtocw = #{relyUnitHeadtocw},
+ task_period = #{taskPeriod},
+ otherplan = #{otherplan},
+ plan = #{plan},
+ result = #{result},
+ introduction = #{introduction},
+ proprotion = #{proprotion},
+ task_target = #{taskTarget},
+ result_target = #{resultTarget},
+ term = #{term},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ del_flag = #{delFlag},
+ rely_Name = #{relyName},
+
+ where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_special_subject" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_special_subject" where id in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaTopicMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaTopicMapper.xml
new file mode 100644
index 00000000..fd923144
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/PaTopicMapper.xml
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, project_id, code, name, content, department_id, user_id, total_outlay, begin_date, complete_date, end_date, status, method, password, is_ss, task_target, result_target, method_route, plan, spend_explain, rely_id, last_date, first_outlay, second_outlay, deadline, total_budget, first_budget, second_budget, rely_unit_head, rely_unit_headtocw, task_period, otherplan, result, introduction, proprotion, create_by, create_time, update_by, update_time, del_flag,user_name,dept_name from "PUBLIC"."pa_topic"
+
+
+
+
+
+
+
+
+
+ insert into "PUBLIC"."pa_topic"
+
+ id,
+ project_id,
+ code,
+ name,
+ user_name,
+ content,
+ department_id,
+ user_id,
+ total_outlay,
+ begin_date,
+ complete_date,
+ end_date,
+ status,
+ method,
+ password,
+ is_ss,
+ task_target,
+ result_target,
+ method_route,
+ plan,
+ spend_explain,
+ rely_id,
+ last_date,
+ first_outlay,
+ second_outlay,
+ deadline,
+ total_budget,
+ first_budget,
+ second_budget,
+ rely_unit_head,
+ rely_unit_headtocw,
+ task_period,
+ otherplan,
+ result,
+ introduction,
+ proprotion,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ del_flag,
+ dept_Name,
+
+
+ #{id},
+ #{projectId},
+ #{code},
+ #{name},
+ #{userName},
+ #{content},
+ #{departmentId},
+ #{userId},
+ #{totalOutlay},
+ #{beginDate},
+ #{completeDate},
+ #{endDate},
+ #{status},
+ #{method},
+ #{password},
+ #{isSs},
+ #{taskTarget},
+ #{resultTarget},
+ #{methodRoute},
+ #{plan},
+ #{spendExplain},
+ #{relyId},
+ #{lastDate},
+ #{firstOutlay},
+ #{secondOutlay},
+ #{deadline},
+ #{totalBudget},
+ #{firstBudget},
+ #{secondBudget},
+ #{relyUnitHead},
+ #{relyUnitHeadtocw},
+ #{taskPeriod},
+ #{otherplan},
+ #{result},
+ #{introduction},
+ #{proprotion},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{delFlag},
+ #{deptName},
+
+
+
+
+ update "PUBLIC"."pa_topic"
+
+ project_id = #{projectId},
+ code = #{code},
+ name = #{name},
+ user_name = #{userName},
+ content = #{content},
+ department_id = #{departmentId},
+ user_id = #{userId},
+ total_outlay = #{totalOutlay},
+ begin_date = #{beginDate},
+ complete_date = #{completeDate},
+ end_date = #{endDate},
+ status = #{status},
+ method = #{method},
+ password = #{password},
+ is_ss = #{isSs},
+ task_target = #{taskTarget},
+ result_target = #{resultTarget},
+ method_route = #{methodRoute},
+ plan = #{plan},
+ spend_explain = #{spendExplain},
+ rely_id = #{relyId},
+ last_date = #{lastDate},
+ first_outlay = #{firstOutlay},
+ second_outlay = #{secondOutlay},
+ deadline = #{deadline},
+ total_budget = #{totalBudget},
+ first_budget = #{firstBudget},
+ second_budget = #{secondBudget},
+ rely_unit_head = #{relyUnitHead},
+ rely_unit_headtocw = #{relyUnitHeadtocw},
+ task_period = #{taskPeriod},
+ otherplan = #{otherplan},
+ result = #{result},
+ introduction = #{introduction},
+ proprotion = #{proprotion},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ del_flag = #{delFlag},
+ dept_name = #{deptName},
+
+ where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_topic" where id = #{id}
+
+
+
+ delete from "PUBLIC"."pa_topic" where id in
+
+ #{id}
+
+
+
+
+
+
diff --git a/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/ProjectInfoMapper.xml b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/ProjectInfoMapper.xml
new file mode 100644
index 00000000..f6268e4a
--- /dev/null
+++ b/Rk-progect/classes/artifacts/ruoyi_project_war_exploded/WEB-INF/classes/mapper/project/ProjectInfoMapper.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select project_id, project_code, project_source, project_name, contact_depart, principal, project_year, project_type, research_period, toatl_funding_control, project_start_time, project_end_time, project_search_cycle, secret_level, faculty_number, academician_number, subject_number, topic_number, annex_name, annex_path, create_by, create_time, update_by, update_time, remark, del_flag,is_file from "PUBLIC"."project_info"
+
+
+
+
+
+
+
+ insert into "PUBLIC"."project_info"
+
+ project_id,
+ project_code,
+ project_source,
+ project_name,
+ contact_depart,
+ principal,
+ project_year,
+ project_type,
+ research_period,
+ toatl_funding_control,
+ project_start_time,
+ project_end_time,
+ project_search_cycle,
+ secret_level,
+ faculty_number,
+ academician_number,
+ subject_number,
+ topic_number,
+ annex_name,
+ annex_path,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ del_flag,
+ is_file,
+
+
+ #{projectId},
+ #{projectCode},
+ #{projectSource},
+ #{projectName},
+ #{contactDepart},
+ #{principal},
+ #{projectYear},
+ #{projectType},
+ #{researchPeriod},
+ #{toatlFundingControl},
+ #{projectStartTime},
+ #{projectEndTime},
+ #{projectSearchCycle},
+ #{secretLevel},
+ #{facultyNumber},
+ #{academicianNumber},
+ #{subjectNumber},
+ #{topicNumber},
+ #{annexName},
+ #{annexPath},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{delFlag},
+ #{isFile},
+
+
+
+
+ update "PUBLIC"."project_info"
+
+ project_code = #{projectCode},
+ project_source = #{projectSource},
+ project_name = #{projectName},
+ contact_depart = #{contactDepart},
+ principal = #{principal},
+ project_year = #{projectYear},
+ project_type = #{projectType},
+ research_period = #{researchPeriod},
+ toatl_funding_control = #{toatlFundingControl},
+ project_start_time = #{projectStartTime},
+ project_end_time = #{projectEndTime},
+ project_search_cycle = #{projectSearchCycle},
+ secret_level = #{secretLevel},
+ faculty_number = #{facultyNumber},
+ academician_number = #{academicianNumber},
+ subject_number = #{subjectNumber},
+ topic_number = #{topicNumber},
+ annex_name = #{annexName},
+ annex_path = #{annexPath},
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ del_flag = #{delFlag},
+ is_file = #{isFile},
+
+ where project_id = #{projectId}
+
+
+
+ delete from "PUBLIC"."project_info" where project_id = #{projectId}
+
+
+
+ delete from "PUBLIC"."project_info" where project_id in
+
+ #{projectId}
+
+
+
+
diff --git a/Rk-progect/null/2021/11/10/9de16047-c8b9-45cd-984b-3679c9cb50d1.pdf b/Rk-progect/null/2021/11/10/9de16047-c8b9-45cd-984b-3679c9cb50d1.pdf
new file mode 100644
index 00000000..b266af64
Binary files /dev/null and b/Rk-progect/null/2021/11/10/9de16047-c8b9-45cd-984b-3679c9cb50d1.pdf differ
diff --git a/Rk-progect/pom.xml b/Rk-progect/pom.xml
new file mode 100644
index 00000000..def04443
--- /dev/null
+++ b/Rk-progect/pom.xml
@@ -0,0 +1,289 @@
+
+
+ 4.0.0
+
+ com.ruoyi
+ RK-project
+ 3.1.0
+
+ RK-project
+
+ 咨询项目成果管理系统
+
+
+ 3.1.0
+ UTF-8
+ UTF-8
+ 1.8
+ 3.1.1
+ 1.3.2
+ 1.1.22
+ 1.19
+ 2.9.2
+ 2.3.2
+ 1.2.5
+ 1.2.73
+ 5.2.5
+ 5.5.0
+ 2.5
+ 1.3.3
+ 3.17
+ 1.7
+ 0.9.1
+ 6.0.0
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 2.1.17.RELEASE
+ pom
+ import
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+
+ eu.bitwalker
+ UserAgentUtils
+ ${bitwalker.version}
+
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.boot.version}
+
+
+
+
+ com.github.oshi
+ oshi-core
+ ${oshi.version}
+
+
+
+ net.java.dev.jna
+ jna
+
+
+
+ net.java.dev.jna
+ jna-platform
+
+
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.swagger
+ swagger-annotations
+
+
+ io.swagger
+ swagger-models
+
+
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+
+
+ commons-io
+ commons-io
+ ${commons.io.version}
+
+
+
+
+ commons-fileupload
+ commons-fileupload
+ ${commons.fileupload.version}
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi.version}
+
+
+
+
+ org.apache.velocity
+ velocity
+ ${velocity.version}
+
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+
+ io.jsonwebtoken
+ jjwt
+ ${jwt.version}
+
+
+
+
+ com.github.penggle
+ kaptcha
+ ${kaptcha.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-quartz
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-generator
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-framework
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-system
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-common
+ ${ruoyi.version}
+
+
+
+ com.ruoyi
+ ruoyi-activiti
+ ${ruoyi.version}
+
+
+
+ com.ruoyi
+ ruoyi-workFlow
+ ${ruoyi.version}
+
+
+
+ com.ruoyi
+ ruoyi-project
+ ${ruoyi.version}
+
+
+
+
+
+
+ ruoyi-admin
+ ruoyi-framework
+ ruoyi-system
+ ruoyi-quartz
+ ruoyi-generator
+ ruoyi-common
+ ruoyi-activiti
+ ruoyi-workFlow
+ ruoyi-project
+
+ pom
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+ UTF-8
+
+
+ xlsx
+ xls
+
+
+
+
+
+
+
+
+ public
+ aliyun nexus
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+ true
+
+
+
+
+
+
+ public
+ aliyun nexus
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+ true
+
+
+ false
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-activiti/.classpath b/Rk-progect/ruoyi-activiti/.classpath
new file mode 100644
index 00000000..cd04a794
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/.classpath
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-activiti/.project b/Rk-progect/ruoyi-activiti/.project
new file mode 100644
index 00000000..e7c5ec1a
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/.project
@@ -0,0 +1,23 @@
+
+
+ ruoyi-activiti
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/Rk-progect/ruoyi-activiti/.settings/org.eclipse.core.resources.prefs b/Rk-progect/ruoyi-activiti/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..abdea9ac
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/=UTF-8
diff --git a/Rk-progect/ruoyi-activiti/.settings/org.eclipse.jdt.core.prefs b/Rk-progect/ruoyi-activiti/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..2f5cc74c
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/Rk-progect/ruoyi-activiti/.settings/org.eclipse.m2e.core.prefs b/Rk-progect/ruoyi-activiti/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000..f897a7f1
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/Rk-progect/ruoyi-activiti/pom.xml b/Rk-progect/ruoyi-activiti/pom.xml
new file mode 100644
index 00000000..6adfb439
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/pom.xml
@@ -0,0 +1,69 @@
+
+
+
+ RK-project
+ com.ruoyi
+ 3.1.0
+
+ 4.0.0
+
+ ruoyi-activiti
+
+
+
+ org.activiti
+ activiti-spring-boot-starter-rest-api
+ ${activiti.version}
+
+
+ com.ruoyi
+ ruoyi-framework
+
+
+ com.ruoyi
+ ruoyi-system
+
+
+ com.ruoyi
+ ruoyi-common
+
+
+
+ org.activiti
+ activiti-json-converter
+ 6.0.0
+
+
+ org.activiti
+ activiti-bpmn-model
+
+
+
+
+
+ org.apache.xmlgraphics
+ batik-codec
+ 1.7
+
+
+ org.apache.xmlgraphics
+ batik-css
+ 1.7
+
+
+ org.apache.xmlgraphics
+ batik-svg-dom
+ 1.7
+
+
+ org.apache.xmlgraphics
+ batik-svggen
+ 1.7
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-activiti/ruoyi-activiti.iml b/Rk-progect/ruoyi-activiti/ruoyi-activiti.iml
new file mode 100644
index 00000000..e684b4b4
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/ruoyi-activiti.iml
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/ActivitiConfig.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/ActivitiConfig.java
new file mode 100644
index 00000000..5cc22995
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/ActivitiConfig.java
@@ -0,0 +1,26 @@
+package com.ruoyi.activiti.config;
+
+import org.activiti.spring.SpringProcessEngineConfiguration;
+import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class ActivitiConfig implements ProcessEngineConfigurationConfigurer {
+
+ @Autowired
+ private ICustomProcessDiagramGenerator customProcessDiagramGenerator;
+
+ /**
+ * 解決工作流生成图片乱码问题
+ *
+ * @param processEngineConfiguration
+ */
+ @Override
+ public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
+ processEngineConfiguration.setActivityFontName("宋体");
+ processEngineConfiguration.setAnnotationFontName("宋体");
+ processEngineConfiguration.setLabelFontName("宋体");
+ processEngineConfiguration.setProcessDiagramGenerator(customProcessDiagramGenerator);
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/CustomProcessDiagramCanvas.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/CustomProcessDiagramCanvas.java
new file mode 100644
index 00000000..76884046
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/CustomProcessDiagramCanvas.java
@@ -0,0 +1,245 @@
+package com.ruoyi.activiti.config;
+
+import org.activiti.bpmn.model.AssociationDirection;
+import org.activiti.bpmn.model.GraphicInfo;
+import org.activiti.image.exception.ActivitiImageException;
+import org.activiti.image.impl.DefaultProcessDiagramCanvas;
+import org.activiti.image.util.ReflectUtil;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.font.FontRenderContext;
+import java.awt.font.LineBreakMeasurer;
+import java.awt.font.TextAttribute;
+import java.awt.font.TextLayout;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.text.AttributedCharacterIterator;
+import java.text.AttributedString;
+
+public class CustomProcessDiagramCanvas extends DefaultProcessDiagramCanvas {
+
+ protected static Color LABEL_COLOR = new Color(0, 0, 0);
+
+ //font
+ protected String activityFontName = "宋体";
+ protected String labelFontName = "宋体";
+ protected String annotationFontName = "宋体";
+
+ private static volatile boolean flag = false;
+
+ public CustomProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) {
+ super(width, height, minX, minY, imageType);
+ }
+
+ public CustomProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType,
+ String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) {
+ super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName,
+ customClassLoader);
+ }
+
+ public void drawHighLight(boolean isStartOrEnd, int x, int y, int width, int height, Color color) {
+ Paint originalPaint = g.getPaint();
+ Stroke originalStroke = g.getStroke();
+
+ g.setPaint(color);
+ g.setStroke(MULTI_INSTANCE_STROKE);
+ if (isStartOrEnd) {// 开始、结束节点画圆
+ g.drawOval(x, y, width, height);
+ } else {// 非开始、结束节点画圆角矩形
+ RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 5, 5);
+ g.draw(rect);
+ }
+ g.setPaint(originalPaint);
+ g.setStroke(originalStroke);
+ }
+
+ public void drawSequenceflow(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault,
+ boolean highLighted, double scaleFactor, Color color) {
+ drawConnection(xPoints, yPoints, conditional, isDefault, "sequenceFlow", AssociationDirection.ONE, highLighted,
+ scaleFactor, color);
+ }
+
+ public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault,
+ String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor,
+ Color color) {
+
+ Paint originalPaint = g.getPaint();
+ Stroke originalStroke = g.getStroke();
+
+ g.setPaint(CONNECTION_COLOR);
+ if (connectionType.equals("association")) {
+ g.setStroke(ASSOCIATION_STROKE);
+ } else if (highLighted) {
+ g.setPaint(color);
+ g.setStroke(HIGHLIGHT_FLOW_STROKE);
+ }
+
+ for (int i = 1; i < xPoints.length; i++) {
+ Integer sourceX = xPoints[i - 1];
+ Integer sourceY = yPoints[i - 1];
+ Integer targetX = xPoints[i];
+ Integer targetY = yPoints[i];
+ Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY);
+ g.draw(line);
+ }
+
+ if (isDefault) {
+ Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);
+ drawDefaultSequenceFlowIndicator(line, scaleFactor);
+ }
+
+ if (conditional) {
+ Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);
+ drawConditionalSequenceFlowIndicator(line, scaleFactor);
+ }
+
+ if (associationDirection.equals(AssociationDirection.ONE)
+ || associationDirection.equals(AssociationDirection.BOTH)) {
+ Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2],
+ xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]);
+ drawArrowHead(line, scaleFactor);
+ }
+ if (associationDirection.equals(AssociationDirection.BOTH)) {
+ Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]);
+ drawArrowHead(line, scaleFactor);
+ }
+ g.setPaint(originalPaint);
+ g.setStroke(originalStroke);
+ }
+
+ public void drawLabel(boolean highLighted, String text, GraphicInfo graphicInfo, boolean centered) {
+ float interline = 1.0f;
+
+ // text
+ if (text != null && text.length() > 0) {
+ Paint originalPaint = g.getPaint();
+ Font originalFont = g.getFont();
+ if (highLighted) {
+ g.setPaint(WorkflowConstants.COLOR_NORMAL);
+ } else {
+ g.setPaint(LABEL_COLOR);
+ }
+ g.setFont(new Font(labelFontName, Font.BOLD, 10));
+
+ int wrapWidth = 100;
+ int textY = (int) graphicInfo.getY();
+
+ // TODO: use drawMultilineText()
+ AttributedString as = new AttributedString(text);
+ as.addAttribute(TextAttribute.FOREGROUND, g.getPaint());
+ as.addAttribute(TextAttribute.FONT, g.getFont());
+ AttributedCharacterIterator aci = as.getIterator();
+ FontRenderContext frc = new FontRenderContext(null, true, false);
+ LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);
+
+ while (lbm.getPosition() < text.length()) {
+ TextLayout tl = lbm.nextLayout(wrapWidth);
+ textY += tl.getAscent();
+ Rectangle2D bb = tl.getBounds();
+ double tX = graphicInfo.getX();
+ if (centered) {
+ tX += (int) (graphicInfo.getWidth() / 2 - bb.getWidth() / 2);
+ }
+ tl.draw(g, (float) tX, textY);
+ textY += tl.getDescent() + tl.getLeading() + (interline - 1.0f) * tl.getAscent();
+ }
+
+ // restore originals
+ g.setFont(originalFont);
+ g.setPaint(originalPaint);
+ }
+ }
+
+ @Override
+ public BufferedImage generateBufferedImage(String imageType) {
+ if (closed) {
+ throw new ActivitiImageException("ProcessDiagramGenerator already closed");
+ }
+
+ // Try to remove white space
+ minX = (minX <= WorkflowConstants.PROCESS_PADDING) ? WorkflowConstants.PROCESS_PADDING : minX;
+ minY = (minY <= WorkflowConstants.PROCESS_PADDING) ? WorkflowConstants.PROCESS_PADDING : minY;
+ BufferedImage imageToSerialize = processDiagram;
+ if (minX >= 0 && minY >= 0) {
+ imageToSerialize = processDiagram.getSubimage(
+ minX - WorkflowConstants.PROCESS_PADDING,
+ minY - WorkflowConstants.PROCESS_PADDING,
+ canvasWidth - minX + WorkflowConstants.PROCESS_PADDING,
+ canvasHeight - minY + WorkflowConstants.PROCESS_PADDING);
+ }
+ return imageToSerialize;
+ }
+
+ @Override
+ public void initialize(String imageType) {
+ this.processDiagram = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB);
+ this.g = processDiagram.createGraphics();
+
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g.setPaint(Color.black);
+
+ Font font = new Font(activityFontName, Font.BOLD, FONT_SIZE);
+ g.setFont(font);
+ this.fontMetrics = g.getFontMetrics();
+
+ LABEL_FONT = new Font(labelFontName, Font.ITALIC, 10);
+ ANNOTATION_FONT = new Font(annotationFontName, Font.PLAIN, FONT_SIZE);
+ //优化加载速度
+ if(flag) {
+ return;
+ }
+ try {
+ USERTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/userTask.png", customClassLoader));
+ SCRIPTTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/scriptTask.png", customClassLoader));
+ SERVICETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/serviceTask.png", customClassLoader));
+ RECEIVETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/receiveTask.png", customClassLoader));
+ SENDTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/sendTask.png", customClassLoader));
+ MANUALTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/manualTask.png", customClassLoader));
+ BUSINESS_RULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/businessRuleTask.png", customClassLoader));
+ SHELL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/shellTask.png", customClassLoader));
+ CAMEL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/camelTask.png", customClassLoader));
+ MULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/muleTask.png", customClassLoader));
+
+ TIMER_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/timer.png", customClassLoader));
+ COMPENSATE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/compensate-throw.png", customClassLoader));
+ COMPENSATE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/compensate.png", customClassLoader));
+ ERROR_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/error-throw.png", customClassLoader));
+ ERROR_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/error.png", customClassLoader));
+ MESSAGE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/message-throw.png", customClassLoader));
+ MESSAGE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/message.png", customClassLoader));
+ SIGNAL_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/signal-throw.png", customClassLoader));
+ SIGNAL_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/activiti/icons/signal.png", customClassLoader));
+/* String baseUrl = Thread.currentThread().getContextClassLoader().getResource("static/img/activiti/").getPath();
+ SCRIPTTASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"scriptTask.png"));
+ USERTASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"userTask.png"));
+ SERVICETASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"serviceTask.png"));
+ RECEIVETASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"receiveTask.png"));
+ SENDTASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"sendTask.png"));
+ MANUALTASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"manualTask.png"));
+ BUSINESS_RULE_TASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"businessRuleTask.png"));
+ SHELL_TASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"shellTask.png"));
+ CAMEL_TASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"camelTask.png"));
+ MULE_TASK_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"muleTask.png"));
+
+ TIMER_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"timer.png"));
+ COMPENSATE_THROW_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"compensate-throw.png"));
+ COMPENSATE_CATCH_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"compensate.png"));
+ ERROR_THROW_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"error-throw.png"));
+ ERROR_CATCH_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"error.png"));
+ MESSAGE_THROW_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"message-throw.png"));
+ MESSAGE_CATCH_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"message.png"));
+ SIGNAL_THROW_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"signal-throw.png"));
+ SIGNAL_CATCH_IMAGE = ImageIO.read(new FileInputStream(baseUrl+"signal.png"));*/
+ flag = true;
+ } catch (IOException e) {
+ flag = false;
+ LOGGER.warn("Could not load image for process diagram creation: {}", e.getMessage());
+ }
+ }
+
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/CustomProcessDiagramGenerator.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/CustomProcessDiagramGenerator.java
new file mode 100644
index 00000000..656e7de4
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/CustomProcessDiagramGenerator.java
@@ -0,0 +1,361 @@
+package com.ruoyi.activiti.config;
+
+import org.activiti.bpmn.model.Process;
+import org.activiti.bpmn.model.*;
+import org.activiti.image.impl.DefaultProcessDiagramGenerator;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.imageio.ImageIO;
+import javax.imageio.stream.ImageOutputStream;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+@Component
+public class CustomProcessDiagramGenerator extends DefaultProcessDiagramGenerator implements ICustomProcessDiagramGenerator{
+ //预初始化流程图绘制,大大提升了系统启动后首次查看流程图的速度
+ static {
+ new CustomProcessDiagramCanvas(10,10,0,0,"png", "宋体","宋体","宋体",null);
+ }
+
+ public CustomProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType,
+ List highLightedActivities, List highLightedFlows, String activityFontName,
+ String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor,
+ Color[] colors, Set currIds) {
+
+ if(null == highLightedActivities) {
+ highLightedActivities = Collections.emptyList();
+ }
+ if(null == highLightedFlows) {
+ highLightedFlows = Collections.emptyList();
+ }
+
+ prepareBpmnModel(bpmnModel);
+
+ CustomProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader);
+
+ // Draw pool shape, if process is participant in collaboration
+ for (Pool pool : bpmnModel.getPools()) {
+ GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId());
+ processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo);
+ }
+
+ // Draw lanes
+ for (Process process : bpmnModel.getProcesses()) {
+ for (Lane lane : process.getLanes()) {
+ GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId());
+ processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo);
+ }
+ }
+
+ // Draw activities and their sequence-flows
+ for (Process process: bpmnModel.getProcesses()) {
+ List flowNodeList= process.findFlowElementsOfType(FlowNode.class);
+ for (FlowNode flowNode : flowNodeList) {
+ drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, scaleFactor, colors, currIds);
+ }
+ }
+
+ // Draw artifacts
+ for (Process process : bpmnModel.getProcesses()) {
+
+ for (Artifact artifact : process.getArtifacts()) {
+ drawArtifact(processDiagramCanvas, bpmnModel, artifact);
+ }
+
+ List subProcesses = process.findFlowElementsOfType(SubProcess.class, true);
+ if (subProcesses != null) {
+ for (SubProcess subProcess : subProcesses) {
+ for (Artifact subProcessArtifact : subProcess.getArtifacts()) {
+ drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact);
+ }
+ }
+ }
+ }
+
+ return processDiagramCanvas;
+ }
+
+ protected void drawActivity(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode,
+ List highLightedActivities, List highLightedFlows, double scaleFactor, Color[] colors, Set currIds) {
+ ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass());
+ if (drawInstruction != null) {
+
+ drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode);
+
+ // Gather info on the multi instance marker
+ boolean multiInstanceSequential = false, multiInstanceParallel = false, collapsed = false;
+ if (flowNode instanceof Activity) {
+ Activity activity = (Activity) flowNode;
+ MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics();
+ if (multiInstanceLoopCharacteristics != null) {
+ multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential();
+ multiInstanceParallel = !multiInstanceSequential;
+ }
+ }
+
+ // Gather info on the collapsed marker
+ GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());
+ if (flowNode instanceof SubProcess) {
+ collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded();
+ } else if (flowNode instanceof CallActivity) {
+ collapsed = true;
+ }
+
+ if (scaleFactor == 1.0) {
+ // Actually draw the markers
+ processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(),(int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(),
+ multiInstanceSequential, multiInstanceParallel, collapsed);
+ }
+
+ // Draw highlighted activities
+ if (highLightedActivities.contains(flowNode.getId())) {
+ if(!CollectionUtils.isEmpty(currIds)
+ &&currIds.contains(flowNode.getId())
+ && !(flowNode instanceof Gateway)) {//非结束节点,并且是当前节点
+ drawHighLight((flowNode instanceof StartEvent), processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId()), colors[1]);
+ }else {//普通节点
+ drawHighLight((flowNode instanceof StartEvent)||(flowNode instanceof EndEvent),processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId()), colors[0]);
+ }
+ }
+
+ }
+
+ // Outgoing transitions of activity
+ for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) {
+ String flowId = sequenceFlow.getId();
+ boolean highLighted = (highLightedFlows.contains(flowId));
+ String defaultFlow = null;
+ if (flowNode instanceof Activity) {
+ defaultFlow = ((Activity) flowNode).getDefaultFlow();
+ } else if (flowNode instanceof Gateway) {
+ defaultFlow = ((Gateway) flowNode).getDefaultFlow();
+ }
+
+ boolean isDefault = false;
+ if (defaultFlow != null && defaultFlow.equalsIgnoreCase(flowId)) {
+ isDefault = true;
+ }
+// boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway);
+
+ String sourceRef = sequenceFlow.getSourceRef();
+ String targetRef = sequenceFlow.getTargetRef();
+ FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef);
+ FlowElement targetElement = bpmnModel.getFlowElement(targetRef);
+ List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(flowId);
+ if (graphicInfoList != null && graphicInfoList.size() > 0) {
+ graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList);
+ int xPoints[]= new int[graphicInfoList.size()];
+ int yPoints[]= new int[graphicInfoList.size()];
+
+ for (int i=1; i= 5);
+// }
+ }
+ }
+
+ // Nested elements
+ if (flowNode instanceof FlowElementsContainer) {
+ for (FlowElement nestedFlowElement : ((FlowElementsContainer) flowNode).getFlowElements()) {
+ if (nestedFlowElement instanceof FlowNode) {
+ drawActivity(processDiagramCanvas, bpmnModel, (FlowNode) nestedFlowElement,
+ highLightedActivities, highLightedFlows, scaleFactor);
+ }
+ }
+ }
+ }
+ protected void drawHighLight(boolean isStartOrEnd, CustomProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo, Color color) {
+ processDiagramCanvas.drawHighLight(isStartOrEnd, (int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), color);
+ }
+
+ protected static CustomProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType,
+ String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) {
+
+ // We need to calculate maximum values to know how big the image will be in its entirety
+ double minX = Double.MAX_VALUE;
+ double maxX = 0;
+ double minY = Double.MAX_VALUE;
+ double maxY = 0;
+
+ for (Pool pool : bpmnModel.getPools()) {
+ GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId());
+ minX = graphicInfo.getX();
+ maxX = graphicInfo.getX() + graphicInfo.getWidth();
+ minY = graphicInfo.getY();
+ maxY = graphicInfo.getY() + graphicInfo.getHeight();
+ }
+
+ List flowNodes = gatherAllFlowNodes(bpmnModel);
+ for (FlowNode flowNode : flowNodes) {
+
+ GraphicInfo flowNodeGraphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());
+
+ // width
+ if (flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth() > maxX) {
+ maxX = flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth();
+ }
+ if (flowNodeGraphicInfo.getX() < minX) {
+ minX = flowNodeGraphicInfo.getX();
+ }
+ // height
+ if (flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight() > maxY) {
+ maxY = flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight();
+ }
+ if (flowNodeGraphicInfo.getY() < minY) {
+ minY = flowNodeGraphicInfo.getY();
+ }
+
+ for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) {
+ List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId());
+ if (graphicInfoList != null) {
+ for (GraphicInfo graphicInfo : graphicInfoList) {
+ // width
+ if (graphicInfo.getX() > maxX) {
+ maxX = graphicInfo.getX();
+ }
+ if (graphicInfo.getX() < minX) {
+ minX = graphicInfo.getX();
+ }
+ // height
+ if (graphicInfo.getY() > maxY) {
+ maxY = graphicInfo.getY();
+ }
+ if (graphicInfo.getY()< minY) {
+ minY = graphicInfo.getY();
+ }
+ }
+ }
+ }
+ }
+
+ List artifacts = gatherAllArtifacts(bpmnModel);
+ for (Artifact artifact : artifacts) {
+
+ GraphicInfo artifactGraphicInfo = bpmnModel.getGraphicInfo(artifact.getId());
+
+ if (artifactGraphicInfo != null) {
+ // width
+ if (artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth() > maxX) {
+ maxX = artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth();
+ }
+ if (artifactGraphicInfo.getX() < minX) {
+ minX = artifactGraphicInfo.getX();
+ }
+ // height
+ if (artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight() > maxY) {
+ maxY = artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight();
+ }
+ if (artifactGraphicInfo.getY() < minY) {
+ minY = artifactGraphicInfo.getY();
+ }
+ }
+
+ List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId());
+ if (graphicInfoList != null) {
+ for (GraphicInfo graphicInfo : graphicInfoList) {
+ // width
+ if (graphicInfo.getX() > maxX) {
+ maxX = graphicInfo.getX();
+ }
+ if (graphicInfo.getX() < minX) {
+ minX = graphicInfo.getX();
+ }
+ // height
+ if (graphicInfo.getY() > maxY) {
+ maxY = graphicInfo.getY();
+ }
+ if (graphicInfo.getY()< minY) {
+ minY = graphicInfo.getY();
+ }
+ }
+ }
+ }
+
+ int nrOfLanes = 0;
+ for (Process process : bpmnModel.getProcesses()) {
+ for (Lane l : process.getLanes()) {
+
+ nrOfLanes++;
+
+ GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(l.getId());
+ // // width
+ if (graphicInfo.getX() + graphicInfo.getWidth() > maxX) {
+ maxX = graphicInfo.getX() + graphicInfo.getWidth();
+ }
+ if (graphicInfo.getX() < minX) {
+ minX = graphicInfo.getX();
+ }
+ // height
+ if (graphicInfo.getY() + graphicInfo.getHeight() > maxY) {
+ maxY = graphicInfo.getY() + graphicInfo.getHeight();
+ }
+ if (graphicInfo.getY() < minY) {
+ minY = graphicInfo.getY();
+ }
+ }
+ }
+
+ // Special case, see https://activiti.atlassian.net/browse/ACT-1431
+ if (flowNodes.isEmpty() && bpmnModel.getPools().isEmpty() && nrOfLanes == 0) {
+ // Nothing to show
+ minX = 0;
+ minY = 0;
+ }
+
+ return new CustomProcessDiagramCanvas((int) maxX + 10,(int) maxY + 10, (int) minX, (int) minY,
+ imageType, activityFontName, labelFontName, annotationFontName, customClassLoader);
+ }
+
+ @Override
+ public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities,
+ List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName,
+ ClassLoader customClassLoader, double scaleFactor, Color[] colors, Set currIds) {
+ CustomProcessDiagramCanvas customProcessDiagramCanvas = generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows,
+ activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor,colors, currIds);
+ BufferedImage bufferedImage = customProcessDiagramCanvas.generateBufferedImage(imageType);
+ ByteArrayOutputStream bs = new ByteArrayOutputStream();
+ ImageOutputStream imOut;
+ try {
+ imOut = ImageIO.createImageOutputStream(bs);
+ ImageIO.write(bufferedImage, "PNG", imOut);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ InputStream is = new ByteArrayInputStream(bs.toByteArray());
+ return is;
+ }
+ @Override
+ public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) {
+ return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(),
+ activityFontName, labelFontName, annotationFontName, customClassLoader, 1.0, new Color[] {Color.BLACK, Color.BLACK}, null);
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/ICustomProcessDiagramGenerator.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/ICustomProcessDiagramGenerator.java
new file mode 100644
index 00000000..67f89efc
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/ICustomProcessDiagramGenerator.java
@@ -0,0 +1,15 @@
+package com.ruoyi.activiti.config;
+
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.image.ProcessDiagramGenerator;
+
+import java.awt.*;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Set;
+
+public interface ICustomProcessDiagramGenerator extends ProcessDiagramGenerator {
+ InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities,
+ List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName,
+ ClassLoader customClassLoader, double scaleFactor, Color[] colors, Set currIds);
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/WorkflowConstants.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/WorkflowConstants.java
new file mode 100644
index 00000000..f347f2b4
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/config/WorkflowConstants.java
@@ -0,0 +1,136 @@
+package com.ruoyi.activiti.config;
+
+import java.awt.*;
+
+/**
+ * 常量类
+ *@author jjd
+ **/
+public final class WorkflowConstants {
+
+ /**businessKey**/
+ public static final String WORKLOW_BUSINESS_KEY = "businessKey";
+ /**按钮网关**/
+ public static final String WAY_TYPE = "wayType";
+ /**按钮网关**/
+ public static final String WAY_TYPE_PREFIX = "way_type_";
+ /**项目id**/
+ public static final String PROJECT_ID = "projectId";
+ /**核心企业Id变量**/
+ public static final String CORE_ENTERPRISE_ID="coreEnterpriseId";
+ /**链属企业Id变量**/
+ public static final String CHAIN_ENTERPRISE_ID="chainEnterpriseId";
+ /**银行企业Id变量**/
+ public static final String BANK_ENTERPRISE_ID="bankEnterpriseId";
+ /**保理公司Id变量**/
+ public static final String BAOLI_ENTERPRISE_ID="baoliEnterpriseId";
+ /**立账开立企业Id变量**/
+ public static final String START_ENTERPRISE_ID="startEnterpriseId";
+ /**立账合作企业Id变量**/
+ public static final String PARTNER_ENTERPRISE_ID="partnerEnterpriseId";
+ /**母公司企业id**/
+ public static final String PARENT_ENTERPRISE_ID="parentEnterpriseId";
+ /**指定签收企业id**/
+ public static final String RECEIVE_ENTERPRISE_ID ="receiveEnterpriseId";
+ /**转出方企业Id变量**/
+ public static final String TRANSFER_ENTERPRISE_ID="transEnterpriseId";
+ /**指定签收企业id**/
+ public static final String AC_TASK_ID ="acTaskId";
+ /**企业所有角色**/
+ public static final String ENT_ALL_ROLE ="all";
+ /**运营所有角色**/
+ public static final String OPER_ALL_ROLE ="oper";
+ /**流程定义缓存时间**/
+ public static final int PROCESS_DEFINITION_CACHE = 60;
+ /**流程实例激活**/
+ public static final int PROCESS_INSTANCE_ACTIVE = 1;
+
+ /**流程实例挂起**/
+ public static final int PROCESS_INSTANCE_SUSPEND = 0;
+
+ /**读取图片**/
+ public static final String READ_IMAGE = "image";
+
+ /**读取xml**/
+ public static final String READ_XML = "xml";
+
+ /**流程激活**/
+ public static final Integer ACTIVE_PROCESSDEFINITION = 1;
+
+ /**流程挂起**/
+ public static final Integer SUSPEND_PROCESSDEFINITION = 2;
+
+ /**流程状态:0-全部,1-正常,2-已挂起**/
+ public static final int QUERY_ALL = 0;
+ public static final int QUERY_NORMAL = 1;
+ public static final int QUERY_SUSPENDED = 2;
+
+ /**流程实例状态:0-全部,1-正常,2-已删除**/
+ public static final int INSTANCE_ALL = 0;
+ public static final int INSTANCE_NOT_DELETED = 1;
+ public static final int INSTANCE_DELETED = 2;
+
+ /** 系统管理员ID **/
+ public static final String INTERFACE_SYSTEM_ID = "-1";
+ /** 系统管理员名称 **/
+ public static final String INTERFACE_SYSTEM_NAME = "系统操作";
+
+ /** 流程部署类型:1-启动并激活,2-启动即挂起 **/
+ public static final int PROCESS_START_ACTIVE = 1;
+ public static final int PROCESS_START_SUSPEND = 2;
+
+ /** 用于标识流程项目配置信息校验结果:1:新流程,2:新版本, 3:流程类别有误 **/
+ public static final int CHECK_NEW_PROCESS = 1;
+ public static final int CHECK_NEW_VERSION = 2;
+ public static final int CHECK_ERROR_PROCESS_TYPE = 3;
+
+ /** 默认网关条件值 **/
+ public static final Integer default_GATEWAY_CONDITION_VALUE = 1;
+
+ /** 工作流-业务状态表数据类型:1-工作流状态,2-业务状态 **/
+ public static final Integer PROCESS_STATUS = 1;
+ public static final Integer BIZNESS_STATUS = 2;
+
+ /** 新增流程时标识:1-直接保存,2-提示覆盖 **/
+ public static final Integer PROCESS_STATUS_SAVE = 1;
+ public static final Integer BIZNESS_STATUS_WARN = 2;
+
+ /** 模板类型标识:1-新创建或直接导入的模板,2-默认模板生成 **/
+ public static final Integer MODEL_TYPE_1 = 1;
+ public static final Integer MODEL_TYPE_2 = 2;
+
+ /** 查询流程定义标识:1-查询最新版本流程定义,2-查询所有版本 **/
+ public static final Integer QUERY_PROCESS_LATEST_VERSION = 1;
+ public static final Integer QUERY_PROCESS_ALL_VERSION = 2;
+
+ /** 按钮网关 通过1 */
+ public static final String WAY_TYPE_PASS = "1";
+ /** 按钮网关 驳回或结束0 */
+ public static final String WAY_TYPE_REJECT = "0";
+
+ /** 按钮网关 退回2 */
+ public static final String WAY_TYPE_BACK = "2";
+
+ /**任务参数为空**/
+ public static final int TASK_CHECK_PARAM_NULL = -1;
+ /**任务已办理**/
+ public static final int TASK_CHECK_COMPLETED = 1;
+ /**无权限办理**/
+ public static final int TASK_CHECK_NO_PERMISSIONS= 2;
+ /**任务校验通过**/
+ public static final int TASK_CHECK_PASS = 0;
+ /** 动态流程图颜色定义 **/
+ public static final Color COLOR_NORMAL = new Color(0, 205, 0);
+ public static final Color COLOR_CURRENT = new Color(255, 0, 0);
+
+ /** 定义生成流程图时的边距(像素) **/
+ public static final int PROCESS_PADDING = 5;
+
+ /** 定义新版业务进度查询包含的流程类型 **/
+// public static final List INCLUDE_PROCEE_TYPE = Lists.newArrayList(
+// ProcessTypeEnum.BUILD_ACCOUNT_APPLY,
+// ProcessTypeEnum.CREDIT_LETTER_APPLY,
+// ProcessTypeEnum.CREDIT_LETTER_TRANSFER,
+// ProcessTypeEnum.CREDIT_LETTER_CASH);
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ActIdGroupController.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ActIdGroupController.java
new file mode 100644
index 00000000..f6ba2e72
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ActIdGroupController.java
@@ -0,0 +1,70 @@
+package com.ruoyi.activiti.controller;
+
+import com.github.pagehelper.Page;
+import com.ruoyi.activiti.domain.ActIdGroup;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.StringUtils;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.identity.Group;
+import org.activiti.engine.identity.GroupQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 流程用户组Controller
+ *
+ * @author Xianlu Tech
+ * @date 2019-10-02
+ */
+@Controller
+@RequestMapping("/activiti/actIdGroup")
+public class ActIdGroupController extends BaseController
+{
+
+
+ @Autowired
+ private IdentityService identityService;
+
+
+ /**
+ * 查询流程用户组列表
+ */
+ @GetMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(ActIdGroup query)
+ {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+
+ GroupQuery groupQuery = identityService.createGroupQuery();
+ if (StringUtils.isNotBlank(query.getId())) {
+ groupQuery.groupId(query.getId());
+ }
+ if (StringUtils.isNotBlank(query.getName())) {
+ groupQuery.groupNameLike("%" + query.getName() + "%");
+ }
+ List groupList = groupQuery.listPage((pageNum - 1) * pageSize, pageSize);
+ Page list = new Page<>();
+ list.setTotal(groupQuery.count());
+ list.setPageNum(pageNum);
+ list.setPageSize(pageSize);
+ for (Group group: groupList) {
+ ActIdGroup idGroup = new ActIdGroup();
+ idGroup.setId(group.getId());
+ idGroup.setName(group.getName());
+ list.add(idGroup);
+ }
+ return getDataTable(list);
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ActIdUserController.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ActIdUserController.java
new file mode 100644
index 00000000..ea790ee7
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ActIdUserController.java
@@ -0,0 +1,95 @@
+package com.ruoyi.activiti.controller;
+
+import com.github.pagehelper.Page;
+import com.ruoyi.activiti.domain.ActIdUser;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysUserService;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.identity.User;
+import org.activiti.engine.identity.UserQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 流程用户Controller
+ *
+ * @author Xianlu Tech
+ * @date 2019-10-02
+ */
+@Controller
+@RequestMapping("/activiti/actIdUser")
+public class ActIdUserController extends BaseController {
+
+
+ @Autowired
+ private IdentityService identityService;
+ @Autowired
+ private ISysUserService userService;
+
+
+ /**
+ * 查询流程用户列表
+ */
+ @GetMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(ActIdUser query)
+ {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+
+ UserQuery userQuery = identityService.createUserQuery();
+ if (StringUtils.isNotBlank(query.getId())) {
+ userQuery.userId(query.getId());
+ }
+ if (StringUtils.isNotBlank(query.getFirst())) {
+ userQuery.userFirstNameLike("%" + query.getFirst() + "%");
+ }
+ if (StringUtils.isNotBlank(query.getEmail())) {
+ userQuery.userEmailLike("%" + query.getEmail() + "%");
+ }
+ List userList = userQuery.listPage((pageNum - 1) * pageSize, pageSize);
+ Page list = new Page<>();
+ list.setTotal(userQuery.count());
+ list.setPageNum(pageNum);
+ list.setPageSize(pageSize);
+ for (User user: userList) {
+ ActIdUser idUser = new ActIdUser();
+ idUser.setId(user.getId());
+ idUser.setFirst(user.getFirstName());
+ idUser.setEmail(user.getEmail());
+ list.add(idUser);
+ }
+ return getDataTable(list);
+ }
+
+// /**
+// * 选择系统用户
+// */
+// @GetMapping("/authUser/selectUser")
+// public String selectUser(String taskId, ModelMap mmap) {
+// mmap.put("taskId", taskId);
+// return prefix + "/selectUser";
+// }
+
+ @PostMapping("/systemUserList")
+ @ResponseBody
+ public TableDataInfo systemUserList(SysUser user) {
+ startPage();
+ List list = userService.selectUserList(user);
+ return getDataTable(list);
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ProcessController.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ProcessController.java
new file mode 100644
index 00000000..e066975d
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ProcessController.java
@@ -0,0 +1,300 @@
+package com.ruoyi.activiti.controller;
+
+import com.ruoyi.activiti.config.ICustomProcessDiagramGenerator;
+import com.ruoyi.activiti.config.WorkflowConstants;
+import com.ruoyi.activiti.domain.ActivitiBaseEntity;
+import com.ruoyi.activiti.domain.HistoricActivity;
+import com.ruoyi.activiti.service.IProcessService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.FlowNode;
+import org.activiti.bpmn.model.SequenceFlow;
+import org.activiti.engine.*;
+import org.activiti.engine.history.HistoricActivityInstance;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.impl.RepositoryServiceImpl;
+import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
+import org.activiti.engine.impl.persistence.entity.TaskEntityImpl;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.repository.ProcessDefinitionQuery;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/process")
+public class ProcessController extends BaseController {
+
+
+
+ @Autowired
+ private RepositoryService repositoryService;
+
+ @Autowired
+ private HistoryService historyService;
+
+ @Autowired
+ private ProcessEngine processEngine;
+
+ @Autowired
+ private IProcessService processService;
+
+ @Autowired
+ private RuntimeService runtimeService;
+
+ @Autowired
+ private TaskService taskService;
+
+
+ /**
+ * 审批历史列表
+ * @param instanceId
+ * @return
+ */
+// @RequiresPermissions("process:leave:list")
+ @GetMapping("/listHistory/{instanceId}")
+ @ResponseBody
+ public TableDataInfo listHistory(@PathVariable String instanceId, HistoricActivity historicActivity) {
+ startPage();
+ List list = processService.selectHistoryList(instanceId, historicActivity);
+ return getDataTable(list);
+ }
+
+ @RequestMapping(value = "/read-resource")
+ public void readResource(String pProcessInstanceId, HttpServletResponse response)
+ throws Exception {
+
+ String processDefinitionId = "";
+ ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(pProcessInstanceId).singleResult();
+ if(processInstance == null) {
+ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(pProcessInstanceId).singleResult();
+ processDefinitionId = historicProcessInstance.getProcessDefinitionId();
+ } else {
+ processDefinitionId = processInstance.getProcessDefinitionId();
+ }
+ ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
+ ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
+
+ String resourceName = pd.getDiagramResourceName();
+
+ if(resourceName.endsWith(".png") && StringUtils.isEmpty(pProcessInstanceId) == false)
+ {
+ getActivitiProccessImage(pProcessInstanceId,response);
+ //ProcessDiagramGenerator.generateDiagram(pde, "png", getRuntimeService().getActiveActivityIds(processInstanceId));
+ }
+ else
+ {
+ // 通过接口读取
+ InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
+
+ // 输出资源内容到相应对象
+ byte[] b = new byte[1024];
+ int len = -1;
+ while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
+ response.getOutputStream().write(b, 0, len);
+ }
+ }
+ }
+
+ /**
+ * 获取流程图像,已执行节点和流程线高亮显示
+ */
+ public void getActivitiProccessImage(String pProcessInstanceId, HttpServletResponse response) {
+ //logger.info("[开始]-获取流程图图像");
+ try {
+ // 获取历史流程实例
+ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
+ .processInstanceId(pProcessInstanceId).singleResult();
+
+ if (historicProcessInstance == null) {
+ //throw new BusinessException("获取流程实例ID[" + pProcessInstanceId + "]对应的历史流程实例失败!");
+ }
+ else {
+ // 获取流程定义
+ ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
+ .getDeployedProcessDefinition(historicProcessInstance.getProcessDefinitionId());
+
+ // 获取流程历史中已执行节点,并按照节点在流程中执行先后顺序排序
+ List historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery()
+ .processInstanceId(pProcessInstanceId).orderByHistoricActivityInstanceId().asc().list();
+
+ // 已执行的节点ID集合
+ List executedActivityIdList = new ArrayList();
+ int index = 1;
+ //logger.info("获取已经执行的节点ID");
+ for (HistoricActivityInstance activityInstance : historicActivityInstanceList) {
+ executedActivityIdList.add(activityInstance.getActivityId());
+
+ //logger.info("第[" + index + "]个已执行节点=" + activityInstance.getActivityId() + " : " +activityInstance.getActivityName());
+ index++;
+ }
+
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
+
+ // 已执行的线集合
+ List flowIds = new ArrayList();
+ // 获取流程走过的线 (getHighLightedFlows是下面的方法)
+ flowIds = getHighLightedFlows(bpmnModel,processDefinition, historicActivityInstanceList);
+
+// // 获取流程图图像字符流
+// ProcessDiagramGenerator pec = processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator();
+// //配置字体
+// InputStream imageStream = pec.generateDiagram(bpmnModel, "png", executedActivityIdList, flowIds,"宋体","微软雅黑","黑体",null,2.0);
+
+ Set currIds = runtimeService.createExecutionQuery().processInstanceId(pProcessInstanceId).list()
+ .stream().map(e->e.getActivityId()).collect(Collectors.toSet());
+
+ ICustomProcessDiagramGenerator diagramGenerator = (ICustomProcessDiagramGenerator) processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator();
+ InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", executedActivityIdList,
+ flowIds, "宋体", "宋体", "宋体", null, 1.0, new Color[] { WorkflowConstants.COLOR_NORMAL, WorkflowConstants.COLOR_CURRENT }, currIds);
+
+ response.setContentType("image/png");
+ OutputStream os = response.getOutputStream();
+ int bytesRead = 0;
+ byte[] buffer = new byte[8192];
+ while ((bytesRead = imageStream.read(buffer, 0, 8192)) != -1) {
+ os.write(buffer, 0, bytesRead);
+ }
+ os.close();
+ imageStream.close();
+ }
+ //logger.info("[完成]-获取流程图图像");
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ //logger.error("【异常】-获取流程图失败!" + e.getMessage());
+ //throw new BusinessException("获取流程图失败!" + e.getMessage());
+ }
+ }
+
+ private List getHighLightedFlows(BpmnModel bpmnModel,ProcessDefinitionEntity processDefinitionEntity,List historicActivityInstances) {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //24小时制
+ List highFlows = new ArrayList();// 用以保存高亮的线flowId
+
+ for (int i = 0; i < historicActivityInstances.size() - 1; i++) {
+ // 对历史流程节点进行遍历
+ // 得到节点定义的详细信息
+ FlowNode activityImpl = (FlowNode)bpmnModel.getMainProcess().getFlowElement(historicActivityInstances.get(i).getActivityId());
+
+
+ List sameStartTimeNodes = new ArrayList();// 用以保存后续开始时间相同的节点
+ FlowNode sameActivityImpl1 = null;
+
+ HistoricActivityInstance activityImpl_ = historicActivityInstances.get(i);// 第一个节点
+ HistoricActivityInstance activityImp2_ ;
+
+ for(int k = i + 1 ; k <= historicActivityInstances.size() - 1; k++) {
+ activityImp2_ = historicActivityInstances.get(k);// 后续第1个节点
+
+ if ( activityImpl_.getActivityType().equals("userTask") && activityImp2_.getActivityType().equals("userTask") &&
+ df.format(activityImpl_.getStartTime()).equals(df.format(activityImp2_.getStartTime())) ) //都是usertask,且主节点与后续节点的开始时间相同,说明不是真实的后继节点
+ {
+
+ }
+ else {
+ sameActivityImpl1 = (FlowNode)bpmnModel.getMainProcess().getFlowElement(historicActivityInstances.get(k).getActivityId());//找到紧跟在后面的一个节点
+ break;
+ }
+
+ }
+ sameStartTimeNodes.add(sameActivityImpl1); // 将后面第一个节点放在时间相同节点的集合里
+ for (int j = i + 1; j < historicActivityInstances.size() - 1; j++) {
+ HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j);// 后续第一个节点
+ HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);// 后续第二个节点
+
+ if (df.format(activityImpl1.getStartTime()).equals(df.format(activityImpl2.getStartTime())) )
+ {// 如果第一个节点和第二个节点开始时间相同保存
+ FlowNode sameActivityImpl2 = (FlowNode)bpmnModel.getMainProcess().getFlowElement(activityImpl2.getActivityId());
+ sameStartTimeNodes.add(sameActivityImpl2);
+ }
+ else
+ {// 有不相同跳出循环
+ break;
+ }
+ }
+ List pvmTransitions = activityImpl.getOutgoingFlows() ; // 取出节点的所有出去的线
+
+ for (SequenceFlow pvmTransition : pvmTransitions)
+ {// 对所有的线进行遍历
+ FlowNode pvmActivityImpl = (FlowNode)bpmnModel.getMainProcess().getFlowElement( pvmTransition.getTargetRef());// 如果取出的线的目标节点存在时间相同的节点里,保存该线的id,进行高亮显示
+ if (sameStartTimeNodes.contains(pvmActivityImpl)) {
+ highFlows.add(pvmTransition.getId());
+ }
+ }
+
+ }
+ return highFlows;
+
+ }
+
+
+ @PostMapping("/delegate")
+ @ResponseBody
+ public AjaxResult delegate(String taskId, String delegateToUser) {
+ processService.delegate(taskId, SecurityUtils.getUsername(), delegateToUser);
+ return AjaxResult.success();
+ }
+
+ @PostMapping( "/cancelApply/{instanceId}")
+ @ResponseBody
+ public AjaxResult cancelApply(@PathVariable String instanceId) {
+ processService.cancelApply(instanceId, "用户撤销");
+ return AjaxResult.success();
+ }
+
+ @PostMapping( "/suspendOrActiveApply")
+ @ResponseBody
+ public AjaxResult suspendOrActiveApply(@RequestBody ActivitiBaseEntity activitiBaseEntity) {
+ processService.suspendOrActiveApply(activitiBaseEntity.getInstanceId(), activitiBaseEntity.getSuspendState());
+ return AjaxResult.success();
+ }
+
+ @GetMapping("/showVerifyDialog/{taskId}")
+ public AjaxResult showVerifyDialog(@PathVariable("taskId") String taskId) {
+ Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+ String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1);
+ return AjaxResult.success(verifyName);
+ }
+ /**
+ * 完成任务
+ *
+ * @return
+ */
+ @PostMapping(value = "/complete")
+ @ResponseBody
+ public AjaxResult complete( @RequestBody ActivitiBaseEntity activitiBaseEntity) {
+ List taskList = taskService.createTaskQuery()
+ .processInstanceId(activitiBaseEntity.getInstanceId())
+// .singleResult();
+ .list();
+
+ if (!CollectionUtils.isEmpty(taskList)) {
+ TaskEntityImpl task = (TaskEntityImpl) taskList.get(0);
+ activitiBaseEntity.setTaskId(task.getId());
+
+ }
+ processService.complete(activitiBaseEntity,"leave");
+ return AjaxResult.success("任务已完成");
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ProcessDefinitionController.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ProcessDefinitionController.java
new file mode 100644
index 00000000..73a10983
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/controller/ProcessDefinitionController.java
@@ -0,0 +1,188 @@
+package com.ruoyi.activiti.controller;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.ruoyi.activiti.domain.ProcessDefinition;
+import com.ruoyi.activiti.service.ProcessDefinitionService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.editor.constants.ModelDataJsonConstants;
+import org.activiti.editor.language.json.converter.BpmnJsonConverter;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.repository.Model;
+import org.activiti.engine.repository.ProcessDefinitionQuery;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.aspectj.weaver.loadtime.Aj;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+@Controller
+@RequestMapping("/definition")
+public class ProcessDefinitionController extends BaseController {
+
+ private static final Logger log = LoggerFactory.getLogger(ProcessDefinitionController.class);
+
+ private String prefix = "definition";
+
+ @Autowired
+ private ProcessDefinitionService processDefinitionService;
+ @Autowired
+ private RepositoryService repositoryService;
+
+
+ @GetMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(ProcessDefinition processDefinition) {
+ List list = processDefinitionService.listProcessDefinition(processDefinition);
+ return getDataTable(list);
+ }
+
+ /**
+ * 部署流程定义
+ */
+ @Log(title = "流程定义", businessType = BusinessType.INSERT)
+ @PostMapping("/upload")
+ @ResponseBody
+ public AjaxResult upload(MultipartFile file) {
+ try {
+ if (!file.isEmpty()) {
+ String extensionName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.') + 1);
+ if (!"bpmn".equalsIgnoreCase(extensionName)
+ && !"zip".equalsIgnoreCase(extensionName)
+ && !"bar".equalsIgnoreCase(extensionName)) {
+ return AjaxResult.error("流程定义文件仅支持 bpmn, zip 和 bar 格式!");
+ }
+ // p.s. 此时 FileUploadUtils.upload() 返回字符串 fileName 前缀为 Constants.RESOURCE_PREFIX,需剔除
+// 详见: FileUploadUtils.getPathFileName(...)
+ String fileName = FileUploadUtils.upload(RuoYiConfig.getProfile()+ "/processDefiniton", file);
+
+ if (StringUtils.isNotBlank(fileName)) {
+ String realFilePath = RuoYiConfig.getProfile()+ fileName.substring(Constants.RESOURCE_PREFIX.length());
+ processDefinitionService.deployProcessDefinition(realFilePath);
+ return AjaxResult.success();
+ }
+ }
+ return AjaxResult.error("不允许上传空文件!");
+ }
+ catch (Exception e) {
+ log.error("上传流程定义文件失败!", e);
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+ @Log(title = "流程定义", businessType = BusinessType.DELETE)
+ @DeleteMapping("/remove/{ids}")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ try {
+ return toAjax(processDefinitionService.deleteProcessDeploymentByIds(ids));
+ }
+ catch (Exception e) {
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+// @Log(title = "流程定义", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// @ResponseBody
+// public AjaxResult export() {
+// List list = processDefinitionService.listProcessDefinition(new ProcessDefinition());
+// ExcelUtil util = new ExcelUtil<>(ProcessDefinition.class);
+// return util.exportExcel(list, "流程定义数据");
+// }
+
+ @PostMapping( "/suspendOrActiveApply")
+ @ResponseBody
+ public AjaxResult suspendOrActiveApply(@RequestBody ProcessDefinition processDefinition) {
+ processDefinitionService.suspendOrActiveApply(processDefinition.getId(), processDefinition.getSuspendState());
+ return AjaxResult.success();
+ }
+
+ /**
+ * 读取流程资源
+ *
+ * @param processDefinitionId 流程定义ID
+ * @param resourceName 资源名称
+ */
+ @RequestMapping(value = "/readResource")
+ public void readResource(@RequestParam("processDefinitionId") String processDefinitionId, @RequestParam("resourceName") String resourceName, HttpServletResponse response)
+ throws Exception {
+ ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
+ org.activiti.engine.repository.ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
+
+ // 通过接口读取
+ InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
+
+ // 输出资源内容到相应对象
+ byte[] b = new byte[1024];
+ int len = -1;
+ while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
+ response.getOutputStream().write(b, 0, len);
+ }
+ }
+
+ /**
+ * 转换流程定义为模型
+ * @param processDefinitionId
+ * @return
+ * @throws UnsupportedEncodingException
+ * @throws XMLStreamException
+ */
+ @PostMapping(value = "/convert2Model")
+ @ResponseBody
+ public AjaxResult convertToModel(@RequestBody String processDefinitionId)
+ throws UnsupportedEncodingException, XMLStreamException {
+ org.activiti.engine.repository.ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
+ .processDefinitionId(processDefinitionId).singleResult();
+
+ InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),
+ processDefinition.getResourceName());
+ XMLInputFactory xif = XMLInputFactory.newInstance();
+ InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
+ XMLStreamReader xtr = xif.createXMLStreamReader(in);
+ BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
+
+ BpmnJsonConverter converter = new BpmnJsonConverter();
+ ObjectNode modelNode = converter.convertToJson(bpmnModel);
+ Model modelData = repositoryService.newModel();
+ modelData.setKey(processDefinition.getKey());
+ modelData.setName(processDefinition.getResourceName());
+ modelData.setCategory(processDefinition.getDeploymentId());
+
+ ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
+ modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
+ modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
+ modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
+ modelData.setMetaInfo(modelObjectNode.toString());
+
+ repositoryService.saveModel(modelData);
+
+ repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
+
+ return AjaxResult.success();
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActIdGroup.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActIdGroup.java
new file mode 100644
index 00000000..58ed6fe8
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActIdGroup.java
@@ -0,0 +1,99 @@
+package com.ruoyi.activiti.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 流程用户组对象 act_id_group
+ *
+ * @author Xianlu Tech
+ * @date 2019-10-02
+ */
+public class ActIdGroup extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ @Excel(name = "组ID")
+ private String id;
+
+ /** 版本 */
+ private Long rev;
+
+ /** 名称 */
+ @Excel(name = "名称")
+ private String name;
+
+ /** 类型 */
+ private String type;
+
+ private String[] userIds;
+
+ /** 用户是否存在此用户组标识 默认不存在 */
+ private boolean flag = false;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setRev(Long rev)
+ {
+ this.rev = rev;
+ }
+
+ public Long getRev()
+ {
+ return rev;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public void setType(String type)
+ {
+ this.type = type;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public String[] getUserIds() {
+ return userIds;
+ }
+
+ public void setUserIds(String[] userIds) {
+ this.userIds = userIds;
+ }
+
+ public boolean isFlag() {
+ return flag;
+ }
+
+ public void setFlag(boolean flag) {
+ this.flag = flag;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("rev", getRev())
+ .append("name", getName())
+ .append("type", getType())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActIdUser.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActIdUser.java
new file mode 100644
index 00000000..5301039d
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActIdUser.java
@@ -0,0 +1,140 @@
+package com.ruoyi.activiti.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 流程用户对象 act_id_user
+ *
+ * @author Xianlu Tech
+ * @date 2019-10-02
+ */
+public class ActIdUser extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ @Excel(name = "用户ID")
+ private String id;
+
+ /** 版本 */
+ private Long rev;
+
+ /** 名字 */
+ @Excel(name = "名字")
+ private String first;
+
+ /** 姓氏 */
+ private String last;
+
+ /** 邮箱 */
+ @Excel(name = "邮箱")
+ private String email;
+
+ /** 密码 */
+ private String pwd;
+
+ /** 头像 */
+ private String pictureId;
+
+ /** 用户组 */
+ private String[] groupIds;
+
+ /** 用户组是否存在此用户标识 默认不存在 */
+ private boolean flag = false;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setRev(Long rev)
+ {
+ this.rev = rev;
+ }
+
+ public Long getRev()
+ {
+ return rev;
+ }
+ public void setFirst(String first)
+ {
+ this.first = first;
+ }
+
+ public String getFirst()
+ {
+ return first;
+ }
+ public void setLast(String last)
+ {
+ this.last = last;
+ }
+
+ public String getLast()
+ {
+ return last;
+ }
+ public void setEmail(String email)
+ {
+ this.email = email;
+ }
+
+ public String getEmail()
+ {
+ return email;
+ }
+ public void setPwd(String pwd)
+ {
+ this.pwd = pwd;
+ }
+
+ public String getPwd()
+ {
+ return pwd;
+ }
+ public void setPictureId(String pictureId)
+ {
+ this.pictureId = pictureId;
+ }
+
+ public String getPictureId()
+ {
+ return pictureId;
+ }
+
+ public String[] getGroupIds() {
+ return groupIds;
+ }
+
+ public void setGroupIds(String[] groupIds) {
+ this.groupIds = groupIds;
+ }
+
+ public boolean isFlag() {
+ return flag;
+ }
+
+ public void setFlag(boolean flag) {
+ this.flag = flag;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("rev", getRev())
+ .append("first", getFirst())
+ .append("last", getLast())
+ .append("email", getEmail())
+ .append("pwd", getPwd())
+ .append("pictureId", getPictureId())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActivitiBaseEntity.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActivitiBaseEntity.java
new file mode 100644
index 00000000..3b44af2a
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ActivitiBaseEntity.java
@@ -0,0 +1,131 @@
+package com.ruoyi.activiti.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ActivitiBaseEntity extends BaseEntity {
+
+ /** 流程实例ID */
+ @Excel(name = "流程实例ID")
+ private String instanceId;
+ /** 申请人姓名 */
+ private String applyUserName;
+ /** 标题 */
+ @Excel(name = "标题")
+ private String title;
+
+ /** 原因 */
+ @Excel(name = "原因")
+ private String reason;
+
+ /** 任务ID */
+ private String taskId;
+
+ /** 任务名称 */
+ private String taskName;
+
+ /** 办理时间 */
+ private Date doneTime;
+
+ /** 创建人 */
+ private String createUserName;
+
+
+ /** 流程实例状态 1 激活 2 挂起 */
+ private String suspendState;
+ private Map processParams;
+
+
+ public String getApplyUserName() {
+ return applyUserName;
+ }
+
+ public void setApplyUserName(String applyUserName) {
+ this.applyUserName = applyUserName;
+ }
+
+ public String getTaskId() {
+ return taskId;
+ }
+
+ public void setTaskId(String taskId) {
+ this.taskId = taskId;
+ }
+
+ public String getTaskName() {
+ return taskName;
+ }
+
+ public void setTaskName(String taskName) {
+ this.taskName = taskName;
+ }
+
+ public Date getDoneTime() {
+ return doneTime;
+ }
+
+ public void setDoneTime(Date doneTime) {
+ this.doneTime = doneTime;
+ }
+
+ public String getCreateUserName() {
+ return createUserName;
+ }
+
+ public void setCreateUserName(String createUserName) {
+ this.createUserName = createUserName;
+ }
+
+ public String getSuspendState() {
+ return suspendState;
+ }
+
+ public void setSuspendState(String suspendState) {
+ this.suspendState = suspendState;
+ }
+
+ public void setInstanceId(String instanceId)
+ {
+ this.instanceId = instanceId;
+ }
+
+ public String getInstanceId()
+ {
+ return instanceId;
+ }
+
+ public void setTitle(String title)
+ {
+ this.title = title;
+ }
+
+ public String getTitle()
+ {
+ return title;
+ }
+ public void setReason(String reason)
+ {
+ this.reason = reason;
+ }
+
+ public String getReason()
+ {
+ return reason;
+ }
+
+ public Map getProcessParams() {
+ if (processParams == null)
+ {
+ processParams = new HashMap<>();
+ }
+ return processParams;
+ }
+
+ public void setProcessParams(Map processParams) {
+ this.processParams = processParams;
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/BizTodoItem.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/BizTodoItem.java
new file mode 100644
index 00000000..0fccaa93
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/BizTodoItem.java
@@ -0,0 +1,217 @@
+package com.ruoyi.activiti.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 待办事项对象 biz_todo_item
+ *
+ * @author Xianlu Tech
+ * @date 2019-11-08
+ */
+public class BizTodoItem extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 ID */
+ private Long id;
+
+ /** 事项标题 */
+ @Excel(name = "事项标题")
+ private String itemName;
+
+ /** 事项内容 */
+ @Excel(name = "事项内容")
+ private String itemContent;
+
+ /** 模块名称 (必须以 uri 一致) */
+ @Excel(name = "模块名称")
+ private String module;
+
+ /** 任务 ID */
+ @Excel(name = "任务 ID")
+ private String taskId;
+
+ /** 流程实例 ID */
+ @Excel(name = "流程实例 ID")
+ private String instanceId;
+
+ /** 任务名称 (必须以表单页面名称一致) */
+ @Excel(name = "任务名称")
+ private String taskName;
+
+ /** 节点名称 */
+ @Excel(name = "节点名称")
+ private String nodeName;
+
+ /** 是否查看 default 0 (0 否 1 是) */
+ @Excel(name = "是否查看")
+ private String isView;
+
+ /** 是否处理 default 0 (0 否 1 是) */
+ @Excel(name = "是否处理")
+ private String isHandle;
+
+ /** 待办人 ID */
+ @Excel(name = "待办人 ID")
+ private String todoUserId;
+
+ /** 待办人名称 */
+ @Excel(name = "待办人名称")
+ private String todoUserName;
+
+ /** 处理人 ID */
+ @Excel(name = "处理人 ID")
+ private String handleUserId;
+
+ /** 处理人名称 */
+ @Excel(name = "处理人名称")
+ private String handleUserName;
+
+ /** 通知时间 */
+ @Excel(name = "通知时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date todoTime;
+
+ /** 处理时间 */
+ @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date handleTime;
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getId() {
+ return id;
+ }
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+ public void setItemContent(String itemContent) {
+ this.itemContent = itemContent;
+ }
+
+ public String getItemContent() {
+ return itemContent;
+ }
+ public void setModule(String module) {
+ this.module = module;
+ }
+
+ public String getModule() {
+ return module;
+ }
+ public void setTaskId(String taskId) {
+ this.taskId = taskId;
+ }
+
+ public String getTaskId() {
+ return taskId;
+ }
+ public void setTaskName(String taskName) {
+ this.taskName = taskName;
+ }
+
+ public String getNodeName() {
+ return nodeName;
+ }
+
+ public void setNodeName(String nodeName) {
+ this.nodeName = nodeName;
+ }
+
+ public String getTaskName() {
+ return taskName;
+ }
+ public void setIsView(String isView) {
+ this.isView = isView;
+ }
+
+ public String getIsView() {
+ return isView;
+ }
+ public void setIsHandle(String isHandle) {
+ this.isHandle = isHandle;
+ }
+
+ public String getIsHandle() {
+ return isHandle;
+ }
+ public void setTodoUserId(String todoUserId) {
+ this.todoUserId = todoUserId;
+ }
+
+ public String getTodoUserId() {
+ return todoUserId;
+ }
+ public void setTodoUserName(String todoUserName) {
+ this.todoUserName = todoUserName;
+ }
+
+ public String getTodoUserName() {
+ return todoUserName;
+ }
+ public void setHandleUserId(String handleUserId) {
+ this.handleUserId = handleUserId;
+ }
+
+ public String getHandleUserId() {
+ return handleUserId;
+ }
+ public void setHandleUserName(String handleUserName) {
+ this.handleUserName = handleUserName;
+ }
+
+ public String getHandleUserName() {
+ return handleUserName;
+ }
+ public void setTodoTime(Date todoTime) {
+ this.todoTime = todoTime;
+ }
+
+ public Date getTodoTime() {
+ return todoTime;
+ }
+ public void setHandleTime(Date handleTime) {
+ this.handleTime = handleTime;
+ }
+
+ public Date getHandleTime() {
+ return handleTime;
+ }
+
+ public String getInstanceId() {
+ return instanceId;
+ }
+
+ public void setInstanceId(String instanceId) {
+ this.instanceId = instanceId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("itemName", getItemName())
+ .append("itemContent", getItemContent())
+ .append("module", getModule())
+ .append("instanceId", getInstanceId())
+ .append("taskId", getTaskId())
+ .append("taskName", getTaskName())
+ .append("isView", getIsView())
+ .append("isHandle", getIsHandle())
+ .append("todoUserId", getTodoUserId())
+ .append("todoUserName", getTodoUserName())
+ .append("handleUserId", getHandleUserId())
+ .append("handleUserName", getHandleUserName())
+ .append("todoTime", getTodoTime())
+ .append("handleTime", getHandleTime())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/HistoricActivity.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/HistoricActivity.java
new file mode 100644
index 00000000..7af3a329
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/HistoricActivity.java
@@ -0,0 +1,29 @@
+package com.ruoyi.activiti.domain;
+
+import org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntityImpl;
+
+public class HistoricActivity extends HistoricActivityInstanceEntityImpl {
+
+ /** 审批批注 */
+ private String comment;
+
+ /** 办理人姓名 */
+ private String assigneeName;
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+
+ public String getAssigneeName() {
+ return assigneeName;
+ }
+
+ public void setAssigneeName(String assigneeName) {
+ this.assigneeName = assigneeName;
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ModelerVo.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ModelerVo.java
new file mode 100644
index 00000000..8b18386f
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ModelerVo.java
@@ -0,0 +1,39 @@
+package com.ruoyi.activiti.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 汇讯数码科技(深圳)有限公司
+ * 创建日期:2020/9/14-13:57
+ * 版本 开发者 日期
+ * 1.0 Danny 2020/9/14
+ */
+public class ModelerVo {
+ private String name;
+ private String key;
+ private String description;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ProcessDefinition.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ProcessDefinition.java
new file mode 100644
index 00000000..1dc12274
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/domain/ProcessDefinition.java
@@ -0,0 +1,140 @@
+package com.ruoyi.activiti.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+public class ProcessDefinition extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ private String id;
+
+ @Excel(name = "流程名称")
+ private String name;
+
+ @Excel(name = "流程KEY")
+ private String key;
+
+ @Excel(name = "流程版本")
+ private int version;
+
+ @Excel(name = "所属分类")
+ private String category;
+
+ @Excel(name = "流程描述")
+ private String description;
+
+ private String deploymentId;
+
+ @Excel(name = "部署时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date deploymentTime;
+
+ @Excel(name = "流程图")
+ private String diagramResourceName;
+
+ @Excel(name = "流程定义")
+ private String resourceName;
+
+ /** 流程实例状态 1 激活 2 挂起 */
+ private String suspendState;
+
+ private String suspendStateName;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public int getVersion() {
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getDeploymentId() {
+ return deploymentId;
+ }
+
+ public void setDeploymentId(String deploymentId) {
+ this.deploymentId = deploymentId;
+ }
+
+ public Date getDeploymentTime() {
+ return deploymentTime;
+ }
+
+ public void setDeploymentTime(Date deploymentTime) {
+ this.deploymentTime = deploymentTime;
+ }
+
+ public String getDiagramResourceName() {
+ return diagramResourceName;
+ }
+
+ public void setDiagramResourceName(String diagramResourceName) {
+ this.diagramResourceName = diagramResourceName;
+ }
+
+ public String getResourceName() {
+ return resourceName;
+ }
+
+ public void setResourceName(String resourceName) {
+ this.resourceName = resourceName;
+ }
+
+ public String getSuspendState() {
+ return suspendState;
+ }
+
+ public void setSuspendState(String suspendState) {
+ this.suspendState = suspendState;
+ }
+
+ public String getSuspendStateName() {
+ return suspendStateName;
+ }
+
+ public void setSuspendStateName(String suspendStateName) {
+ this.suspendStateName = suspendStateName;
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/form/UsersFormType.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/form/UsersFormType.java
new file mode 100644
index 00000000..9d9a74e2
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/form/UsersFormType.java
@@ -0,0 +1,34 @@
+package com.ruoyi.activiti.form;
+
+import org.activiti.engine.form.AbstractFormType;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+
+/**
+ * 用户表单字段类型
+ *
+ * @author henryyan
+ */
+@Component
+public class UsersFormType extends AbstractFormType {
+
+ @Override
+ public String getName() {
+ return "users";
+ }
+
+ @Override
+ public Object convertFormValueToModelValue(String propertyValue) {
+ String[] split = StringUtils.split(propertyValue, ",");
+ return Arrays.asList(split);
+ }
+
+ @Override
+ public String convertModelValueToFormValue(Object modelValue) {
+ return ObjectUtils.toString(modelValue);
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/mapper/BizTodoItemMapper.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/mapper/BizTodoItemMapper.java
new file mode 100644
index 00000000..ebc800e4
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/mapper/BizTodoItemMapper.java
@@ -0,0 +1,75 @@
+package com.ruoyi.activiti.mapper;
+
+import com.ruoyi.activiti.domain.BizTodoItem;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * 待办事项Mapper接口
+ *
+ * @author Xianlu Tech
+ * @date 2019-11-08
+ */
+public interface BizTodoItemMapper {
+ /**
+ * 查询待办事项
+ *
+ * @param id 待办事项ID
+ * @return 待办事项
+ */
+ public BizTodoItem selectBizTodoItemById(Long id);
+
+ /**
+ * 查询待办事项列表
+ *
+ * @param bizTodoItem 待办事项
+ * @return 待办事项集合
+ */
+ public List selectBizTodoItemList(BizTodoItem bizTodoItem);
+
+ /**
+ * 新增待办事项
+ *
+ * @param bizTodoItem 待办事项
+ * @return 结果
+ */
+ public int insertBizTodoItem(BizTodoItem bizTodoItem);
+
+ /**
+ * 修改待办事项
+ *
+ * @param bizTodoItem 待办事项
+ * @return 结果
+ */
+ public int updateBizTodoItem(BizTodoItem bizTodoItem);
+
+ /**
+ * 删除待办事项
+ *
+ * @param id 待办事项ID
+ * @return 结果
+ */
+ public int deleteBizTodoItemById(Long id);
+
+ /**
+ * 批量删除待办事项
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBizTodoItemByIds(String[] ids);
+
+ @Select("SELECT * FROM BIZ_TODO_ITEM WHERE TASK_ID = #{taskId}")
+ BizTodoItem selectTodoItemByTaskId(@Param(value = "taskId") String taskId);
+
+ @Select("SELECT USER_ID_ FROM ACT_ID_MEMBERSHIP WHERE GROUP_ID_ = (SELECT GROUP_ID_ FROM ACT_RU_IDENTITYLINK WHERE TASK_ID_ = #{taskId})")
+ List selectTodoUserListByTaskId(@Param(value = "taskId") String taskId);
+
+ @Select("SELECT * FROM BIZ_TODO_ITEM WHERE TASK_ID = #{taskId} AND TODO_USER_ID = #{todoUserId}")
+ BizTodoItem selectTodoItemByCondition(@Param(value = "taskId") String taskId, @Param(value = "todoUserId") String todoUserId);
+
+ @Select("SELECT USER_ID_ FROM ACT_ID_MEMBERSHIP WHERE USER_ID_ = (SELECT USER_ID_ FROM ACT_RU_IDENTITYLINK WHERE TASK_ID_ = #{taskId})")
+ String selectTodoUserByTaskId(String id);
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelEditorJsonRestResource.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelEditorJsonRestResource.java
new file mode 100644
index 00000000..24d29440
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelEditorJsonRestResource.java
@@ -0,0 +1,70 @@
+/* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.ruoyi.activiti.modeler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.activiti.editor.constants.ModelDataJsonConstants;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.repository.Model;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Tijs Rademakers
+ */
+@RestController
+public class ModelEditorJsonRestResource implements ModelDataJsonConstants {
+
+ protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorJsonRestResource.class);
+
+ @Autowired
+ private RepositoryService repositoryService;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @RequestMapping(value="/modeler/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json")
+ public ObjectNode getEditorJson(@PathVariable String modelId) {
+ ObjectNode modelNode = null;
+
+ Model model = repositoryService.getModel(modelId);
+
+ if (model != null) {
+ try {
+ if (StringUtils.isNotEmpty(model.getMetaInfo())) {
+ modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
+ } else {
+ modelNode = objectMapper.createObjectNode();
+ modelNode.put(MODEL_NAME, model.getName());
+ }
+ modelNode.put(MODEL_ID, model.getId());
+ ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
+ new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
+ modelNode.put("model", editorJsonNode);
+
+ } catch (Exception e) {
+ LOGGER.error("Error creating model JSON", e);
+ throw new ActivitiException("Error creating model JSON", e);
+ }
+ }
+ return modelNode;
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelSaveRestResource.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelSaveRestResource.java
new file mode 100644
index 00000000..f43920df
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelSaveRestResource.java
@@ -0,0 +1,86 @@
+/* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.ruoyi.activiti.modeler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.activiti.editor.constants.ModelDataJsonConstants;
+import org.activiti.engine.ActivitiException;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.repository.Model;
+import org.apache.batik.transcoder.TranscoderInput;
+import org.apache.batik.transcoder.TranscoderOutput;
+import org.apache.batik.transcoder.image.PNGTranscoder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+/**
+ * @author Tijs Rademakers
+ */
+@RestController
+public class ModelSaveRestResource implements ModelDataJsonConstants {
+
+ protected static final Logger LOGGER = LoggerFactory.getLogger(ModelSaveRestResource.class);
+
+ @Autowired
+ private RepositoryService repositoryService;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @RequestMapping(value="/modeler/model/{modelId}/save", method = RequestMethod.POST)
+ @ResponseStatus(value = HttpStatus.OK)
+ public void saveModel(@PathVariable String modelId, @RequestBody MultiValueMap values) {
+ try {
+
+ Model model = repositoryService.getModel(modelId);
+
+ ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
+
+ modelJson.put(MODEL_NAME, values.getFirst("name"));
+ modelJson.put(MODEL_DESCRIPTION, values.getFirst("description"));
+ model.setMetaInfo(modelJson.toString());
+ model.setName(values.getFirst("name"));
+
+ repositoryService.saveModel(model);
+
+ repositoryService.addModelEditorSource(model.getId(), values.getFirst("json_xml").getBytes("utf-8"));
+
+ InputStream svgStream = new ByteArrayInputStream(values.getFirst("svg_xml").getBytes("utf-8"));
+ TranscoderInput input = new TranscoderInput(svgStream);
+
+ PNGTranscoder transcoder = new PNGTranscoder();
+ // Setup output
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ TranscoderOutput output = new TranscoderOutput(outStream);
+
+ // Do the transformation
+ transcoder.transcode(input, output);
+ final byte[] result = outStream.toByteArray();
+ repositoryService.addModelEditorSourceExtra(model.getId(), result);
+ outStream.close();
+
+ } catch (Exception e) {
+ LOGGER.error("Error saving model", e);
+ throw new ActivitiException("Error saving model", e);
+ }
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelerController.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelerController.java
new file mode 100644
index 00000000..f94f64e2
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/ModelerController.java
@@ -0,0 +1,216 @@
+package com.ruoyi.activiti.modeler;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.github.pagehelper.Page;
+import com.ruoyi.activiti.domain.ModelerVo;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.enums.BusinessType;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.editor.constants.ModelDataJsonConstants;
+import org.activiti.editor.language.json.converter.BpmnJsonConverter;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.impl.persistence.entity.ModelEntityImpl;
+import org.activiti.engine.repository.Deployment;
+import org.activiti.engine.repository.Model;
+import org.activiti.engine.repository.ModelQuery;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.List;
+
+import static org.activiti.editor.constants.ModelDataJsonConstants.MODEL_DESCRIPTION;
+import static org.activiti.editor.constants.ModelDataJsonConstants.MODEL_NAME;
+
+@Controller
+public class ModelerController extends BaseController {
+ protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorJsonRestResource.class);
+
+ @Autowired
+ private RepositoryService repositoryService;
+ @Autowired
+ private ObjectMapper objectMapper;
+
+
+ @GetMapping("/modeler/list")
+ @ResponseBody
+ public TableDataInfo list(ModelEntityImpl modelEntity) {
+ ModelQuery modelQuery = repositoryService.createModelQuery();
+ modelQuery.orderByLastUpdateTime().desc();
+
+ // 条件过滤
+ if (com.ruoyi.common.utils.StringUtils.isNotBlank(modelEntity.getKey())) {
+ modelQuery.modelKey(modelEntity.getKey());
+ }
+ if (com.ruoyi.common.utils.StringUtils.isNotBlank(modelEntity.getName())) {
+ modelQuery.modelNameLike("%" + modelEntity.getName() + "%");
+ }
+
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+
+ List resultList = modelQuery.listPage((pageNum - 1) * pageSize, pageSize);
+
+ Page list = new Page<>();
+ list.addAll(resultList);
+
+ list.setTotal(modelQuery.count());
+ list.setPageNum(pageNum);
+ list.setPageSize(pageSize);
+
+ return getDataTable(list);
+ }
+
+
+ /**
+ * 创建模型
+ */
+ @RequestMapping(value = "/modeler/create")
+ @ResponseBody
+ public AjaxResult create( @RequestBody ModelerVo modelerVo) {
+ try {
+ ObjectMapper objectMapper = new ObjectMapper();
+ ObjectNode editorNode = objectMapper.createObjectNode();
+ editorNode.put("id", "canvas");
+ editorNode.put("resourceId", "canvas");
+ ObjectNode stencilSetNode = objectMapper.createObjectNode();
+ stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
+ editorNode.put("stencilset", stencilSetNode);
+
+ ObjectNode modelObjectNode = objectMapper.createObjectNode();
+ modelObjectNode.put(MODEL_NAME, modelerVo.getName());
+ modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
+ String description = StringUtils.defaultString(modelerVo.getDescription());
+ modelObjectNode.put(MODEL_DESCRIPTION, description);
+
+ Model newModel = repositoryService.newModel();
+ newModel.setMetaInfo(modelObjectNode.toString());
+ newModel.setName(modelerVo.getName());
+ newModel.setKey(StringUtils.defaultString(modelerVo.getKey()));
+
+ repositoryService.saveModel(newModel);
+ repositoryService.addModelEditorSource(newModel.getId(), editorNode.toString().getBytes("utf-8"));
+
+ return new AjaxResult(HttpStatus.SUCCESS, "创建模型成功", newModel.getId());
+ } catch (Exception e) {
+ logger.error("创建模型失败:", e);
+ }
+ return AjaxResult.error();
+ }
+
+ /**
+ * 根据Model部署流程
+ */
+ @RequestMapping(value = "/modeler/deploy/{modelId}")
+ @ResponseBody
+ public AjaxResult deploy(@PathVariable("modelId") String modelId, RedirectAttributes redirectAttributes) {
+ try {
+ Model modelData = repositoryService.getModel(modelId);
+ ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
+ byte[] bpmnBytes = null;
+
+ BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
+ bpmnBytes = new BpmnXMLConverter().convertToXML(model);
+
+ String processName = modelData.getName() + ".bpmn20.xml";
+ Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes, "UTF-8")).deploy();
+ LOGGER.info("部署成功,部署ID=" + deployment.getId());
+ return AjaxResult.success("部署成功");
+ } catch (Exception e) {
+ LOGGER.error("根据模型部署流程失败:modelId={}", modelId, e);
+
+ }
+ return AjaxResult.error("部署失败");
+ }
+
+ /**
+ * 导出model的xml文件
+ */
+ @RequestMapping(value = "/modeler/export/{modelId}")
+ @ResponseBody
+ public AjaxResult export(@PathVariable("modelId") String modelId) {
+ OutputStream out = null;
+ try {
+ Model modelData = repositoryService.getModel(modelId);
+ BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
+ JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
+ BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
+
+ // 流程非空判断
+ if (!CollectionUtils.isEmpty(bpmnModel.getProcesses())) {
+ BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
+ byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);
+
+ ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
+ String filename = bpmnModel.getMainProcess().getId() + ".bpmn";
+
+ File file = new File(getAbsoluteFile(filename));
+ if(file.exists()){
+ file.delete();
+ }
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(bpmnBytes,0,bpmnBytes.length);
+ fos.flush();
+ fos.close();
+ return AjaxResult.success(filename);
+ } else {
+ return AjaxResult.error();
+ }
+
+ } catch (Exception e) {
+ LOGGER.error("导出model的xml文件失败:modelId={}", modelId, e);
+ return AjaxResult.error("导出model的xml文件失败:modelId={}", modelId);
+
+ }
+ }
+
+ /**
+ * 获取下载路径
+ *
+ * @param filename 文件名称
+ */
+ public String getAbsoluteFile(String filename)
+ {
+ String downloadPath = RuoYiConfig.getDownloadPath() + filename;
+ File desc = new File(downloadPath);
+ if (!desc.getParentFile().exists())
+ {
+ desc.getParentFile().mkdirs();
+ }
+ return downloadPath;
+ }
+
+
+ @Log(title = "流程模型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/modeler/remove/{ids}")
+ @ResponseBody
+ public AjaxResult remove(@PathVariable String ids) {
+ try {
+ repositoryService.deleteModel(ids);
+ return AjaxResult.success();
+ }
+ catch (Exception e) {
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/StencilsetRestResource.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/StencilsetRestResource.java
new file mode 100644
index 00000000..354cf296
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/modeler/StencilsetRestResource.java
@@ -0,0 +1,40 @@
+/* Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.ruoyi.activiti.modeler;
+
+import java.io.InputStream;
+
+import org.activiti.engine.ActivitiException;
+import org.apache.commons.io.IOUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @author Tijs Rademakers
+ */
+@RestController
+public class StencilsetRestResource {
+
+ @RequestMapping(value="/modeler/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
+ public @ResponseBody String getStencilset() {
+ InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json");
+ try {
+ return IOUtils.toString(stencilsetStream, "utf-8");
+ } catch (Exception e) {
+ throw new ActivitiException("Error while loading stencil set", e);
+ }
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/IBizTodoItemService.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/IBizTodoItemService.java
new file mode 100644
index 00000000..44b1d532
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/IBizTodoItemService.java
@@ -0,0 +1,65 @@
+package com.ruoyi.activiti.service;
+
+import com.ruoyi.activiti.domain.BizTodoItem;
+
+import java.util.List;
+
+/**
+ * 待办事项Service接口
+ *
+ * @author Xianlu Tech
+ * @date 2019-11-08
+ */
+public interface IBizTodoItemService {
+ /**
+ * 查询待办事项
+ *
+ * @param id 待办事项ID
+ * @return 待办事项
+ */
+ public BizTodoItem selectBizTodoItemById(Long id);
+
+ /**
+ * 查询待办事项列表
+ *
+ * @param bizTodoItem 待办事项
+ * @return 待办事项集合
+ */
+ public List selectBizTodoItemList(BizTodoItem bizTodoItem);
+
+ /**
+ * 新增待办事项
+ *
+ * @param bizTodoItem 待办事项
+ * @return 结果
+ */
+ public int insertBizTodoItem(BizTodoItem bizTodoItem);
+
+ /**
+ * 修改待办事项
+ *
+ * @param bizTodoItem 待办事项
+ * @return 结果
+ */
+ public int updateBizTodoItem(BizTodoItem bizTodoItem);
+
+ /**
+ * 批量删除待办事项
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteBizTodoItemByIds(String ids);
+
+ /**
+ * 删除待办事项信息
+ *
+ * @param id 待办事项ID
+ * @return 结果
+ */
+ public int deleteBizTodoItemById(Long id);
+
+ int insertTodoItem(String instanceId, String itemName, String itemContent, String module);
+
+ BizTodoItem selectBizTodoItemByCondition(String taskId, String todoUserId);
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/IProcessService.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/IProcessService.java
new file mode 100644
index 00000000..9fdf0987
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/IProcessService.java
@@ -0,0 +1,51 @@
+package com.ruoyi.activiti.service;
+
+import com.ruoyi.activiti.domain.ActivitiBaseEntity;
+import com.ruoyi.activiti.domain.HistoricActivity;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+public interface IProcessService {
+
+ /**
+ * 查询审批历史列表
+ * @param processInstanceId
+ * @param historicActivity
+ * @return
+ */
+ List selectHistoryList(String processInstanceId, HistoricActivity historicActivity);
+
+ /**
+ * 提交申请
+ * @param applyUserId 申请人
+ * @param businessKey 业务表 id
+ * @param key 流程定义 key
+ * @param variables 流程变量
+ * @return
+ */
+ ProcessInstance submitApply(String applyUserId, String businessKey, String itemName, String itemConent, String key, Map variables);
+
+ List findTodoTasks(String userId, String key);
+
+ List findDoneTasks(String userId, String key);
+
+ void complete(ActivitiBaseEntity activitiBaseEntity, String module);
+
+ /**
+ * 委托任务
+ * @param taskId
+ * @param delegateToUser
+ */
+ void delegate(String taskId, String fromUser, String delegateToUser);
+
+ void cancelApply(String instanceId, String deleteReason);
+
+ void suspendOrActiveApply(String instanceId, String suspendState);
+
+ String findBusinessKeyByInstanceId(String instanceId);
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/ProcessDefinitionService.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/ProcessDefinitionService.java
new file mode 100644
index 00000000..e846a0fd
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/ProcessDefinitionService.java
@@ -0,0 +1,136 @@
+package com.ruoyi.activiti.service;
+
+import com.github.pagehelper.Page;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.StringUtils;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
+import org.activiti.engine.repository.Deployment;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.repository.ProcessDefinitionQuery;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.List;
+import java.util.zip.ZipInputStream;
+
+@Transactional
+@Service
+public class ProcessDefinitionService {
+
+ @Autowired
+ private RuntimeService runtimeService;
+
+ @Autowired
+ private RepositoryService repositoryService;
+
+ /**
+ * 分页查询流程定义文件
+ * @return
+ */
+ public Page listProcessDefinition(com.ruoyi.activiti.domain.ProcessDefinition processDefinition) {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+
+ Page list = new Page<>();
+ ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
+ processDefinitionQuery.orderByProcessDefinitionId().orderByProcessDefinitionVersion().desc();
+ if (StringUtils.isNotBlank(processDefinition.getName())) {
+ processDefinitionQuery.processDefinitionNameLike("%" + processDefinition.getName() + "%");
+ }
+ if (StringUtils.isNotBlank(processDefinition.getKey())) {
+ processDefinitionQuery.processDefinitionKeyLike("%" + processDefinition.getKey() + "%");
+ }
+ if (StringUtils.isNotBlank(processDefinition.getCategory())) {
+ processDefinitionQuery.processDefinitionCategoryLike("%" + processDefinition.getCategory() + "%");
+ }
+
+ List processDefinitionList;
+ if (pageNum != null && pageSize != null) {
+ processDefinitionList = processDefinitionQuery.listPage((pageNum - 1) * pageSize, pageSize);
+ list.setTotal(processDefinitionQuery.count());
+ list.setPageNum(pageNum);
+ list.setPageSize(pageSize);
+ } else {
+ processDefinitionList = processDefinitionQuery.list();
+ }
+ for (ProcessDefinition definition: processDefinitionList) {
+ ProcessDefinitionEntityImpl entityImpl = (ProcessDefinitionEntityImpl) definition;
+ com.ruoyi.activiti.domain.ProcessDefinition entity = new com.ruoyi.activiti.domain.ProcessDefinition();
+ entity.setId(definition.getId());
+ entity.setKey(definition.getKey());
+ entity.setName(definition.getName());
+ entity.setCategory(definition.getCategory());
+ entity.setVersion(definition.getVersion());
+ entity.setDescription(definition.getDescription());
+ entity.setDeploymentId(definition.getDeploymentId());
+ Deployment deployment = repositoryService.createDeploymentQuery()
+ .deploymentId(definition.getDeploymentId())
+ .singleResult();
+ entity.setDeploymentTime(deployment.getDeploymentTime());
+ entity.setDiagramResourceName(definition.getDiagramResourceName());
+ entity.setResourceName(definition.getResourceName());
+ entity.setSuspendState(entityImpl.getSuspensionState() + "");
+ if (entityImpl.getSuspensionState() == 1) {
+ entity.setSuspendStateName("已激活");
+ } else {
+ entity.setSuspendStateName("已挂起");
+ }
+ list.add(entity);
+ }
+ return list;
+ }
+
+ public void deployProcessDefinition(String filePath) throws FileNotFoundException {
+ if (StringUtils.isNotBlank(filePath)) {
+ if (filePath.endsWith(".zip")) {
+ ZipInputStream inputStream = new ZipInputStream(new FileInputStream(filePath));
+ repositoryService.createDeployment()
+ .addZipInputStream(inputStream)
+ .deploy();
+ } else if (filePath.endsWith(".bpmn")) {
+ repositoryService.createDeployment()
+ .addInputStream(filePath, new FileInputStream(filePath))
+ .deploy();
+ }
+ }
+ }
+
+ public int deleteProcessDeploymentByIds(String deploymentIds) throws Exception {
+ String[] deploymentIdsArr = Convert.toStrArray(deploymentIds);
+ int counter = 0;
+ for (String deploymentId: deploymentIdsArr) {
+ List instanceList = runtimeService.createProcessInstanceQuery()
+ .deploymentId(deploymentId)
+ .list();
+ if (!CollectionUtils.isEmpty(instanceList)) {
+ // 存在流程实例的流程定义
+ throw new Exception("删除失败,存在运行中的流程实例");
+ }
+ repositoryService.deleteDeployment(deploymentId, true); // true 表示级联删除引用,比如 act_ru_execution 数据
+ counter++;
+ }
+ return counter;
+ }
+
+ public void suspendOrActiveApply(String id, String suspendState) {
+ if ("1".equals(suspendState)) {
+ // 当流程定义被挂起时,已经发起的该流程定义的流程实例不受影响(如果选择级联挂起则流程实例也会被挂起)。
+ // 当流程定义被挂起时,无法发起新的该流程定义的流程实例。
+ // 直观变化:act_re_procdef 的 SUSPENSION_STATE_ 为 2
+ repositoryService.suspendProcessDefinitionById(id);
+ } else if ("2".equals(suspendState)) {
+ repositoryService.activateProcessDefinitionById(id);
+ }
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/impl/BizTodoItemServiceImpl.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/impl/BizTodoItemServiceImpl.java
new file mode 100644
index 00000000..5586b699
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/impl/BizTodoItemServiceImpl.java
@@ -0,0 +1,162 @@
+package com.ruoyi.activiti.service.impl;
+
+import com.ruoyi.activiti.domain.BizTodoItem;
+import com.ruoyi.activiti.mapper.BizTodoItemMapper;
+import com.ruoyi.activiti.service.IBizTodoItemService;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.mapper.SysUserMapper;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 待办事项Service业务层处理
+ *
+ * @author Xianlu Tech
+ * @date 2019-11-08
+ */
+@Service
+@Transactional
+public class BizTodoItemServiceImpl implements IBizTodoItemService {
+ @Autowired
+ private BizTodoItemMapper bizTodoItemMapper;
+ @Autowired
+ private SysUserMapper userMapper;
+ @Autowired
+ private TaskService taskService;
+
+ /**
+ * 查询待办事项
+ *
+ * @param id 待办事项ID
+ * @return 待办事项
+ */
+ @Override
+ public BizTodoItem selectBizTodoItemById(Long id) {
+ return bizTodoItemMapper.selectBizTodoItemById(id);
+ }
+
+ /**
+ * 查询待办事项列表
+ *
+ * @param bizTodoItem 待办事项
+ * @return 待办事项
+ */
+ @Override
+ public List selectBizTodoItemList(BizTodoItem bizTodoItem) {
+ return bizTodoItemMapper.selectBizTodoItemList(bizTodoItem);
+ }
+
+ /**
+ * 新增待办事项
+ *
+ * @param bizTodoItem 待办事项
+ * @return 结果
+ */
+ @Override
+ public int insertBizTodoItem(BizTodoItem bizTodoItem) {
+ return bizTodoItemMapper.insertBizTodoItem(bizTodoItem);
+ }
+
+ /**
+ * 修改待办事项
+ *
+ * @param bizTodoItem 待办事项
+ * @return 结果
+ */
+ @Override
+ public int updateBizTodoItem(BizTodoItem bizTodoItem) {
+ return bizTodoItemMapper.updateBizTodoItem(bizTodoItem);
+ }
+
+ /**
+ * 删除待办事项对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBizTodoItemByIds(String ids) {
+ return bizTodoItemMapper.deleteBizTodoItemByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除待办事项信息
+ *
+ * @param id 待办事项ID
+ * @return 结果
+ */
+ @Override
+ public int deleteBizTodoItemById(Long id) {
+ return bizTodoItemMapper.deleteBizTodoItemById(id);
+ }
+
+ @Override
+ public int insertTodoItem(String instanceId, String itemName, String itemContent, String module) {
+ BizTodoItem todoItem = new BizTodoItem();
+ todoItem.setItemName(itemName);
+ todoItem.setItemContent(itemContent);
+ todoItem.setIsView("0");
+ todoItem.setIsHandle("0");
+ todoItem.setModule(module);
+ todoItem.setTodoTime(DateUtils.getNowDate());
+ List taskList = taskService.createTaskQuery().processInstanceId(instanceId).active().list();
+ int counter = 0;
+ for (Task task: taskList) {
+
+ // todoitem 去重
+ BizTodoItem bizTodoItem = bizTodoItemMapper.selectTodoItemByTaskId(task.getId());
+ if (bizTodoItem != null) continue;
+
+ BizTodoItem newItem = new BizTodoItem();
+ BeanUtils.copyProperties(todoItem, newItem);
+ newItem.setInstanceId(instanceId);
+ newItem.setTaskId(task.getId());
+ newItem.setTaskName("task" + task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1));
+ newItem.setNodeName(task.getName());
+ String assignee = task.getAssignee();
+ if (StringUtils.isNotBlank(assignee)) {
+ newItem.setTodoUserId(assignee);
+ SysUser user = userMapper.selectUserByUserName(assignee);
+ newItem.setTodoUserName(user.getNickName());
+ bizTodoItemMapper.insertBizTodoItem(newItem);
+ counter++;
+ } else {
+ // 查询候选用户组
+ List todoUserIdList = bizTodoItemMapper.selectTodoUserListByTaskId(task.getId());
+ if (!CollectionUtils.isEmpty(todoUserIdList)) {
+ for (String todoUserId: todoUserIdList) {
+ SysUser todoUser = userMapper.selectUserByUserName(todoUserId);
+ newItem.setTodoUserId(todoUser.getUserName());
+ newItem.setTodoUserName(todoUser.getNickName());
+ bizTodoItemMapper.insertBizTodoItem(newItem);
+ counter++;
+ }
+ } else {
+ // 查询候选用户
+ String todoUserId = bizTodoItemMapper.selectTodoUserByTaskId(task.getId());
+ SysUser todoUser = userMapper.selectUserByUserName(todoUserId);
+ newItem.setTodoUserId(todoUser.getUserName());
+ newItem.setTodoUserName(todoUser.getNickName());
+ bizTodoItemMapper.insertBizTodoItem(newItem);
+ counter++;
+ }
+ }
+ }
+ return counter;
+ }
+
+ @Override
+ public BizTodoItem selectBizTodoItemByCondition(String taskId, String todoUserId) {
+ return bizTodoItemMapper.selectTodoItemByCondition(taskId, todoUserId);
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/impl/ProcessServiceImpl.java b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/impl/ProcessServiceImpl.java
new file mode 100644
index 00000000..a8e4af43
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/java/com/ruoyi/activiti/service/impl/ProcessServiceImpl.java
@@ -0,0 +1,254 @@
+package com.ruoyi.activiti.service.impl;
+
+import com.ruoyi.activiti.domain.ActivitiBaseEntity;
+import com.ruoyi.activiti.domain.BizTodoItem;
+import com.ruoyi.activiti.domain.HistoricActivity;
+
+import com.ruoyi.activiti.service.IBizTodoItemService;
+import com.ruoyi.activiti.service.IProcessService;
+import com.ruoyi.common.core.domain.entity.SysUser;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+
+import com.ruoyi.system.mapper.SysUserMapper;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.history.HistoricActivityInstance;
+import org.activiti.engine.history.HistoricActivityInstanceQuery;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Comment;
+import org.activiti.engine.task.Task;
+import org.apache.commons.lang3.BooleanUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+@Transactional
+public class ProcessServiceImpl implements IProcessService {
+ protected final Logger logger = LoggerFactory.getLogger(ProcessServiceImpl.class);
+
+ @Autowired
+ private RuntimeService runtimeService;
+ @Autowired
+ private IdentityService identityService;
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private HistoryService historyService;
+ @Autowired
+ private SysUserMapper userMapper;
+ @Autowired
+ private IBizTodoItemService bizTodoItemService;
+
+ @Override
+ public ProcessInstance submitApply(String applyUserId, String businessKey, String itemName, String itemConent, String module, Map variables) {
+ // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+ identityService.setAuthenticatedUserId(applyUserId);
+ // 启动流程时设置业务 key
+ ProcessInstance instance = runtimeService.startProcessInstanceByKey(module, businessKey, variables);
+ // 下一节点处理人待办事项
+ bizTodoItemService.insertTodoItem(instance.getProcessInstanceId(), itemName, itemConent, module);
+ return instance;
+ }
+
+ @Override
+ public List findTodoTasks(String userId, String key) {
+ List tasks = new ArrayList();
+ // 根据当前人的ID查询
+ List todoList = taskService
+ .createTaskQuery()
+ .processDefinitionKey(key)
+ .taskAssignee(userId)
+ .list();
+ // 根据当前人未签收的任务
+ List unsignedTasks = taskService
+ .createTaskQuery()
+ .processDefinitionKey(key)
+ .taskCandidateUser(userId)
+ .list();
+ // 合并
+ tasks.addAll(todoList);
+ tasks.addAll(unsignedTasks);
+ return tasks;
+ }
+
+ @Override
+ public List findDoneTasks(String userId, String key) {
+ List list = historyService
+ .createHistoricTaskInstanceQuery()
+ .processDefinitionKey(key)
+ .taskAssignee(userId)
+ .finished()
+ .orderByHistoricTaskInstanceEndTime()
+ .desc()
+ .list();
+ return list;
+ }
+
+ @Override
+ public void complete(ActivitiBaseEntity activitiBaseEntity,String module) {
+ Map variables =new HashMap();
+ String comment = null; // 批注
+ boolean agree = true;
+ try {
+ for(Map.Entry entry : activitiBaseEntity.getProcessParams().entrySet()){
+ String parameterName = entry.getKey();
+ // 参数结构:B_name,B为类型,name为属性名称
+ String[] parameter = parameterName.split("_");
+ if (parameter.length == 2) {
+ String paramValue = (String) entry.getValue();
+ Object value = paramValue;
+ if (parameter[0].equals("B")) {
+ value = BooleanUtils.toBoolean(paramValue);
+ agree = (boolean) value;
+ } else if (parameter[0].equals("DT")) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ value = sdf.parse(paramValue);
+ } else if (parameter[0].equals("COM")) {
+ comment = paramValue;
+ }
+ variables.put(parameter[1], value);
+ }
+ }
+
+
+
+
+ if (StringUtils.isNotEmpty(comment)) {
+ identityService.setAuthenticatedUserId(SecurityUtils.getUsername());
+ comment = agree ? "【同意】" + comment : "【拒绝】" + comment;
+ taskService.addComment(activitiBaseEntity.getTaskId(), activitiBaseEntity.getInstanceId(), comment);
+ }
+ // 被委派人处理完成任务
+ // p.s. 被委托的流程需要先 resolved 这个任务再提交。
+ // 所以在 complete 之前需要先 resolved
+ // resolveTask() 要在 claim() 之前,不然 act_hi_taskinst 表的 assignee 字段会为 null
+ taskService.resolveTask(activitiBaseEntity.getTaskId(), variables);
+ // 只有签收任务,act_hi_taskinst 表的 assignee 字段才不为 null
+ taskService.claim(activitiBaseEntity.getTaskId(), SecurityUtils.getUsername());
+ taskService.complete(activitiBaseEntity.getTaskId(), variables);
+
+ // 更新待办事项状态
+ BizTodoItem query = new BizTodoItem();
+ query.setTaskId(activitiBaseEntity.getTaskId());
+ // 考虑到候选用户组,会有多个 todoitem 办理同个 task
+ List updateList = CollectionUtils.isEmpty(bizTodoItemService.selectBizTodoItemList(query)) ? null : bizTodoItemService.selectBizTodoItemList(query);
+ for (BizTodoItem update: updateList) {
+ // 找到当前登录用户的 todoitem,置为已办
+ if (update.getTodoUserId().equals(SecurityUtils.getUsername())) {
+ update.setIsView("1");
+ update.setIsHandle("1");
+ update.setHandleUserId(SecurityUtils.getUsername());
+ update.setHandleUserName(SecurityUtils.getNickName());
+ update.setHandleTime(DateUtils.getNowDate());
+ bizTodoItemService.updateBizTodoItem(update);
+ } else {
+ bizTodoItemService.deleteBizTodoItemById(update.getId()); // 删除候选用户组其他 todoitem
+ }
+ }
+
+ // 下一节点处理人待办事项
+ bizTodoItemService.insertTodoItem(activitiBaseEntity.getInstanceId(),activitiBaseEntity.getTitle(),activitiBaseEntity.getReason(), module);
+ } catch (Exception e) {
+ logger.error("error on complete task {}, variables={}", new Object[]{activitiBaseEntity.getTaskId(), variables, e});
+ }
+ }
+
+ @Override
+ public List selectHistoryList(String processInstanceId, HistoricActivity historicActivity) {
+// PageDomain pageDomain = TableSupport.buildPageRequest();
+// Integer pageNum = pageDomain.getPageNum();
+// Integer pageSize = pageDomain.getPageSize();
+ List activityList = new ArrayList<>();
+ HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery();
+ if (StringUtils.isNotBlank(historicActivity.getAssignee())) {
+ query.taskAssignee(historicActivity.getAssignee());
+ }
+ if (StringUtils.isNotBlank(historicActivity.getActivityName())) {
+ query.activityName(historicActivity.getActivityName());
+ }
+ List list = query.processInstanceId(processInstanceId)
+ .activityType("userTask")
+ .finished()
+ .orderByHistoricActivityInstanceStartTime()
+ .desc()
+ .list();
+// .listPage((pageNum - 1) * pageSize, pageNum * pageSize);
+ list.forEach(instance -> {
+ HistoricActivity activity = new HistoricActivity();
+ BeanUtils.copyProperties(instance, activity);
+ String taskId = instance.getTaskId();
+ List comment = taskService.getTaskComments(taskId, "comment");
+ if (!CollectionUtils.isEmpty(comment)) {
+ activity.setComment(comment.get(0).getFullMessage());
+ }
+ SysUser sysUser = userMapper.selectUserByUserName(instance.getAssignee());
+ if (sysUser != null) {
+ activity.setAssigneeName(sysUser.getUserName());
+ }
+ activityList.add(activity);
+ });
+ return activityList;
+ }
+
+ @Override
+ public void delegate(String taskId, String fromUser, String delegateToUser) {
+ taskService.delegateTask(taskId, delegateToUser);
+ // 更新待办事项
+// BizTodoItem updateItem = bizTodoItemService.selectBizTodoItemByCondition(taskId, fromUser);
+// if (updateItem != null) {
+// SysUser todoUser = userMapper.selectUserByLoginName(delegateToUser);
+// updateItem.setTodoUserId(delegateToUser);
+// updateItem.setTodoUserName(todoUser.getUserName());
+// bizTodoItemService.updateBizTodoItem(updateItem);
+// }
+ }
+
+ @Override
+ public void cancelApply(String instanceId, String deleteReason) {
+ // 执行此方法后未审批的任务 act_ru_task 会被删除,流程历史 act_hi_taskinst 不会被删除,并且流程历史的状态为finished完成
+ runtimeService.deleteProcessInstance(instanceId, deleteReason);
+ }
+
+ @Override
+ public void suspendOrActiveApply(String instanceId, String suspendState) {
+ if ("1".equals(suspendState)) {
+ // 当流程实例被挂起时,无法通过下一个节点对应的任务id来继续这个流程实例。
+ // 通过挂起某一特定的流程实例,可以终止当前的流程实例,而不影响到该流程定义的其他流程实例。
+ // 激活之后可以继续该流程实例,不会对后续任务造成影响。
+ // 直观变化:act_ru_task 的 SUSPENSION_STATE_ 为 2
+ runtimeService.suspendProcessInstanceById(instanceId);
+ } else if ("2".equals(suspendState)) {
+ runtimeService.activateProcessInstanceById(instanceId);
+ }
+ }
+
+ @Override
+ public String findBusinessKeyByInstanceId(String instanceId) {
+ ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
+ if (processInstance == null) {
+ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
+ .processInstanceId(instanceId)
+ .singleResult();
+ return historicProcessInstance.getBusinessKey();
+ } else {
+ return processInstance.getBusinessKey();
+ }
+ }
+
+}
diff --git a/Rk-progect/ruoyi-activiti/src/main/resources/mapper/BizTodoItemMapper.xml b/Rk-progect/ruoyi-activiti/src/main/resources/mapper/BizTodoItemMapper.xml
new file mode 100644
index 00000000..58e00e82
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/resources/mapper/BizTodoItemMapper.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, item_name, item_content, module, instance_id, task_id, task_name, node_name, is_view, is_handle, todo_user_id, todo_user_name, handle_user_id, handle_user_name, todo_time, handle_time from biz_todo_item
+
+
+
+
+
+
+
+ insert into biz_todo_item
+
+ item_name,
+ item_content,
+ module,
+ instance_id,
+ task_id,
+ task_name,
+ node_name,
+ is_view,
+ is_handle,
+ todo_user_id,
+ todo_user_name,
+ handle_user_id,
+ handle_user_name,
+ todo_time,
+ handle_time,
+
+
+ #{itemName},
+ #{itemContent},
+ #{module},
+ #{instanceId},
+ #{taskId},
+ #{taskName},
+ #{nodeName},
+ #{isView},
+ #{isHandle},
+ #{todoUserId},
+ #{todoUserName},
+ #{handleUserId},
+ #{handleUserName},
+ #{todoTime},
+ #{handleTime},
+
+
+
+
+ update biz_todo_item
+
+ item_name = #{itemName},
+ item_content = #{itemContent},
+ module = #{module},
+ instance_id = #{instanceId},
+ task_id = #{taskId},
+ task_name = #{taskName},
+ node_name = #{nodeName},
+ is_view = #{isView},
+ is_handle = #{isHandle},
+ todo_user_id = #{todoUserId},
+ todo_user_name = #{todoUserName},
+ handle_user_id = #{handleUserId},
+ handle_user_name = #{handleUserName},
+ todo_time = #{todoTime},
+ handle_time = #{handleTime},
+
+ where id = #{id}
+
+
+
+ delete from biz_todo_item where id = #{id}
+
+
+
+ delete from biz_todo_item where id in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/ruoyi-activiti/src/main/resources/stencilset.json b/Rk-progect/ruoyi-activiti/src/main/resources/stencilset.json
new file mode 100644
index 00000000..70f13dcc
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/src/main/resources/stencilset.json
@@ -0,0 +1,1319 @@
+{
+ "title" : "流程编辑器",
+ "namespace" : "http://b3mn.org/stencilset/bpmn2.0#",
+ "description" : "BPMN流程编辑器",
+ "propertyPackages" : [ {
+ "name" : "process_idpackage",
+ "properties" : [ {
+ "id" : "process_id",
+ "type" : "String",
+ "title" : "流程标识",
+ "value" : "process",
+ "description" : "Unique identifier of the process definition.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "overrideidpackage",
+ "properties" : [ {
+ "id" : "overrideid",
+ "type" : "String",
+ "title" : "主键(ID)",
+ "value" : "",
+ "description" : "流程唯一标识.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "namepackage",
+ "properties" : [ {
+ "id" : "name",
+ "type" : "String",
+ "title" : "名称",
+ "value" : "",
+ "description" : "BPMN元素名称.",
+ "popular" : true,
+ "refToView" : "text_name"
+ } ]
+ }, {
+ "name" : "documentationpackage",
+ "properties" : [ {
+ "id" : "documentation",
+ "type" : "Text",
+ "title" : "描述信息",
+ "value" : "",
+ "description" : "BPMN元素描述.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "process_authorpackage",
+ "properties" : [ {
+ "id" : "process_author",
+ "type" : "String",
+ "title" : "流程作者",
+ "value" : "",
+ "description" : "流程定义者姓名.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "process_versionpackage",
+ "properties" : [ {
+ "id" : "process_version",
+ "type" : "String",
+ "title" : "流程版本",
+ "value" : "",
+ "description" : "标识文档版本为目的.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "process_namespacepackage",
+ "properties" : [ {
+ "id" : "process_namespace",
+ "type" : "String",
+ "title" : "目标名称空间",
+ "value" : "http://www.activiti.org/processdef",
+ "description" : "工作流目标命名空间.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "asynchronousdefinitionpackage",
+ "properties" : [ {
+ "id" : "asynchronousdefinition",
+ "type" : "Boolean",
+ "title" : "异步",
+ "value" : "false",
+ "description" : "定义为一个异步任务.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "exclusivedefinitionpackage",
+ "properties" : [ {
+ "id" : "exclusivedefinition",
+ "type" : "Boolean",
+ "title" : "互斥任务",
+ "value" : "false",
+ "description" : "定义为一个互斥任务.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "executionlistenerspackage",
+ "properties" : [ {
+ "id" : "executionlisteners",
+ "type" : "multiplecomplex",
+ "title" : "执行监听器",
+ "value" : "",
+ "description" : "Listeners for an activity, process, sequence flow, start and end event.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "tasklistenerspackage",
+ "properties" : [ {
+ "id" : "tasklisteners",
+ "type" : "multiplecomplex",
+ "title" : "任务监听器",
+ "value" : "",
+ "description" : "监听用户任务.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "eventlistenerspackage",
+ "properties" : [ {
+ "id" : "eventlisteners",
+ "type" : "multiplecomplex",
+ "title" : "事件监听器",
+ "value" : "",
+ "description" : "Listeners for any event happening in the Activiti Engine. It's also possible to rethrow the event as a signal, message or error event",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "usertaskassignmentpackage",
+ "properties" : [ {
+ "id" : "usertaskassignment",
+ "type" : "Complex",
+ "title" : "分配用户",
+ "value" : "",
+ "description" : "分配任务给用户",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "formpropertiespackage",
+ "properties" : [ {
+ "id" : "formproperties",
+ "type" : "Complex",
+ "title" : "表单属性",
+ "value" : "",
+ "description" : "定义表单属性",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "formkeydefinitionpackage",
+ "properties" : [ {
+ "id" : "formkeydefinition",
+ "type" : "String",
+ "title" : "表单编号",
+ "value" : "",
+ "description" : "用户任务表单编号.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "duedatedefinitionpackage",
+ "properties" : [ {
+ "id" : "duedatedefinition",
+ "type" : "String",
+ "title" : "到期时间",
+ "value" : "",
+ "description" : "用户任务到期时间.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "prioritydefinitionpackage",
+ "properties" : [ {
+ "id" : "prioritydefinition",
+ "type" : "String",
+ "title" : "优先级",
+ "value" : "",
+ "description" : "用户任务的优先级.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskclasspackage",
+ "properties" : [ {
+ "id" : "servicetaskclass",
+ "type" : "String",
+ "title" : "类",
+ "value" : "",
+ "description" : "Class that implements the service task logic.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskexpressionpackage",
+ "properties" : [ {
+ "id" : "servicetaskexpression",
+ "type" : "String",
+ "title" : "表达式",
+ "value" : "",
+ "description" : "服务任务 logic defined with an expression.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskdelegateexpressionpackage",
+ "properties" : [ {
+ "id" : "servicetaskdelegateexpression",
+ "type" : "String",
+ "title" : "委托表达式",
+ "value" : "",
+ "description" : "服务任务 logic defined with a delegate expression.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskfieldspackage",
+ "properties" : [ {
+ "id" : "servicetaskfields",
+ "type" : "Complex",
+ "title" : "类字段",
+ "value" : "",
+ "description" : "Field extensions",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskresultvariablepackage",
+ "properties" : [ {
+ "id" : "servicetaskresultvariable",
+ "type" : "String",
+ "title" : "结果变量名",
+ "value" : "",
+ "description" : "Process variable name to store the service task result.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "scriptformatpackage",
+ "properties" : [ {
+ "id" : "scriptformat",
+ "type" : "String",
+ "title" : "脚本格式",
+ "value" : "",
+ "description" : "Script format of the script task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "scripttextpackage",
+ "properties" : [ {
+ "id" : "scripttext",
+ "type" : "Text",
+ "title" : "脚本",
+ "value" : "",
+ "description" : "Script text of the script task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_rulespackage",
+ "properties" : [ {
+ "id" : "ruletask_rules",
+ "type" : "String",
+ "title" : "规则",
+ "value" : "",
+ "description" : "Rules of the rule task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_variables_inputpackage",
+ "properties" : [ {
+ "id" : "ruletask_variables_input",
+ "type" : "String",
+ "title" : "输入变量",
+ "value" : "",
+ "description" : "Input variables of the rule task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_excludepackage",
+ "properties" : [ {
+ "id" : "ruletask_exclude",
+ "type" : "Boolean",
+ "title" : "排除",
+ "value" : "false",
+ "description" : "Use the rules property as exclusion.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_resultpackage",
+ "properties" : [ {
+ "id" : "ruletask_result",
+ "type" : "String",
+ "title" : "结果变量",
+ "value" : "",
+ "description" : "Result variable of the rule task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtasktopackage",
+ "properties" : [ {
+ "id" : "mailtaskto",
+ "type" : "Text",
+ "title" : "至",
+ "value" : "",
+ "description" : "The recipients if the e-mail. Multiple recipients are defined in a comma-separated list.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskfrompackage",
+ "properties" : [ {
+ "id" : "mailtaskfrom",
+ "type" : "Text",
+ "title" : "表单",
+ "value" : "",
+ "description" : "The sender e-mail address. If not provided, the default configured from address is used.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtasksubjectpackage",
+ "properties" : [ {
+ "id" : "mailtasksubject",
+ "type" : "Text",
+ "title" : "主题",
+ "value" : "",
+ "description" : "The subject of the e-mail.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskccpackage",
+ "properties" : [ {
+ "id" : "mailtaskcc",
+ "type" : "Text",
+ "title" : "抄送",
+ "value" : "",
+ "description" : "The cc's of the e-mail. Multiple recipients are defined in a comma-separated list",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskbccpackage",
+ "properties" : [ {
+ "id" : "mailtaskbcc",
+ "type" : "Text",
+ "title" : "隐藏抄送",
+ "value" : "",
+ "description" : "The bcc's of the e-mail. Multiple recipients are defined in a comma-separated list",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtasktextpackage",
+ "properties" : [ {
+ "id" : "mailtasktext",
+ "type" : "Text",
+ "title" : "文本",
+ "value" : "",
+ "description" : "The content of the e-mail, in case one needs to send plain none-rich e-mails. Can be used in combination with html, for e-mail clients that don't support rich content. The client will then fall back to this text-only alternative.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskhtmlpackage",
+ "properties" : [ {
+ "id" : "mailtaskhtml",
+ "type" : "Text",
+ "title" : "Html",
+ "value" : "",
+ "description" : "A piece of HTML that is the content of the e-mail.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskcharsetpackage",
+ "properties" : [ {
+ "id" : "mailtaskcharset",
+ "type" : "String",
+ "title" : "字符集(编码格式)",
+ "value" : "",
+ "description" : "修改邮件字符集,是许多除英语之外的语言所必须的. ",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "callactivitycalledelementpackage",
+ "properties" : [ {
+ "id" : "callactivitycalledelement",
+ "type" : "String",
+ "title" : "调用元素",
+ "value" : "",
+ "description" : "流程引用.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "callactivityinparameterspackage",
+ "properties" : [ {
+ "id" : "callactivityinparameters",
+ "type" : "Complex",
+ "title" : "输入参数",
+ "value" : "",
+ "description" : "Definition of the input parameters",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "callactivityoutparameterspackage",
+ "properties" : [ {
+ "id" : "callactivityoutparameters",
+ "type" : "Complex",
+ "title" : "输出参数",
+ "value" : "",
+ "description" : "Definition of the output parameters",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "cameltaskcamelcontextpackage",
+ "properties" : [ {
+ "id" : "cameltaskcamelcontext",
+ "type" : "String",
+ "title" : "Camel context",
+ "value" : "",
+ "description" : "An optional camel context definition, if left empty the default is used.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletaskendpointurlpackage",
+ "properties" : [ {
+ "id" : "muletaskendpointurl",
+ "type" : "String",
+ "title" : "Endpoint url",
+ "value" : "",
+ "description" : "A required endpoint url to sent the message to Mule.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletasklanguagepackage",
+ "properties" : [ {
+ "id" : "muletasklanguage",
+ "type" : "String",
+ "title" : "语言",
+ "value" : "",
+ "description" : "A required definition for the language to resolve the payload expression, like juel.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletaskpayloadexpressionpackage",
+ "properties" : [ {
+ "id" : "muletaskpayloadexpression",
+ "type" : "String",
+ "title" : "Payload expression",
+ "value" : "",
+ "description" : "A required definition for the payload of the message sent to Mule.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletaskresultvariablepackage",
+ "properties" : [ {
+ "id" : "muletaskresultvariable",
+ "type" : "String",
+ "title" : "Result variable",
+ "value" : "",
+ "description" : "An optional result variable for the payload returned.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "conditionsequenceflowpackage",
+ "properties" : [ {
+ "id" : "conditionsequenceflow",
+ "type" : "Complex",
+ "title" : "流条件",
+ "value" : "",
+ "description" : "The condition of the sequence flow",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "defaultflowpackage",
+ "properties" : [ {
+ "id" : "defaultflow",
+ "type" : "Boolean",
+ "title" : "默认流",
+ "value" : "false",
+ "description" : "Define the sequence flow as default",
+ "popular" : true,
+ "refToView" : "default"
+ } ]
+ }, {
+ "name" : "conditionalflowpackage",
+ "properties" : [ {
+ "id" : "conditionalflow",
+ "type" : "Boolean",
+ "title" : "条件流",
+ "value" : "false",
+ "description" : "Define the sequence flow with a condition",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timercycledefinitionpackage",
+ "properties" : [ {
+ "id" : "timercycledefinition",
+ "type" : "String",
+ "title" : "时间周期(e.g. R3/PT10H)",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 cycle.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timerdatedefinitionpackage",
+ "properties" : [ {
+ "id" : "timerdatedefinition",
+ "type" : "String",
+ "title" : "采用ISO-8601日期时间",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 date definition.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timerdurationdefinitionpackage",
+ "properties" : [ {
+ "id" : "timerdurationdefinition",
+ "type" : "String",
+ "title" : "持续时间(e.g. PT5M)",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 duration.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timerenddatedefinitionpackage",
+ "properties" : [ {
+ "id" : "timerenddatedefinition",
+ "type" : "String",
+ "title" : "Time End Date in ISO-8601",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 duration.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "messagerefpackage",
+ "properties" : [ {
+ "id" : "messageref",
+ "type" : "String",
+ "title" : "消息引用",
+ "value" : "",
+ "description" : "Define the message name.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "signalrefpackage",
+ "properties" : [ {
+ "id" : "signalref",
+ "type" : "String",
+ "title" : "信号引用",
+ "value" : "",
+ "description" : "定义信号名称.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "errorrefpackage",
+ "properties" : [ {
+ "id" : "errorref",
+ "type" : "String",
+ "title" : "错误引用",
+ "value" : "",
+ "description" : "定义错误名称.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "cancelactivitypackage",
+ "properties" : [ {
+ "id" : "cancelactivity",
+ "type" : "Boolean",
+ "title" : "取消任务",
+ "value" : "true",
+ "description" : "Should the activity be cancelled",
+ "popular" : true,
+ "refToView" : [ "frame", "frame2" ]
+ } ]
+ }, {
+ "name" : "initiatorpackage",
+ "properties" : [ {
+ "id" : "initiator",
+ "type" : "String",
+ "title" : "启动器",
+ "value" : "",
+ "description" : "Initiator of the process.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "textpackage",
+ "properties" : [ {
+ "id" : "text",
+ "type" : "String",
+ "title" : "文本",
+ "value" : "",
+ "description" : "The text of the text annotation.",
+ "popular" : true,
+ "refToView" : "text"
+ } ]
+ }, {
+ "name" : "multiinstance_typepackage",
+ "properties" : [ {
+ "id" : "multiinstance_type",
+ "type" : "kisbpm-multiinstance",
+ "title" : "多实例类型",
+ "value" : "None",
+ "description" : "Repeated activity execution (parallel or sequential) can be displayed through different loop types",
+ "popular" : true,
+ "refToView" : "multiinstance"
+ } ]
+ }, {
+ "name" : "multiinstance_cardinalitypackage",
+ "properties" : [ {
+ "id" : "multiinstance_cardinality",
+ "type" : "String",
+ "title" : "基数(多实例)",
+ "value" : "",
+ "description" : "Define the cardinality of multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "multiinstance_collectionpackage",
+ "properties" : [ {
+ "id" : "multiinstance_collection",
+ "type" : "String",
+ "title" : "集合(多实例)",
+ "value" : "",
+ "description" : "Define the collection for the multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "multiinstance_variablepackage",
+ "properties" : [ {
+ "id" : "multiinstance_variable",
+ "type" : "String",
+ "title" : "元素变量(多实例)",
+ "value" : "",
+ "description" : "Define the element variable for the multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "multiinstance_conditionpackage",
+ "properties" : [ {
+ "id" : "multiinstance_condition",
+ "type" : "String",
+ "title" : "完成条件(多实例)",
+ "value" : "",
+ "description" : "Define the completion condition for the multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "isforcompensationpackage",
+ "properties" : [ {
+ "id" : "isforcompensation",
+ "type" : "Boolean",
+ "title" : "是否补偿",
+ "value" : "false",
+ "description" : "A flag that identifies whether this activity is intended for the purposes of compensation.",
+ "popular" : true,
+ "refToView" : "compensation"
+ } ]
+ }, {
+ "name" : "sequencefloworderpackage",
+ "properties" : [ {
+ "id" : "sequencefloworder",
+ "type" : "Complex",
+ "title" : "Flow order",
+ "value" : "",
+ "description" : "Order outgoing sequence flows.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "signaldefinitionspackage",
+ "properties" : [ {
+ "id" : "signaldefinitions",
+ "type" : "multiplecomplex",
+ "title" : "信号定义",
+ "value" : "",
+ "description" : "Signal definitions",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "messagedefinitionspackage",
+ "properties" : [ {
+ "id" : "messagedefinitions",
+ "type" : "multiplecomplex",
+ "title" : "消息定义",
+ "value" : "",
+ "description" : "Message definitions",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "istransactionpackage",
+ "properties" : [ {
+ "id" : "istransaction",
+ "type" : "Boolean",
+ "title" : "Is a transaction sub process",
+ "value" : "false",
+ "description" : "A flag that identifies whether this sub process is of type transaction.",
+ "popular" : true,
+ "refToView" : "border"
+ } ]
+ } ],
+ "stencils" : [ {
+ "type" : "node",
+ "id" : "BPMNDiagram",
+ "title" : "BPMN-Diagram",
+ "description" : "A BPMN 2.0 diagram.",
+ "view" : "\n",
+ "icon" : "diagram.png",
+ "groups" : [ "Diagram" ],
+ "mayBeRoot" : true,
+ "hide" : true,
+ "propertyPackages" : [ "process_idpackage", "namepackage", "documentationpackage", "process_authorpackage", "process_versionpackage", "process_namespacepackage", "executionlistenerspackage", "eventlistenerspackage", "signaldefinitionspackage", "messagedefinitionspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ ]
+ }, {
+ "type" : "node",
+ "id" : "StartNoneEvent",
+ "title" : "开始事件",
+ "description" : "一个事件的开始",
+ "view" : "\n",
+ "icon" : "startevent/none.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "initiatorpackage", "formkeydefinitionpackage", "formpropertiespackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartTimerEvent",
+ "title" : "定时开始事件",
+ "description" : "有定时任务触发器的开始事件",
+ "view" : "\n",
+ "icon" : "startevent/timer.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartSignalEvent",
+ "title" : "信号开始事件",
+ "description" : "有信号触发器的开始事件.",
+ "view" : "\n",
+ "icon" : "startevent/signal.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartMessageEvent",
+ "title" : "消息开始事件",
+ "description" : "有消息触发器的开始事件.",
+ "view" : "\n",
+ "icon" : "startevent/message.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "messagerefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartErrorEvent",
+ "title" : "错误开始事件",
+ "description" : "捕获抛出BMP错误的开始事件.",
+ "view" : "\n",
+ "icon" : "startevent/error.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "errorrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "UserTask",
+ "title" : "用户任务",
+ "description" : "由特定用户完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.user.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "usertaskassignmentpackage", "formkeydefinitionpackage", "duedatedefinitionpackage", "prioritydefinitionpackage", "formpropertiespackage", "tasklistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ServiceTask",
+ "title" : "服务任务",
+ "description" : "由服务逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.service.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "servicetaskclasspackage", "servicetaskexpressionpackage", "servicetaskdelegateexpressionpackage", "servicetaskfieldspackage", "servicetaskresultvariablepackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ScriptTask",
+ "title" : "脚本任务",
+ "description" : "由脚本逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.script.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "scriptformatpackage", "scripttextpackage", "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "BusinessRule",
+ "title" : "业务规则任务",
+ "description" : "由规则逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.business.rule.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "ruletask_rulespackage", "ruletask_variables_inputpackage", "ruletask_excludepackage", "ruletask_resultpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ReceiveTask",
+ "title" : "接收任务",
+ "description" : "等待接收信号的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.receive.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ManualTask",
+ "title" : "人工任务",
+ "description" : "无需逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.manual.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "MailTask",
+ "title" : "邮件任务",
+ "description" : "发送邮件通知的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.send.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "mailtasktopackage", "mailtaskfrompackage", "mailtasksubjectpackage", "mailtaskccpackage", "mailtaskbccpackage", "mailtasktextpackage", "mailtaskhtmlpackage", "mailtaskcharsetpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CamelTask",
+ "title" : "骆驼任务",
+ "description" : "发送消息(骆驼)的任务",
+ "view" : "\n",
+ "icon" : "activity/list/type.camel.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "cameltaskcamelcontextpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "MuleTask",
+ "title" : "Mule任务",
+ "description" : "发送消息(Mule)的任务",
+ "view" : "\n",
+ "icon" : "activity/list/type.mule.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "muletaskendpointurlpackage", "muletasklanguagepackage", "muletaskpayloadexpressionpackage", "muletaskresultvariablepackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "SendTask",
+ "title" : "发送任务",
+ "description" : "An task that sends a message",
+ "view" : "\n",
+ "icon" : "activity/list/type.send.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "SubProcess",
+ "title" : "子流程",
+ "description" : "子流程范围",
+ "view" : "\n",
+ "icon" : "activity/expanded.subprocess.png",
+ "groups" : [ "结构" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EventSubProcess",
+ "title" : "事件子流程",
+ "description" : "事件周日子流程范围",
+ "view" : "\n",
+ "icon" : "activity/event.subprocess.png",
+ "groups" : [ "结构" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CallActivity",
+ "title" : "调用活动",
+ "description" : "调用活动",
+ "view" : "\n",
+ "icon" : "activity/task.png",
+ "groups" : [ "结构" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "callactivitycalledelementpackage", "callactivityinparameterspackage", "callactivityoutparameterspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ExclusiveGateway",
+ "title" : "互斥网关",
+ "description" : "一个选择的网关",
+ "view" : "\n\n",
+ "icon" : "gateway/exclusive.databased.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ParallelGateway",
+ "title" : "并行网关",
+ "description" : "并行处理的网关",
+ "view" : "\n\n",
+ "icon" : "gateway/parallel.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "InclusiveGateway",
+ "title" : "包容性网关",
+ "description" : "包容性网关",
+ "view" : "\n\n",
+ "icon" : "gateway/inclusive.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EventGateway",
+ "title" : "事件网关",
+ "description" : "事件网关",
+ "view" : "\n\n",
+ "icon" : "gateway/eventbased.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryErrorEvent",
+ "title" : "边界错误事件",
+ "description" : "边界错误事件",
+ "view" : "\n",
+ "icon" : "catching/error.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "errorrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryTimerEvent",
+ "title" : "边界定时事件",
+ "description" : "边界定时事件",
+ "view" : "\n",
+ "icon" : "catching/timer.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage", "cancelactivitypackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundarySignalEvent",
+ "title" : "边界信号事件",
+ "description" : "边界信号事件",
+ "view" : "\n",
+ "icon" : "catching/signal.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "signalrefpackage", "cancelactivitypackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryMessageEvent",
+ "title" : "边界消息事件",
+ "description" : "边界消息事件",
+ "view" : "\n",
+ "icon" : "catching/message.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "messagerefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryCancelEvent",
+ "title" : "边界取消事件",
+ "description" : "边界取消事件",
+ "view" : "\n",
+ "icon" : "catching/cancel.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryCompensationEvent",
+ "title" : "边界补偿事件",
+ "description" : "边界补偿事件",
+ "view" : "\n",
+ "icon" : "catching/compensation.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CatchTimerEvent",
+ "title" : "中间定时器捕获事件",
+ "description" : "中间定时器捕获事件",
+ "view" : "\n",
+ "icon" : "catching/timer.png",
+ "groups" : [ "中间捕捉事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CatchSignalEvent",
+ "title" : "中间信号捕捉事件",
+ "description" : "中间信号捕捉事件",
+ "view" : "\n",
+ "icon" : "catching/signal.png",
+ "groups" : [ "中间捕捉事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CatchMessageEvent",
+ "title" : "中间消息捕捉事件",
+ "description" : "中间消息捕捉事件",
+ "view" : "\n",
+ "icon" : "catching/message.png",
+ "groups" : [ "中间捕捉事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "messagerefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ThrowNoneEvent",
+ "title" : "中间无抛出事件",
+ "description" : "中间无抛出事件",
+ "view" : "\n",
+ "icon" : "throwing/none.png",
+ "groups" : [ "中间抛出事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ThrowEventsMorph", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ThrowSignalEvent",
+ "title" : "中间信号抛出事件",
+ "description" : "中间信号抛出事件",
+ "view" : "\n",
+ "icon" : "throwing/signal.png",
+ "groups" : [ "中间抛出事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ThrowEventsMorph", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndNoneEvent",
+ "title" : "结束事件",
+ "description" : "结束事件",
+ "view" : "\n",
+ "icon" : "endevent/none.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndErrorEvent",
+ "title" : "结束错误事件",
+ "description" : "结束错误事件",
+ "view" : "\n",
+ "icon" : "endevent/error.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "errorrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndCancelEvent",
+ "title" : "结束取消事件",
+ "description" : "结束取消事件",
+ "view" : "\n",
+ "icon" : "endevent/cancel.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndTerminateEvent",
+ "title" : "结束终止事件",
+ "description" : "结束终止事件",
+ "view" : "\n",
+ "icon" : "endevent/terminate.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "Pool",
+ "title" : "池",
+ "description" : "构建过程定义的池",
+ "view" : "\n",
+ "icon" : "swimlane/pool.png",
+ "groups" : [ "泳道" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.pool"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "process_idpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "canContainArtifacts", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "Lane",
+ "title" : "道",
+ "description" : "建立流程定义的通道",
+ "view" : "\n",
+ "icon" : "swimlane/lane.png",
+ "groups" : [ "泳道" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "PoolChild", "canContainArtifacts", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "SequenceFlow",
+ "title" : "Sequence flow",
+ "description" : "序列流定义了活动的执行顺序",
+ "view" : "\r\n",
+ "icon" : "connector/sequenceflow.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "conditionsequenceflowpackage", "executionlistenerspackage", "defaultflowpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "MessageFlow",
+ "title" : "Message flow",
+ "description" : "消息流连接不同池中的元素",
+ "view" : "\r\n",
+ "icon" : "connector/messageflow.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "Association",
+ "title" : "Association",
+ "description" : "将文本注释与元素关联",
+ "view" : "\r\n",
+ "icon" : "connector/association.undirected.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "DataAssociation",
+ "title" : "DataAssociation",
+ "description" : "将数据元素与活动关联",
+ "view" : "\r\n",
+ "icon" : "connector/association.unidirectional.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "TextAnnotation",
+ "title" : "文本注释",
+ "description" : "文本注释",
+ "view" : "\n",
+ "icon" : "artifact/text.annotation.png",
+ "groups" : [ "组件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "textpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "all" ]
+ }, {
+ "type" : "node",
+ "id" : "DataStore",
+ "title" : "Data store",
+ "description" : "Reference to a data store.",
+ "view" : "\r\n\r\n",
+ "icon" : "dataobject/data.store.png",
+ "groups" : [ "组件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "all" ]
+ } ],
+ "rules" : {
+ "cardinalityRules" : [ {
+ "role" : "Startevents_all",
+ "incomingEdges" : [ {
+ "role" : "SequenceFlow",
+ "maximum" : 0
+ } ]
+ }, {
+ "role" : "Endevents_all",
+ "outgoingEdges" : [ {
+ "role" : "SequenceFlow",
+ "maximum" : 0
+ } ]
+ } ],
+ "connectionRules" : [ {
+ "role" : "SequenceFlow",
+ "connects" : [ {
+ "from" : "sequence_start",
+ "to" : [ "sequence_end" ]
+ } ]
+ }, {
+ "role" : "Association",
+ "connects" : [ {
+ "from" : "sequence_start",
+ "to" : [ "TextAnnotation" ]
+ }, {
+ "from" : "sequence_end",
+ "to" : [ "TextAnnotation" ]
+ }, {
+ "from" : "TextAnnotation",
+ "to" : [ "sequence_end" ]
+ }, {
+ "from" : "BoundaryCompensationEvent",
+ "to" : [ "sequence_end" ]
+ }, {
+ "from" : "TextAnnotation",
+ "to" : [ "sequence_start" ]
+ }, {
+ "from" : "BoundaryCompensationEvent",
+ "to" : [ "sequence_start" ]
+ } ]
+ }, {
+ "role" : "DataAssociation",
+ "connects" : [ {
+ "from" : "sequence_start",
+ "to" : [ "DataStore" ]
+ }, {
+ "from" : "sequence_end",
+ "to" : [ "DataStore" ]
+ }, {
+ "from" : "DataStore",
+ "to" : [ "sequence_end" ]
+ }, {
+ "from" : "DataStore",
+ "to" : [ "sequence_start" ]
+ } ]
+ }, {
+ "role" : "IntermediateEventOnActivityBoundary",
+ "connects" : [ {
+ "from" : "Activity",
+ "to" : [ "IntermediateEventOnActivityBoundary" ]
+ } ]
+ } ],
+ "containmentRules" : [ {
+ "role" : "BPMNDiagram",
+ "contains" : [ "all" ]
+ }, {
+ "role" : "SubProcess",
+ "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "EventSubProcess", "TextAnnotation", "DataStore" ]
+ }, {
+ "role" : "EventSubProcess",
+ "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "TextAnnotation", "DataStore" ]
+ }, {
+ "role" : "Pool",
+ "contains" : [ "Lane" ]
+ }, {
+ "role" : "Lane",
+ "contains" : [ "sequence_start", "sequence_end", "EventSubProcess", "TextAnnotation", "DataStore" ]
+ } ],
+ "morphingRules" : [ {
+ "role" : "ActivitiesMorph",
+ "baseMorphs" : [ "UserTask" ],
+ "preserveBounds" : true
+ }, {
+ "role" : "GatewaysMorph",
+ "baseMorphs" : [ "ExclusiveGateway" ]
+ }, {
+ "role" : "StartEventsMorph",
+ "baseMorphs" : [ "StartNoneEvent" ]
+ }, {
+ "role" : "EndEventsMorph",
+ "baseMorphs" : [ "StartNoneEvent" ]
+ }, {
+ "role" : "CatchEventsMorph",
+ "baseMorphs" : [ "CatchTimerEvent" ]
+ }, {
+ "role" : "ThrowEventsMorph",
+ "baseMorphs" : [ "ThrowNoneEvent" ]
+ }, {
+ "role" : "BoundaryEventsMorph",
+ "baseMorphs" : [ "ThrowNoneEvent" ]
+ }, {
+ "role" : "BoundaryCompensationEvent",
+ "baseMorphs" : [ "BoundaryCompensationEvent" ]
+ }, {
+ "role" : "TextAnnotation",
+ "baseMorphs" : [ "TextAnnotation" ]
+ }, {
+ "role" : "DataStore",
+ "baseMorphs" : [ "DataStore" ]
+ } ]
+ }
+}
diff --git a/Rk-progect/ruoyi-activiti/target/classes/mapper/BizTodoItemMapper.xml b/Rk-progect/ruoyi-activiti/target/classes/mapper/BizTodoItemMapper.xml
new file mode 100644
index 00000000..58e00e82
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/target/classes/mapper/BizTodoItemMapper.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, item_name, item_content, module, instance_id, task_id, task_name, node_name, is_view, is_handle, todo_user_id, todo_user_name, handle_user_id, handle_user_name, todo_time, handle_time from biz_todo_item
+
+
+
+
+
+
+
+ insert into biz_todo_item
+
+ item_name,
+ item_content,
+ module,
+ instance_id,
+ task_id,
+ task_name,
+ node_name,
+ is_view,
+ is_handle,
+ todo_user_id,
+ todo_user_name,
+ handle_user_id,
+ handle_user_name,
+ todo_time,
+ handle_time,
+
+
+ #{itemName},
+ #{itemContent},
+ #{module},
+ #{instanceId},
+ #{taskId},
+ #{taskName},
+ #{nodeName},
+ #{isView},
+ #{isHandle},
+ #{todoUserId},
+ #{todoUserName},
+ #{handleUserId},
+ #{handleUserName},
+ #{todoTime},
+ #{handleTime},
+
+
+
+
+ update biz_todo_item
+
+ item_name = #{itemName},
+ item_content = #{itemContent},
+ module = #{module},
+ instance_id = #{instanceId},
+ task_id = #{taskId},
+ task_name = #{taskName},
+ node_name = #{nodeName},
+ is_view = #{isView},
+ is_handle = #{isHandle},
+ todo_user_id = #{todoUserId},
+ todo_user_name = #{todoUserName},
+ handle_user_id = #{handleUserId},
+ handle_user_name = #{handleUserName},
+ todo_time = #{todoTime},
+ handle_time = #{handleTime},
+
+ where id = #{id}
+
+
+
+ delete from biz_todo_item where id = #{id}
+
+
+
+ delete from biz_todo_item where id in
+
+ #{id}
+
+
+
+
diff --git a/Rk-progect/ruoyi-activiti/target/classes/stencilset.json b/Rk-progect/ruoyi-activiti/target/classes/stencilset.json
new file mode 100644
index 00000000..70f13dcc
--- /dev/null
+++ b/Rk-progect/ruoyi-activiti/target/classes/stencilset.json
@@ -0,0 +1,1319 @@
+{
+ "title" : "流程编辑器",
+ "namespace" : "http://b3mn.org/stencilset/bpmn2.0#",
+ "description" : "BPMN流程编辑器",
+ "propertyPackages" : [ {
+ "name" : "process_idpackage",
+ "properties" : [ {
+ "id" : "process_id",
+ "type" : "String",
+ "title" : "流程标识",
+ "value" : "process",
+ "description" : "Unique identifier of the process definition.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "overrideidpackage",
+ "properties" : [ {
+ "id" : "overrideid",
+ "type" : "String",
+ "title" : "主键(ID)",
+ "value" : "",
+ "description" : "流程唯一标识.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "namepackage",
+ "properties" : [ {
+ "id" : "name",
+ "type" : "String",
+ "title" : "名称",
+ "value" : "",
+ "description" : "BPMN元素名称.",
+ "popular" : true,
+ "refToView" : "text_name"
+ } ]
+ }, {
+ "name" : "documentationpackage",
+ "properties" : [ {
+ "id" : "documentation",
+ "type" : "Text",
+ "title" : "描述信息",
+ "value" : "",
+ "description" : "BPMN元素描述.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "process_authorpackage",
+ "properties" : [ {
+ "id" : "process_author",
+ "type" : "String",
+ "title" : "流程作者",
+ "value" : "",
+ "description" : "流程定义者姓名.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "process_versionpackage",
+ "properties" : [ {
+ "id" : "process_version",
+ "type" : "String",
+ "title" : "流程版本",
+ "value" : "",
+ "description" : "标识文档版本为目的.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "process_namespacepackage",
+ "properties" : [ {
+ "id" : "process_namespace",
+ "type" : "String",
+ "title" : "目标名称空间",
+ "value" : "http://www.activiti.org/processdef",
+ "description" : "工作流目标命名空间.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "asynchronousdefinitionpackage",
+ "properties" : [ {
+ "id" : "asynchronousdefinition",
+ "type" : "Boolean",
+ "title" : "异步",
+ "value" : "false",
+ "description" : "定义为一个异步任务.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "exclusivedefinitionpackage",
+ "properties" : [ {
+ "id" : "exclusivedefinition",
+ "type" : "Boolean",
+ "title" : "互斥任务",
+ "value" : "false",
+ "description" : "定义为一个互斥任务.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "executionlistenerspackage",
+ "properties" : [ {
+ "id" : "executionlisteners",
+ "type" : "multiplecomplex",
+ "title" : "执行监听器",
+ "value" : "",
+ "description" : "Listeners for an activity, process, sequence flow, start and end event.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "tasklistenerspackage",
+ "properties" : [ {
+ "id" : "tasklisteners",
+ "type" : "multiplecomplex",
+ "title" : "任务监听器",
+ "value" : "",
+ "description" : "监听用户任务.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "eventlistenerspackage",
+ "properties" : [ {
+ "id" : "eventlisteners",
+ "type" : "multiplecomplex",
+ "title" : "事件监听器",
+ "value" : "",
+ "description" : "Listeners for any event happening in the Activiti Engine. It's also possible to rethrow the event as a signal, message or error event",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "usertaskassignmentpackage",
+ "properties" : [ {
+ "id" : "usertaskassignment",
+ "type" : "Complex",
+ "title" : "分配用户",
+ "value" : "",
+ "description" : "分配任务给用户",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "formpropertiespackage",
+ "properties" : [ {
+ "id" : "formproperties",
+ "type" : "Complex",
+ "title" : "表单属性",
+ "value" : "",
+ "description" : "定义表单属性",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "formkeydefinitionpackage",
+ "properties" : [ {
+ "id" : "formkeydefinition",
+ "type" : "String",
+ "title" : "表单编号",
+ "value" : "",
+ "description" : "用户任务表单编号.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "duedatedefinitionpackage",
+ "properties" : [ {
+ "id" : "duedatedefinition",
+ "type" : "String",
+ "title" : "到期时间",
+ "value" : "",
+ "description" : "用户任务到期时间.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "prioritydefinitionpackage",
+ "properties" : [ {
+ "id" : "prioritydefinition",
+ "type" : "String",
+ "title" : "优先级",
+ "value" : "",
+ "description" : "用户任务的优先级.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskclasspackage",
+ "properties" : [ {
+ "id" : "servicetaskclass",
+ "type" : "String",
+ "title" : "类",
+ "value" : "",
+ "description" : "Class that implements the service task logic.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskexpressionpackage",
+ "properties" : [ {
+ "id" : "servicetaskexpression",
+ "type" : "String",
+ "title" : "表达式",
+ "value" : "",
+ "description" : "服务任务 logic defined with an expression.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskdelegateexpressionpackage",
+ "properties" : [ {
+ "id" : "servicetaskdelegateexpression",
+ "type" : "String",
+ "title" : "委托表达式",
+ "value" : "",
+ "description" : "服务任务 logic defined with a delegate expression.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskfieldspackage",
+ "properties" : [ {
+ "id" : "servicetaskfields",
+ "type" : "Complex",
+ "title" : "类字段",
+ "value" : "",
+ "description" : "Field extensions",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "servicetaskresultvariablepackage",
+ "properties" : [ {
+ "id" : "servicetaskresultvariable",
+ "type" : "String",
+ "title" : "结果变量名",
+ "value" : "",
+ "description" : "Process variable name to store the service task result.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "scriptformatpackage",
+ "properties" : [ {
+ "id" : "scriptformat",
+ "type" : "String",
+ "title" : "脚本格式",
+ "value" : "",
+ "description" : "Script format of the script task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "scripttextpackage",
+ "properties" : [ {
+ "id" : "scripttext",
+ "type" : "Text",
+ "title" : "脚本",
+ "value" : "",
+ "description" : "Script text of the script task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_rulespackage",
+ "properties" : [ {
+ "id" : "ruletask_rules",
+ "type" : "String",
+ "title" : "规则",
+ "value" : "",
+ "description" : "Rules of the rule task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_variables_inputpackage",
+ "properties" : [ {
+ "id" : "ruletask_variables_input",
+ "type" : "String",
+ "title" : "输入变量",
+ "value" : "",
+ "description" : "Input variables of the rule task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_excludepackage",
+ "properties" : [ {
+ "id" : "ruletask_exclude",
+ "type" : "Boolean",
+ "title" : "排除",
+ "value" : "false",
+ "description" : "Use the rules property as exclusion.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "ruletask_resultpackage",
+ "properties" : [ {
+ "id" : "ruletask_result",
+ "type" : "String",
+ "title" : "结果变量",
+ "value" : "",
+ "description" : "Result variable of the rule task.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtasktopackage",
+ "properties" : [ {
+ "id" : "mailtaskto",
+ "type" : "Text",
+ "title" : "至",
+ "value" : "",
+ "description" : "The recipients if the e-mail. Multiple recipients are defined in a comma-separated list.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskfrompackage",
+ "properties" : [ {
+ "id" : "mailtaskfrom",
+ "type" : "Text",
+ "title" : "表单",
+ "value" : "",
+ "description" : "The sender e-mail address. If not provided, the default configured from address is used.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtasksubjectpackage",
+ "properties" : [ {
+ "id" : "mailtasksubject",
+ "type" : "Text",
+ "title" : "主题",
+ "value" : "",
+ "description" : "The subject of the e-mail.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskccpackage",
+ "properties" : [ {
+ "id" : "mailtaskcc",
+ "type" : "Text",
+ "title" : "抄送",
+ "value" : "",
+ "description" : "The cc's of the e-mail. Multiple recipients are defined in a comma-separated list",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskbccpackage",
+ "properties" : [ {
+ "id" : "mailtaskbcc",
+ "type" : "Text",
+ "title" : "隐藏抄送",
+ "value" : "",
+ "description" : "The bcc's of the e-mail. Multiple recipients are defined in a comma-separated list",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtasktextpackage",
+ "properties" : [ {
+ "id" : "mailtasktext",
+ "type" : "Text",
+ "title" : "文本",
+ "value" : "",
+ "description" : "The content of the e-mail, in case one needs to send plain none-rich e-mails. Can be used in combination with html, for e-mail clients that don't support rich content. The client will then fall back to this text-only alternative.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskhtmlpackage",
+ "properties" : [ {
+ "id" : "mailtaskhtml",
+ "type" : "Text",
+ "title" : "Html",
+ "value" : "",
+ "description" : "A piece of HTML that is the content of the e-mail.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "mailtaskcharsetpackage",
+ "properties" : [ {
+ "id" : "mailtaskcharset",
+ "type" : "String",
+ "title" : "字符集(编码格式)",
+ "value" : "",
+ "description" : "修改邮件字符集,是许多除英语之外的语言所必须的. ",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "callactivitycalledelementpackage",
+ "properties" : [ {
+ "id" : "callactivitycalledelement",
+ "type" : "String",
+ "title" : "调用元素",
+ "value" : "",
+ "description" : "流程引用.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "callactivityinparameterspackage",
+ "properties" : [ {
+ "id" : "callactivityinparameters",
+ "type" : "Complex",
+ "title" : "输入参数",
+ "value" : "",
+ "description" : "Definition of the input parameters",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "callactivityoutparameterspackage",
+ "properties" : [ {
+ "id" : "callactivityoutparameters",
+ "type" : "Complex",
+ "title" : "输出参数",
+ "value" : "",
+ "description" : "Definition of the output parameters",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "cameltaskcamelcontextpackage",
+ "properties" : [ {
+ "id" : "cameltaskcamelcontext",
+ "type" : "String",
+ "title" : "Camel context",
+ "value" : "",
+ "description" : "An optional camel context definition, if left empty the default is used.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletaskendpointurlpackage",
+ "properties" : [ {
+ "id" : "muletaskendpointurl",
+ "type" : "String",
+ "title" : "Endpoint url",
+ "value" : "",
+ "description" : "A required endpoint url to sent the message to Mule.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletasklanguagepackage",
+ "properties" : [ {
+ "id" : "muletasklanguage",
+ "type" : "String",
+ "title" : "语言",
+ "value" : "",
+ "description" : "A required definition for the language to resolve the payload expression, like juel.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletaskpayloadexpressionpackage",
+ "properties" : [ {
+ "id" : "muletaskpayloadexpression",
+ "type" : "String",
+ "title" : "Payload expression",
+ "value" : "",
+ "description" : "A required definition for the payload of the message sent to Mule.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "muletaskresultvariablepackage",
+ "properties" : [ {
+ "id" : "muletaskresultvariable",
+ "type" : "String",
+ "title" : "Result variable",
+ "value" : "",
+ "description" : "An optional result variable for the payload returned.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "conditionsequenceflowpackage",
+ "properties" : [ {
+ "id" : "conditionsequenceflow",
+ "type" : "Complex",
+ "title" : "流条件",
+ "value" : "",
+ "description" : "The condition of the sequence flow",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "defaultflowpackage",
+ "properties" : [ {
+ "id" : "defaultflow",
+ "type" : "Boolean",
+ "title" : "默认流",
+ "value" : "false",
+ "description" : "Define the sequence flow as default",
+ "popular" : true,
+ "refToView" : "default"
+ } ]
+ }, {
+ "name" : "conditionalflowpackage",
+ "properties" : [ {
+ "id" : "conditionalflow",
+ "type" : "Boolean",
+ "title" : "条件流",
+ "value" : "false",
+ "description" : "Define the sequence flow with a condition",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timercycledefinitionpackage",
+ "properties" : [ {
+ "id" : "timercycledefinition",
+ "type" : "String",
+ "title" : "时间周期(e.g. R3/PT10H)",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 cycle.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timerdatedefinitionpackage",
+ "properties" : [ {
+ "id" : "timerdatedefinition",
+ "type" : "String",
+ "title" : "采用ISO-8601日期时间",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 date definition.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timerdurationdefinitionpackage",
+ "properties" : [ {
+ "id" : "timerdurationdefinition",
+ "type" : "String",
+ "title" : "持续时间(e.g. PT5M)",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 duration.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "timerenddatedefinitionpackage",
+ "properties" : [ {
+ "id" : "timerenddatedefinition",
+ "type" : "String",
+ "title" : "Time End Date in ISO-8601",
+ "value" : "",
+ "description" : "Define the timer with a ISO-8601 duration.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "messagerefpackage",
+ "properties" : [ {
+ "id" : "messageref",
+ "type" : "String",
+ "title" : "消息引用",
+ "value" : "",
+ "description" : "Define the message name.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "signalrefpackage",
+ "properties" : [ {
+ "id" : "signalref",
+ "type" : "String",
+ "title" : "信号引用",
+ "value" : "",
+ "description" : "定义信号名称.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "errorrefpackage",
+ "properties" : [ {
+ "id" : "errorref",
+ "type" : "String",
+ "title" : "错误引用",
+ "value" : "",
+ "description" : "定义错误名称.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "cancelactivitypackage",
+ "properties" : [ {
+ "id" : "cancelactivity",
+ "type" : "Boolean",
+ "title" : "取消任务",
+ "value" : "true",
+ "description" : "Should the activity be cancelled",
+ "popular" : true,
+ "refToView" : [ "frame", "frame2" ]
+ } ]
+ }, {
+ "name" : "initiatorpackage",
+ "properties" : [ {
+ "id" : "initiator",
+ "type" : "String",
+ "title" : "启动器",
+ "value" : "",
+ "description" : "Initiator of the process.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "textpackage",
+ "properties" : [ {
+ "id" : "text",
+ "type" : "String",
+ "title" : "文本",
+ "value" : "",
+ "description" : "The text of the text annotation.",
+ "popular" : true,
+ "refToView" : "text"
+ } ]
+ }, {
+ "name" : "multiinstance_typepackage",
+ "properties" : [ {
+ "id" : "multiinstance_type",
+ "type" : "kisbpm-multiinstance",
+ "title" : "多实例类型",
+ "value" : "None",
+ "description" : "Repeated activity execution (parallel or sequential) can be displayed through different loop types",
+ "popular" : true,
+ "refToView" : "multiinstance"
+ } ]
+ }, {
+ "name" : "multiinstance_cardinalitypackage",
+ "properties" : [ {
+ "id" : "multiinstance_cardinality",
+ "type" : "String",
+ "title" : "基数(多实例)",
+ "value" : "",
+ "description" : "Define the cardinality of multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "multiinstance_collectionpackage",
+ "properties" : [ {
+ "id" : "multiinstance_collection",
+ "type" : "String",
+ "title" : "集合(多实例)",
+ "value" : "",
+ "description" : "Define the collection for the multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "multiinstance_variablepackage",
+ "properties" : [ {
+ "id" : "multiinstance_variable",
+ "type" : "String",
+ "title" : "元素变量(多实例)",
+ "value" : "",
+ "description" : "Define the element variable for the multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "multiinstance_conditionpackage",
+ "properties" : [ {
+ "id" : "multiinstance_condition",
+ "type" : "String",
+ "title" : "完成条件(多实例)",
+ "value" : "",
+ "description" : "Define the completion condition for the multi instance.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "isforcompensationpackage",
+ "properties" : [ {
+ "id" : "isforcompensation",
+ "type" : "Boolean",
+ "title" : "是否补偿",
+ "value" : "false",
+ "description" : "A flag that identifies whether this activity is intended for the purposes of compensation.",
+ "popular" : true,
+ "refToView" : "compensation"
+ } ]
+ }, {
+ "name" : "sequencefloworderpackage",
+ "properties" : [ {
+ "id" : "sequencefloworder",
+ "type" : "Complex",
+ "title" : "Flow order",
+ "value" : "",
+ "description" : "Order outgoing sequence flows.",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "signaldefinitionspackage",
+ "properties" : [ {
+ "id" : "signaldefinitions",
+ "type" : "multiplecomplex",
+ "title" : "信号定义",
+ "value" : "",
+ "description" : "Signal definitions",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "messagedefinitionspackage",
+ "properties" : [ {
+ "id" : "messagedefinitions",
+ "type" : "multiplecomplex",
+ "title" : "消息定义",
+ "value" : "",
+ "description" : "Message definitions",
+ "popular" : true
+ } ]
+ }, {
+ "name" : "istransactionpackage",
+ "properties" : [ {
+ "id" : "istransaction",
+ "type" : "Boolean",
+ "title" : "Is a transaction sub process",
+ "value" : "false",
+ "description" : "A flag that identifies whether this sub process is of type transaction.",
+ "popular" : true,
+ "refToView" : "border"
+ } ]
+ } ],
+ "stencils" : [ {
+ "type" : "node",
+ "id" : "BPMNDiagram",
+ "title" : "BPMN-Diagram",
+ "description" : "A BPMN 2.0 diagram.",
+ "view" : "\n",
+ "icon" : "diagram.png",
+ "groups" : [ "Diagram" ],
+ "mayBeRoot" : true,
+ "hide" : true,
+ "propertyPackages" : [ "process_idpackage", "namepackage", "documentationpackage", "process_authorpackage", "process_versionpackage", "process_namespacepackage", "executionlistenerspackage", "eventlistenerspackage", "signaldefinitionspackage", "messagedefinitionspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ ]
+ }, {
+ "type" : "node",
+ "id" : "StartNoneEvent",
+ "title" : "开始事件",
+ "description" : "一个事件的开始",
+ "view" : "\n",
+ "icon" : "startevent/none.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "initiatorpackage", "formkeydefinitionpackage", "formpropertiespackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartTimerEvent",
+ "title" : "定时开始事件",
+ "description" : "有定时任务触发器的开始事件",
+ "view" : "\n",
+ "icon" : "startevent/timer.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartSignalEvent",
+ "title" : "信号开始事件",
+ "description" : "有信号触发器的开始事件.",
+ "view" : "\n",
+ "icon" : "startevent/signal.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartMessageEvent",
+ "title" : "消息开始事件",
+ "description" : "有消息触发器的开始事件.",
+ "view" : "\n",
+ "icon" : "startevent/message.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "messagerefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "StartErrorEvent",
+ "title" : "错误开始事件",
+ "description" : "捕获抛出BMP错误的开始事件.",
+ "view" : "\n",
+ "icon" : "startevent/error.png",
+ "groups" : [ "开始事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "errorrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "UserTask",
+ "title" : "用户任务",
+ "description" : "由特定用户完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.user.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "usertaskassignmentpackage", "formkeydefinitionpackage", "duedatedefinitionpackage", "prioritydefinitionpackage", "formpropertiespackage", "tasklistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ServiceTask",
+ "title" : "服务任务",
+ "description" : "由服务逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.service.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "servicetaskclasspackage", "servicetaskexpressionpackage", "servicetaskdelegateexpressionpackage", "servicetaskfieldspackage", "servicetaskresultvariablepackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ScriptTask",
+ "title" : "脚本任务",
+ "description" : "由脚本逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.script.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "scriptformatpackage", "scripttextpackage", "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "BusinessRule",
+ "title" : "业务规则任务",
+ "description" : "由规则逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.business.rule.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "ruletask_rulespackage", "ruletask_variables_inputpackage", "ruletask_excludepackage", "ruletask_resultpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ReceiveTask",
+ "title" : "接收任务",
+ "description" : "等待接收信号的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.receive.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ManualTask",
+ "title" : "人工任务",
+ "description" : "无需逻辑自动完成的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.manual.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "MailTask",
+ "title" : "邮件任务",
+ "description" : "发送邮件通知的任务.",
+ "view" : "\n",
+ "icon" : "activity/list/type.send.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "mailtasktopackage", "mailtaskfrompackage", "mailtasksubjectpackage", "mailtaskccpackage", "mailtaskbccpackage", "mailtasktextpackage", "mailtaskhtmlpackage", "mailtaskcharsetpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CamelTask",
+ "title" : "骆驼任务",
+ "description" : "发送消息(骆驼)的任务",
+ "view" : "\n",
+ "icon" : "activity/list/type.camel.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "cameltaskcamelcontextpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "MuleTask",
+ "title" : "Mule任务",
+ "description" : "发送消息(Mule)的任务",
+ "view" : "\n",
+ "icon" : "activity/list/type.mule.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "muletaskendpointurlpackage", "muletasklanguagepackage", "muletaskpayloadexpressionpackage", "muletaskresultvariablepackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "SendTask",
+ "title" : "发送任务",
+ "description" : "An task that sends a message",
+ "view" : "\n",
+ "icon" : "activity/list/type.send.png",
+ "groups" : [ "任务" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "SubProcess",
+ "title" : "子流程",
+ "description" : "子流程范围",
+ "view" : "\n",
+ "icon" : "activity/expanded.subprocess.png",
+ "groups" : [ "结构" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EventSubProcess",
+ "title" : "事件子流程",
+ "description" : "事件周日子流程范围",
+ "view" : "\n",
+ "icon" : "activity/event.subprocess.png",
+ "groups" : [ "结构" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CallActivity",
+ "title" : "调用活动",
+ "description" : "调用活动",
+ "view" : "\n",
+ "icon" : "activity/task.png",
+ "groups" : [ "结构" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "callactivitycalledelementpackage", "callactivityinparameterspackage", "callactivityoutparameterspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ExclusiveGateway",
+ "title" : "互斥网关",
+ "description" : "一个选择的网关",
+ "view" : "\n\n",
+ "icon" : "gateway/exclusive.databased.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ParallelGateway",
+ "title" : "并行网关",
+ "description" : "并行处理的网关",
+ "view" : "\n\n",
+ "icon" : "gateway/parallel.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "InclusiveGateway",
+ "title" : "包容性网关",
+ "description" : "包容性网关",
+ "view" : "\n\n",
+ "icon" : "gateway/inclusive.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EventGateway",
+ "title" : "事件网关",
+ "description" : "事件网关",
+ "view" : "\n\n",
+ "icon" : "gateway/eventbased.png",
+ "groups" : [ "网关" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "sequencefloworderpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryErrorEvent",
+ "title" : "边界错误事件",
+ "description" : "边界错误事件",
+ "view" : "\n",
+ "icon" : "catching/error.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "errorrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryTimerEvent",
+ "title" : "边界定时事件",
+ "description" : "边界定时事件",
+ "view" : "\n",
+ "icon" : "catching/timer.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage", "cancelactivitypackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundarySignalEvent",
+ "title" : "边界信号事件",
+ "description" : "边界信号事件",
+ "view" : "\n",
+ "icon" : "catching/signal.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "signalrefpackage", "cancelactivitypackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryMessageEvent",
+ "title" : "边界消息事件",
+ "description" : "边界消息事件",
+ "view" : "\n",
+ "icon" : "catching/message.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "messagerefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryCancelEvent",
+ "title" : "边界取消事件",
+ "description" : "边界取消事件",
+ "view" : "\n",
+ "icon" : "catching/cancel.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
+ }, {
+ "type" : "node",
+ "id" : "BoundaryCompensationEvent",
+ "title" : "边界补偿事件",
+ "description" : "边界补偿事件",
+ "view" : "\n",
+ "icon" : "catching/compensation.png",
+ "groups" : [ "边界事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CatchTimerEvent",
+ "title" : "中间定时器捕获事件",
+ "description" : "中间定时器捕获事件",
+ "view" : "\n",
+ "icon" : "catching/timer.png",
+ "groups" : [ "中间捕捉事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CatchSignalEvent",
+ "title" : "中间信号捕捉事件",
+ "description" : "中间信号捕捉事件",
+ "view" : "\n",
+ "icon" : "catching/signal.png",
+ "groups" : [ "中间捕捉事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "CatchMessageEvent",
+ "title" : "中间消息捕捉事件",
+ "description" : "中间消息捕捉事件",
+ "view" : "\n",
+ "icon" : "catching/message.png",
+ "groups" : [ "中间捕捉事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "messagerefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ThrowNoneEvent",
+ "title" : "中间无抛出事件",
+ "description" : "中间无抛出事件",
+ "view" : "\n",
+ "icon" : "throwing/none.png",
+ "groups" : [ "中间抛出事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ThrowEventsMorph", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "ThrowSignalEvent",
+ "title" : "中间信号抛出事件",
+ "description" : "中间信号抛出事件",
+ "view" : "\n",
+ "icon" : "throwing/signal.png",
+ "groups" : [ "中间抛出事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ThrowEventsMorph", "sequence_start", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndNoneEvent",
+ "title" : "结束事件",
+ "description" : "结束事件",
+ "view" : "\n",
+ "icon" : "endevent/none.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndErrorEvent",
+ "title" : "结束错误事件",
+ "description" : "结束错误事件",
+ "view" : "\n",
+ "icon" : "endevent/error.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "errorrefpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndCancelEvent",
+ "title" : "结束取消事件",
+ "description" : "结束取消事件",
+ "view" : "\n",
+ "icon" : "endevent/cancel.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "EndTerminateEvent",
+ "title" : "结束终止事件",
+ "description" : "结束终止事件",
+ "view" : "\n",
+ "icon" : "endevent/terminate.png",
+ "groups" : [ "结束事件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "Pool",
+ "title" : "池",
+ "description" : "构建过程定义的池",
+ "view" : "\n",
+ "icon" : "swimlane/pool.png",
+ "groups" : [ "泳道" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.pool"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "process_idpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "canContainArtifacts", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "Lane",
+ "title" : "道",
+ "description" : "建立流程定义的通道",
+ "view" : "\n",
+ "icon" : "swimlane/lane.png",
+ "groups" : [ "泳道" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "PoolChild", "canContainArtifacts", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "SequenceFlow",
+ "title" : "Sequence flow",
+ "description" : "序列流定义了活动的执行顺序",
+ "view" : "\r\n",
+ "icon" : "connector/sequenceflow.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "conditionsequenceflowpackage", "executionlistenerspackage", "defaultflowpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "MessageFlow",
+ "title" : "Message flow",
+ "description" : "消息流连接不同池中的元素",
+ "view" : "\r\n",
+ "icon" : "connector/messageflow.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "Association",
+ "title" : "Association",
+ "description" : "将文本注释与元素关联",
+ "view" : "\r\n",
+ "icon" : "connector/association.undirected.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "edge",
+ "id" : "DataAssociation",
+ "title" : "DataAssociation",
+ "description" : "将数据元素与活动关联",
+ "view" : "\r\n",
+ "icon" : "connector/association.unidirectional.png",
+ "groups" : [ "链接对象" ],
+ "layout" : [ {
+ "type" : "layout.bpmn2_0.sequenceflow"
+ } ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "ConnectingObjectsMorph", "all" ]
+ }, {
+ "type" : "node",
+ "id" : "TextAnnotation",
+ "title" : "文本注释",
+ "description" : "文本注释",
+ "view" : "\n",
+ "icon" : "artifact/text.annotation.png",
+ "groups" : [ "组件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "textpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "all" ]
+ }, {
+ "type" : "node",
+ "id" : "DataStore",
+ "title" : "Data store",
+ "description" : "Reference to a data store.",
+ "view" : "\r\n\r\n",
+ "icon" : "dataobject/data.store.png",
+ "groups" : [ "组件" ],
+ "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
+ "hiddenPropertyPackages" : [ ],
+ "roles" : [ "all" ]
+ } ],
+ "rules" : {
+ "cardinalityRules" : [ {
+ "role" : "Startevents_all",
+ "incomingEdges" : [ {
+ "role" : "SequenceFlow",
+ "maximum" : 0
+ } ]
+ }, {
+ "role" : "Endevents_all",
+ "outgoingEdges" : [ {
+ "role" : "SequenceFlow",
+ "maximum" : 0
+ } ]
+ } ],
+ "connectionRules" : [ {
+ "role" : "SequenceFlow",
+ "connects" : [ {
+ "from" : "sequence_start",
+ "to" : [ "sequence_end" ]
+ } ]
+ }, {
+ "role" : "Association",
+ "connects" : [ {
+ "from" : "sequence_start",
+ "to" : [ "TextAnnotation" ]
+ }, {
+ "from" : "sequence_end",
+ "to" : [ "TextAnnotation" ]
+ }, {
+ "from" : "TextAnnotation",
+ "to" : [ "sequence_end" ]
+ }, {
+ "from" : "BoundaryCompensationEvent",
+ "to" : [ "sequence_end" ]
+ }, {
+ "from" : "TextAnnotation",
+ "to" : [ "sequence_start" ]
+ }, {
+ "from" : "BoundaryCompensationEvent",
+ "to" : [ "sequence_start" ]
+ } ]
+ }, {
+ "role" : "DataAssociation",
+ "connects" : [ {
+ "from" : "sequence_start",
+ "to" : [ "DataStore" ]
+ }, {
+ "from" : "sequence_end",
+ "to" : [ "DataStore" ]
+ }, {
+ "from" : "DataStore",
+ "to" : [ "sequence_end" ]
+ }, {
+ "from" : "DataStore",
+ "to" : [ "sequence_start" ]
+ } ]
+ }, {
+ "role" : "IntermediateEventOnActivityBoundary",
+ "connects" : [ {
+ "from" : "Activity",
+ "to" : [ "IntermediateEventOnActivityBoundary" ]
+ } ]
+ } ],
+ "containmentRules" : [ {
+ "role" : "BPMNDiagram",
+ "contains" : [ "all" ]
+ }, {
+ "role" : "SubProcess",
+ "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "EventSubProcess", "TextAnnotation", "DataStore" ]
+ }, {
+ "role" : "EventSubProcess",
+ "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "TextAnnotation", "DataStore" ]
+ }, {
+ "role" : "Pool",
+ "contains" : [ "Lane" ]
+ }, {
+ "role" : "Lane",
+ "contains" : [ "sequence_start", "sequence_end", "EventSubProcess", "TextAnnotation", "DataStore" ]
+ } ],
+ "morphingRules" : [ {
+ "role" : "ActivitiesMorph",
+ "baseMorphs" : [ "UserTask" ],
+ "preserveBounds" : true
+ }, {
+ "role" : "GatewaysMorph",
+ "baseMorphs" : [ "ExclusiveGateway" ]
+ }, {
+ "role" : "StartEventsMorph",
+ "baseMorphs" : [ "StartNoneEvent" ]
+ }, {
+ "role" : "EndEventsMorph",
+ "baseMorphs" : [ "StartNoneEvent" ]
+ }, {
+ "role" : "CatchEventsMorph",
+ "baseMorphs" : [ "CatchTimerEvent" ]
+ }, {
+ "role" : "ThrowEventsMorph",
+ "baseMorphs" : [ "ThrowNoneEvent" ]
+ }, {
+ "role" : "BoundaryEventsMorph",
+ "baseMorphs" : [ "ThrowNoneEvent" ]
+ }, {
+ "role" : "BoundaryCompensationEvent",
+ "baseMorphs" : [ "BoundaryCompensationEvent" ]
+ }, {
+ "role" : "TextAnnotation",
+ "baseMorphs" : [ "TextAnnotation" ]
+ }, {
+ "role" : "DataStore",
+ "baseMorphs" : [ "DataStore" ]
+ } ]
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/.classpath b/Rk-progect/ruoyi-admin/.classpath
new file mode 100644
index 00000000..cd04a794
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/.classpath
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/.project b/Rk-progect/ruoyi-admin/.project
new file mode 100644
index 00000000..a42099c0
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/.project
@@ -0,0 +1,23 @@
+
+
+ ruoyi-admin
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/Rk-progect/ruoyi-admin/.settings/org.eclipse.core.resources.prefs b/Rk-progect/ruoyi-admin/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..abdea9ac
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/=UTF-8
diff --git a/Rk-progect/ruoyi-admin/.settings/org.eclipse.jdt.core.prefs b/Rk-progect/ruoyi-admin/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..2f5cc74c
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/Rk-progect/ruoyi-admin/.settings/org.eclipse.m2e.core.prefs b/Rk-progect/ruoyi-admin/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000..f897a7f1
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/Rk-progect/ruoyi-admin/pom.xml b/Rk-progect/ruoyi-admin/pom.xml
new file mode 100644
index 00000000..417a590e
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/pom.xml
@@ -0,0 +1,158 @@
+
+
+
+ RK-project
+ com.ruoyi
+ 3.1.0
+
+ 4.0.0
+ war
+ ruoyi-admin
+
+
+ web服务入口
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+
+ io.springfox
+ springfox-swagger2
+
+
+
+
+ io.swagger
+ swagger-annotations
+ 1.5.21
+
+
+
+ io.swagger
+ swagger-models
+ 1.5.21
+
+
+
+
+ io.springfox
+ springfox-swagger-ui
+
+
+
+
+
+
+ kingbase8
+ kingbase8
+ 8.2.0
+ system
+ ${project.basedir}/src/main/resources/lib/kingbase8-8.2.0.jar
+
+
+
+ com.ruoyi
+ ruoyi-framework
+
+
+
+
+
+
+
+ com.ruoyi
+ ruoyi-generator
+
+
+
+
+
+
+ com.ruoyi
+ ruoyi-project
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.1.1.RELEASE
+
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.1.0
+
+
+
+
+ ${project.basedir}/src/main/resources/lib
+
+ WEB-INF/lib
+
+
+ false
+ ${project.artifactId}
+
+
+
+ ${project.artifactId}
+
+
+
diff --git a/Rk-progect/ruoyi-admin/ruoyi-admin.iml b/Rk-progect/ruoyi-admin/ruoyi-admin.iml
new file mode 100644
index 00000000..98a46af7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/ruoyi-admin.iml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
new file mode 100644
index 00000000..222c1255
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -0,0 +1,28 @@
+package com.ruoyi;
+
+//import org.activiti.spring.boot.SecurityAutoConfiguration;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+/**
+ * 启动程序
+ *
+ * @author ruoyi
+ */
+//@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class })
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})
+public class RuoYiApplication extends SpringBootServletInitializer
+{
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(RuoYiApplication.class);
+ }
+ public static void main(String[] args)
+ {
+ // System.setProperty("spring.devtools.restart.enabled", "false");
+ SpringApplication.run(RuoYiApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ 项目启动成功 ლ(´ڡ`ლ)゙ \n" );
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
new file mode 100644
index 00000000..6de67dc7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
@@ -0,0 +1,18 @@
+package com.ruoyi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ *
+ * @author ruoyi
+ */
+public class RuoYiServletInitializer extends SpringBootServletInitializer
+{
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+ {
+ return application.sources(RuoYiApplication.class);
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
new file mode 100644
index 00000000..8cafcef1
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
@@ -0,0 +1,86 @@
+package com.ruoyi.web.controller.common;
+
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.FastByteArrayOutputStream;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.google.code.kaptcha.Producer;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.sign.Base64;
+import com.ruoyi.common.utils.uuid.IdUtils;
+
+/**
+ * 验证码操作处理
+ *
+ * @author ruoyi
+ */
+@RestController
+public class CaptchaController
+{
+ @Resource(name = "captchaProducer")
+ private Producer captchaProducer;
+
+ @Resource(name = "captchaProducerMath")
+ private Producer captchaProducerMath;
+
+ @Autowired
+ private RedisCache redisCache;
+
+ // 验证码类型
+ @Value("${ruoyi.captchaType}")
+ private String captchaType;
+
+ /**
+ * 生成验证码
+ */
+ @GetMapping("/captchaImage")
+ public AjaxResult getCode(HttpServletResponse response) throws IOException
+ {
+ // 保存验证码信息
+ String uuid = IdUtils.simpleUUID();
+ String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+
+ String capStr = null, code = null;
+ BufferedImage image = null;
+
+ // 生成验证码
+ if ("math".equals(captchaType))
+ {
+ String capText = captchaProducerMath.createText();
+ capStr = capText.substring(0, capText.lastIndexOf("@"));
+ code = capText.substring(capText.lastIndexOf("@") + 1);
+ image = captchaProducerMath.createImage(capStr);
+ }
+ else if ("char".equals(captchaType))
+ {
+ capStr = code = captchaProducer.createText();
+ image = captchaProducer.createImage(capStr);
+ }
+
+ redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+ // 转换流信息写出
+ FastByteArrayOutputStream os = new FastByteArrayOutputStream();
+ try
+ {
+ ImageIO.write(image, "jpg", os);
+ }
+ catch (IOException e)
+ {
+ return AjaxResult.error(e.getMessage());
+ }
+
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("uuid", uuid);
+ ajax.put("img", Base64.encode(os.toByteArray()));
+ return ajax;
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
new file mode 100644
index 00000000..5d192ba7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -0,0 +1,109 @@
+package com.ruoyi.web.controller.common;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.framework.config.ServerConfig;
+
+/**
+ * 通用请求处理
+ *
+ * @author ruoyi
+ */
+@RestController
+public class CommonController
+{
+ private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+ @Autowired
+ private ServerConfig serverConfig;
+
+ /**
+ * 通用下载请求
+ *
+ * @param fileName 文件名称
+ * @param delete 是否删除
+ */
+ @GetMapping("common/download")
+ public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
+ {
+ try
+ {
+ if (!FileUtils.isValidFilename(fileName))
+ {
+ throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
+ }
+ String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+ String filePath = RuoYiConfig.getDownloadPath() + fileName;
+
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("multipart/form-data");
+ response.setHeader("Content-Disposition",
+ "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName));
+ FileUtils.writeBytes(filePath, response.getOutputStream());
+ if (delete)
+ {
+ FileUtils.deleteFile(filePath);
+ }
+ }
+ catch (Exception e)
+ {
+ log.error("下载文件失败", e);
+ }
+ }
+
+ /**
+ * 通用上传请求
+ */
+ @PostMapping("/common/upload")
+ public AjaxResult uploadFile(MultipartFile file) throws Exception
+ {
+ try
+ {
+ // 上传文件路径
+ String filePath = RuoYiConfig.getUploadPath();
+ // 上传并返回新文件名称
+ String fileName = FileUploadUtils.upload(filePath, file);
+ String url = serverConfig.getUrl() + fileName;
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("fileName", fileName);
+ ajax.put("url", url);
+ return ajax;
+ }
+ catch (Exception e)
+ {
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 本地资源通用下载
+ */
+ @GetMapping("/common/download/resource")
+ public void resourceDownload(String name, HttpServletRequest request, HttpServletResponse response) throws Exception
+ {
+ // 本地资源路径
+ String localPath = RuoYiConfig.getProfile();
+ // 数据库资源地址
+ String downloadPath = localPath + StringUtils.substringAfter(name, Constants.RESOURCE_PREFIX);
+ // 下载名称
+ String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("multipart/form-data");
+ response.setHeader("Content-Disposition",
+ "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName));
+ FileUtils.writeBytes(downloadPath, response.getOutputStream());
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
new file mode 100644
index 00000000..e784e195
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
@@ -0,0 +1,28 @@
+package com.ruoyi.web.controller.monitor;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.Server;
+
+/**
+ * 服务器监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/server")
+public class ServerController extends BaseController
+{
+ @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+ @GetMapping()
+ public AjaxResult getInfo() throws Exception
+ {
+ Server server = new Server();
+ server.copyTo();
+ return AjaxResult.success(server);
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
new file mode 100644
index 00000000..339f2428
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
@@ -0,0 +1,67 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.service.ISysLogininforService;
+
+/**
+ * 系统访问记录
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/logininfor")
+public class SysLogininforController extends BaseController
+{
+ @Autowired
+ private ISysLogininforService logininforService;
+
+ @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysLogininfor logininfor)
+ {
+ startPage();
+ List list = logininforService.selectLogininforList(logininfor);
+ return getDataTable(list);
+ }
+
+ @Log(title = "登录日志", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysLogininfor logininfor)
+ {
+ List list = logininforService.selectLogininforList(logininfor);
+ ExcelUtil util = new ExcelUtil(SysLogininfor.class);
+ return util.exportExcel(list, "登录日志");
+ }
+
+ @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+ @Log(title = "登录日志", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{infoIds}")
+ public AjaxResult remove(@PathVariable Long[] infoIds)
+ {
+ return toAjax(logininforService.deleteLogininforByIds(infoIds));
+ }
+
+ @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+ @Log(title = "登录日志", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/clean")
+ public AjaxResult clean()
+ {
+ logininforService.cleanLogininfor();
+ return AjaxResult.success();
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
new file mode 100644
index 00000000..0332a14a
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.service.ISysOperLogService;
+
+/**
+ * 操作日志记录
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/operlog")
+public class SysOperlogController extends BaseController
+{
+ @Autowired
+ private ISysOperLogService operLogService;
+
+ @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysOperLog operLog)
+ {
+ startPage();
+ List list = operLogService.selectOperLogList(operLog);
+ return getDataTable(list);
+ }
+
+ @Log(title = "操作日志", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysOperLog operLog)
+ {
+ List list = operLogService.selectOperLogList(operLog);
+ ExcelUtil util = new ExcelUtil(SysOperLog.class);
+ return util.exportExcel(list, "操作日志");
+ }
+
+ @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+ @DeleteMapping("/{operIds}")
+ public AjaxResult remove(@PathVariable Long[] operIds)
+ {
+ return toAjax(operLogService.deleteOperLogByIds(operIds));
+ }
+
+ @Log(title = "操作日志", businessType = BusinessType.CLEAN)
+ @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+ @DeleteMapping("/clean")
+ public AjaxResult clean()
+ {
+ operLogService.cleanOperLog();
+ return AjaxResult.success();
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
new file mode 100644
index 00000000..9b157ea7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
@@ -0,0 +1,92 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.ISysUserOnlineService;
+
+/**
+ * 在线用户监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/online")
+public class SysUserOnlineController extends BaseController
+{
+ @Autowired
+ private ISysUserOnlineService userOnlineService;
+
+ @Autowired
+ private RedisCache redisCache;
+
+ @PreAuthorize("@ss.hasPermi('monitor:online:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(String ipaddr, String userName)
+ {
+ Collection keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*");
+ List userOnlineList = new ArrayList();
+ for (String key : keys)
+ {
+ LoginUser user = redisCache.getCacheObject(key);
+ if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
+ {
+ if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
+ {
+ userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
+ }
+ }
+ else if (StringUtils.isNotEmpty(ipaddr))
+ {
+ if (StringUtils.equals(ipaddr, user.getIpaddr()))
+ {
+ userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
+ }
+ }
+ else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
+ {
+ if (StringUtils.equals(userName, user.getUsername()))
+ {
+ userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
+ }
+ }
+ else
+ {
+ userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
+ }
+ }
+ Collections.reverse(userOnlineList);
+ userOnlineList.removeAll(Collections.singleton(null));
+ return getDataTable(userOnlineList);
+ }
+
+ /**
+ * 强退用户
+ */
+ @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
+ @Log(title = "在线用户", businessType = BusinessType.FORCE)
+ @DeleteMapping("/{tokenId}")
+ public AjaxResult forceLogout(@PathVariable String tokenId)
+ {
+ redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
+ return AjaxResult.success();
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
new file mode 100644
index 00000000..fb39a336
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
@@ -0,0 +1,135 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 参数配置 信息操作处理
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/config")
+public class SysConfigController extends BaseController
+{
+ @Autowired
+ private ISysConfigService configService;
+
+ /**
+ * 获取参数配置列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:config:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysConfig config)
+ {
+ startPage();
+ List list = configService.selectConfigList(config);
+ return getDataTable(list);
+ }
+
+ @Log(title = "参数管理", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('system:config:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysConfig config)
+ {
+ List list = configService.selectConfigList(config);
+ ExcelUtil util = new ExcelUtil(SysConfig.class);
+ return util.exportExcel(list, "参数数据");
+ }
+
+ /**
+ * 根据参数编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:config:query')")
+ @GetMapping(value = "/{configId}")
+ public AjaxResult getInfo(@PathVariable Long configId)
+ {
+ return AjaxResult.success(configService.selectConfigById(configId));
+ }
+
+ /**
+ * 根据参数键名查询参数值
+ */
+ @GetMapping(value = "/configKey/{configKey}")
+ public AjaxResult getConfigKey(@PathVariable String configKey)
+ {
+ return AjaxResult.success(configService.selectConfigByKey(configKey));
+ }
+
+ /**
+ * 新增参数配置
+ */
+ @PreAuthorize("@ss.hasPermi('system:config:add')")
+ @Log(title = "参数管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ @RepeatSubmit
+ public AjaxResult add(@Validated @RequestBody SysConfig config)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
+ {
+ return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
+ }
+ config.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(configService.insertConfig(config));
+ }
+
+ /**
+ * 修改参数配置
+ */
+ @PreAuthorize("@ss.hasPermi('system:config:edit')")
+ @Log(title = "参数管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysConfig config)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
+ {
+ return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
+ }
+ config.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(configService.updateConfig(config));
+ }
+
+ /**
+ * 删除参数配置
+ */
+ @PreAuthorize("@ss.hasPermi('system:config:remove')")
+ @Log(title = "参数管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{configIds}")
+ public AjaxResult remove(@PathVariable Long[] configIds)
+ {
+ return toAjax(configService.deleteConfigByIds(configIds));
+ }
+
+ /**
+ * 清空缓存
+ */
+ @PreAuthorize("@ss.hasPermi('system:config:remove')")
+ @Log(title = "参数管理", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/clearCache")
+ public AjaxResult clearCache()
+ {
+ configService.clearCache();
+ return AjaxResult.success();
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
new file mode 100644
index 00000000..480816ab
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
@@ -0,0 +1,163 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysDeptService;
+
+/**
+ * 部门信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dept")
+public class SysDeptController extends BaseController
+{
+ @Autowired
+ private ISysDeptService deptService;
+
+ /**
+ * 获取部门列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:dept:list')")
+ @GetMapping("/list")
+ public AjaxResult list(SysDept dept)
+ {
+ List depts = deptService.selectDeptList(dept);
+ return AjaxResult.success(depts);
+ }
+
+ /**
+ * 查询部门列表(排除节点)
+ */
+ @PreAuthorize("@ss.hasPermi('system:dept:list')")
+ @GetMapping("/list/exclude/{deptId}")
+ public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
+ {
+ List depts = deptService.selectDeptList(new SysDept());
+ Iterator it = depts.iterator();
+ while (it.hasNext())
+ {
+ SysDept d = (SysDept) it.next();
+ if (d.getDeptId().intValue() == deptId
+ || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""))
+ {
+ it.remove();
+ }
+ }
+ return AjaxResult.success(depts);
+ }
+
+ /**
+ * 根据部门编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:dept:query')")
+ @GetMapping(value = "/{deptId}")
+ public AjaxResult getInfo(@PathVariable Long deptId)
+ {
+ return AjaxResult.success(deptService.selectDeptById(deptId));
+ }
+
+ /**
+ * 获取部门下拉树列表
+ */
+ @GetMapping("/treeselect")
+ public AjaxResult treeselect(SysDept dept)
+ {
+ List depts = deptService.selectDeptList(dept);
+ return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
+ }
+
+ /**
+ * 加载对应角色部门列表树
+ */
+ @GetMapping(value = "/roleDeptTreeselect/{roleId}")
+ public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId)
+ {
+ List depts = deptService.selectDeptList(new SysDept());
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
+ ajax.put("depts", deptService.buildDeptTreeSelect(depts));
+ return ajax;
+ }
+
+ /**
+ * 新增部门
+ */
+ @PreAuthorize("@ss.hasPermi('system:dept:add')")
+ @Log(title = "部门管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysDept dept)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
+ {
+ return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+ }
+ dept.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(deptService.insertDept(dept));
+ }
+
+ /**
+ * 修改部门
+ */
+ @PreAuthorize("@ss.hasPermi('system:dept:edit')")
+ @Log(title = "部门管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysDept dept)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
+ {
+ return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+ }
+ else if (dept.getParentId().equals(dept.getDeptId()))
+ {
+ return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
+ }
+ else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
+ && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0)
+ {
+ return AjaxResult.error("该部门包含未停用的子部门!");
+ }
+ dept.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(deptService.updateDept(dept));
+ }
+
+ /**
+ * 删除部门
+ */
+ @PreAuthorize("@ss.hasPermi('system:dept:remove')")
+ @Log(title = "部门管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{deptId}")
+ public AjaxResult remove(@PathVariable Long deptId)
+ {
+ if (deptService.hasChildByDeptId(deptId))
+ {
+ return AjaxResult.error("存在下级部门,不允许删除");
+ }
+ if (deptService.checkDeptExistUser(deptId))
+ {
+ return AjaxResult.error("部门存在用户,不允许删除");
+ }
+ return toAjax(deptService.deleteDeptById(deptId));
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
new file mode 100644
index 00000000..0bf2bc33
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
@@ -0,0 +1,113 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.system.service.ISysDictTypeService;
+
+/**
+ * 数据字典信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/data")
+public class SysDictDataController extends BaseController
+{
+ @Autowired
+ private ISysDictDataService dictDataService;
+
+ @Autowired
+ private ISysDictTypeService dictTypeService;
+
+ @PreAuthorize("@ss.hasPermi('system:dict:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysDictData dictData)
+ {
+ startPage();
+ List list = dictDataService.selectDictDataList(dictData);
+ return getDataTable(list);
+ }
+
+ @Log(title = "字典数据", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('system:dict:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysDictData dictData)
+ {
+ List list = dictDataService.selectDictDataList(dictData);
+ ExcelUtil util = new ExcelUtil(SysDictData.class);
+ return util.exportExcel(list, "字典数据");
+ }
+
+ /**
+ * 查询字典数据详细
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:query')")
+ @GetMapping(value = "/{dictCode}")
+ public AjaxResult getInfo(@PathVariable Long dictCode)
+ {
+ return AjaxResult.success(dictDataService.selectDictDataById(dictCode));
+ }
+
+ /**
+ * 根据字典类型查询字典数据信息
+ */
+ @GetMapping(value = "/type/{dictType}")
+ public AjaxResult dictType(@PathVariable String dictType)
+ {
+ return AjaxResult.success(dictTypeService.selectDictDataByType(dictType));
+ }
+
+ /**
+ * 新增字典类型
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:add')")
+ @Log(title = "字典数据", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysDictData dict)
+ {
+ dict.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(dictDataService.insertDictData(dict));
+ }
+
+ /**
+ * 修改保存字典类型
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+ @Log(title = "字典数据", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysDictData dict)
+ {
+ dict.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(dictDataService.updateDictData(dict));
+ }
+
+ /**
+ * 删除字典类型
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+ @Log(title = "字典类型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{dictCodes}")
+ public AjaxResult remove(@PathVariable Long[] dictCodes)
+ {
+ return toAjax(dictDataService.deleteDictDataByIds(dictCodes));
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
new file mode 100644
index 00000000..a4e0b2b1
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
@@ -0,0 +1,131 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDictTypeService;
+
+/**
+ * 数据字典信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/type")
+public class SysDictTypeController extends BaseController
+{
+ @Autowired
+ private ISysDictTypeService dictTypeService;
+
+ @PreAuthorize("@ss.hasPermi('system:dict:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysDictType dictType)
+ {
+ startPage();
+ List list = dictTypeService.selectDictTypeList(dictType);
+ return getDataTable(list);
+ }
+
+ @Log(title = "字典类型", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('system:dict:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysDictType dictType)
+ {
+ List list = dictTypeService.selectDictTypeList(dictType);
+ ExcelUtil util = new ExcelUtil(SysDictType.class);
+ return util.exportExcel(list, "字典类型");
+ }
+
+ /**
+ * 查询字典类型详细
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:query')")
+ @GetMapping(value = "/{dictId}")
+ public AjaxResult getInfo(@PathVariable Long dictId)
+ {
+ return AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
+ }
+
+ /**
+ * 新增字典类型
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:add')")
+ @Log(title = "字典类型", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysDictType dict)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+ {
+ return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
+ }
+ dict.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(dictTypeService.insertDictType(dict));
+ }
+
+ /**
+ * 修改字典类型
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+ @Log(title = "字典类型", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysDictType dict)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+ {
+ return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
+ }
+ dict.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(dictTypeService.updateDictType(dict));
+ }
+
+ /**
+ * 删除字典类型
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+ @Log(title = "字典类型", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{dictIds}")
+ public AjaxResult remove(@PathVariable Long[] dictIds)
+ {
+ return toAjax(dictTypeService.deleteDictTypeByIds(dictIds));
+ }
+
+ /**
+ * 清空缓存
+ */
+ @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+ @Log(title = "字典类型", businessType = BusinessType.CLEAN)
+ @DeleteMapping("/clearCache")
+ public AjaxResult clearCache()
+ {
+ dictTypeService.clearCache();
+ return AjaxResult.success();
+ }
+
+ /**
+ * 获取字典选择框列表
+ */
+ @GetMapping("/optionselect")
+ public AjaxResult optionselect()
+ {
+ List dictTypes = dictTypeService.selectDictTypeAll();
+ return AjaxResult.success(dictTypes);
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
new file mode 100644
index 00000000..997c5821
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -0,0 +1,94 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginBody;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysMenuService;
+
+/**
+ * 登录验证
+ *
+ * @author ruoyi
+ */
+@RestController
+public class SysLoginController
+{
+ @Autowired
+ private SysLoginService loginService;
+
+ @Autowired
+ private ISysMenuService menuService;
+
+ @Autowired
+ private SysPermissionService permissionService;
+
+ @Autowired
+ private TokenService tokenService;
+
+ /**
+ * 登录方法
+ *
+ * @param loginBody 登录信息
+ * @return 结果
+ */
+ @PostMapping("/login")
+ public AjaxResult login(@RequestBody LoginBody loginBody)
+ {
+ AjaxResult ajax = AjaxResult.success();
+ // 生成令牌
+ String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+ loginBody.getUuid());
+ ajax.put(Constants.TOKEN, token);
+ return ajax;
+ }
+
+ /**
+ * 获取用户信息
+ *
+ * @return 用户信息
+ */
+ @GetMapping("getInfo")
+ public AjaxResult getInfo()
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ SysUser user = loginUser.getUser();
+ // 角色集合
+ Set roles = permissionService.getRolePermission(user);
+ // 权限集合
+ Set permissions = permissionService.getMenuPermission(user);
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("user", user);
+ ajax.put("roles", roles);
+ ajax.put("permissions", permissions);
+ return ajax;
+ }
+
+ /**
+ * 获取路由信息
+ *
+ * @return 路由信息
+ */
+ @GetMapping("getRouters")
+ public AjaxResult getRouters()
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ // 用户信息
+ SysUser user = loginUser.getUser();
+ List menus = menuService.selectMenuTreeByUserId(user.getUserId());
+ return AjaxResult.success(menuService.buildMenus(menus));
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
new file mode 100644
index 00000000..5494e915
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
@@ -0,0 +1,157 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysMenuService;
+
+/**
+ * 菜单信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/menu")
+public class SysMenuController extends BaseController
+{
+ @Autowired
+ private ISysMenuService menuService;
+
+ @Autowired
+ private TokenService tokenService;
+
+ /**
+ * 获取菜单列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:list')")
+ @GetMapping("/list")
+ public AjaxResult list(SysMenu menu)
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ Long userId = loginUser.getUser().getUserId();
+ List menus = menuService.selectMenuList(menu, userId);
+ return AjaxResult.success(menus);
+ }
+
+ /**
+ * 根据菜单编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:query')")
+ @GetMapping(value = "/{menuId}")
+ public AjaxResult getInfo(@PathVariable Long menuId)
+ {
+ return AjaxResult.success(menuService.selectMenuById(menuId));
+ }
+
+ /**
+ * 获取菜单下拉树列表
+ */
+ @GetMapping("/treeselect")
+ public AjaxResult treeselect(SysMenu menu)
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ Long userId = loginUser.getUser().getUserId();
+ List menus = menuService.selectMenuList(menu, userId);
+ return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
+ }
+
+ /**
+ * 加载对应角色菜单列表树
+ */
+ @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+ public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ List menus = menuService.selectMenuList(loginUser.getUser().getUserId());
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
+ ajax.put("menus", menuService.buildMenuTreeSelect(menus));
+ return ajax;
+ }
+
+ /**
+ * 新增菜单
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:add')")
+ @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysMenu menu)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+ {
+ return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ }
+ else if (UserConstants.YES_FRAME.equals(menu.getIsFrame())
+ && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
+ {
+ return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ }
+ menu.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(menuService.insertMenu(menu));
+ }
+
+ /**
+ * 修改菜单
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:edit')")
+ @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysMenu menu)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+ {
+ return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ }
+ else if (UserConstants.YES_FRAME.equals(menu.getIsFrame())
+ && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
+ {
+ return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ }
+ else if (menu.getMenuId().equals(menu.getParentId()))
+ {
+ return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+ }
+ menu.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(menuService.updateMenu(menu));
+ }
+
+ /**
+ * 删除菜单
+ */
+ @PreAuthorize("@ss.hasPermi('system:menu:remove')")
+ @Log(title = "菜单管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{menuId}")
+ public AjaxResult remove(@PathVariable("menuId") Long menuId)
+ {
+ if (menuService.hasChildByMenuId(menuId))
+ {
+ return AjaxResult.error("存在子菜单,不允许删除");
+ }
+ if (menuService.checkMenuExistRole(menuId))
+ {
+ return AjaxResult.error("菜单已分配,不允许删除");
+ }
+ return toAjax(menuService.deleteMenuById(menuId));
+ }
+}
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
new file mode 100644
index 00000000..224e594d
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
@@ -0,0 +1,92 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.domain.SysNotice;
+import com.ruoyi.system.service.ISysNoticeService;
+
+/**
+ * 公告 信息操作处理
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/notice")
+public class SysNoticeController extends BaseController
+{
+ @Autowired
+ private ISysNoticeService noticeService;
+
+ /**
+ * 获取通知公告列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:notice:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysNotice notice)
+ {
+ startPage();
+ List list = noticeService.selectNoticeList(notice);
+ return getDataTable(list);
+ }
+
+ /**
+ * 根据通知公告编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:notice:query')")
+ @GetMapping(value = "/{noticeId}")
+ public AjaxResult getInfo(@PathVariable Long noticeId)
+ {
+ return AjaxResult.success(noticeService.selectNoticeById(noticeId));
+ }
+
+ /**
+ * 新增通知公告
+ */
+ @PreAuthorize("@ss.hasPermi('system:notice:add')")
+ @Log(title = "通知公告", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysNotice notice)
+ {
+ notice.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(noticeService.insertNotice(notice));
+ }
+
+ /**
+ * 修改通知公告
+ */
+ @PreAuthorize("@ss.hasPermi('system:notice:edit')")
+ @Log(title = "通知公告", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysNotice notice)
+ {
+ notice.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(noticeService.updateNotice(notice));
+ }
+
+ /**
+ * 删除通知公告
+ */
+ @PreAuthorize("@ss.hasPermi('system:notice:remove')")
+ @Log(title = "通知公告", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{noticeIds}")
+ public AjaxResult remove(@PathVariable Long[] noticeIds)
+ {
+ return toAjax(noticeService.deleteNoticeByIds(noticeIds));
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
new file mode 100644
index 00000000..0c73ea8d
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
@@ -0,0 +1,130 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.service.ISysPostService;
+
+/**
+ * 岗位信息操作处理
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/post")
+public class SysPostController extends BaseController
+{
+ @Autowired
+ private ISysPostService postService;
+
+ /**
+ * 获取岗位列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:post:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysPost post)
+ {
+ startPage();
+ List list = postService.selectPostList(post);
+ return getDataTable(list);
+ }
+
+ @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('system:post:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysPost post)
+ {
+ List list = postService.selectPostList(post);
+ ExcelUtil util = new ExcelUtil(SysPost.class);
+ return util.exportExcel(list, "岗位数据");
+ }
+
+ /**
+ * 根据岗位编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:post:query')")
+ @GetMapping(value = "/{postId}")
+ public AjaxResult getInfo(@PathVariable Long postId)
+ {
+ return AjaxResult.success(postService.selectPostById(postId));
+ }
+
+ /**
+ * 新增岗位
+ */
+ @PreAuthorize("@ss.hasPermi('system:post:add')")
+ @Log(title = "岗位管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysPost post)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
+ {
+ return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
+ {
+ return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+ }
+ post.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(postService.insertPost(post));
+ }
+
+ /**
+ * 修改岗位
+ */
+ @PreAuthorize("@ss.hasPermi('system:post:edit')")
+ @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysPost post)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
+ {
+ return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
+ {
+ return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+ }
+ post.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(postService.updatePost(post));
+ }
+
+ /**
+ * 删除岗位
+ */
+ @PreAuthorize("@ss.hasPermi('system:post:remove')")
+ @Log(title = "岗位管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{postIds}")
+ public AjaxResult remove(@PathVariable Long[] postIds)
+ {
+ return toAjax(postService.deletePostByIds(postIds));
+ }
+
+ /**
+ * 获取岗位选择框列表
+ */
+ @GetMapping("/optionselect")
+ public AjaxResult optionselect()
+ {
+ List posts = postService.selectPostAll();
+ return AjaxResult.success(posts);
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
new file mode 100644
index 00000000..c2f3f227
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
@@ -0,0 +1,127 @@
+package com.ruoyi.web.controller.system;
+
+import java.io.IOException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 个人信息 业务处理
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController
+{
+ @Autowired
+ private ISysUserService userService;
+
+ @Autowired
+ private TokenService tokenService;
+
+ /**
+ * 个人信息
+ */
+ @GetMapping
+ public AjaxResult profile()
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ SysUser user = loginUser.getUser();
+ AjaxResult ajax = AjaxResult.success(user);
+ ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
+ ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
+ return ajax;
+ }
+
+ /**
+ * 修改用户
+ */
+ @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult updateProfile(@RequestBody SysUser user)
+ {
+ if (userService.updateUserProfile(user) > 0)
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ // 更新缓存用户信息
+ loginUser.getUser().setNickName(user.getNickName());
+ loginUser.getUser().setPhonenumber(user.getPhonenumber());
+ loginUser.getUser().setEmail(user.getEmail());
+ loginUser.getUser().setSex(user.getSex());
+ tokenService.setLoginUser(loginUser);
+ return AjaxResult.success();
+ }
+ return AjaxResult.error("修改个人信息异常,请联系管理员");
+ }
+
+ /**
+ * 重置密码
+ */
+ @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+ @PutMapping("/updatePwd")
+ public AjaxResult updatePwd(String oldPassword, String newPassword)
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ String userName = loginUser.getUsername();
+ String password = loginUser.getPassword();
+ if (!SecurityUtils.matchesPassword(oldPassword, password))
+ {
+ return AjaxResult.error("修改密码失败,旧密码错误");
+ }
+ if (SecurityUtils.matchesPassword(newPassword, password))
+ {
+ return AjaxResult.error("新密码不能与旧密码相同");
+ }
+ if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
+ {
+ // 更新缓存用户密码
+ loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+ tokenService.setLoginUser(loginUser);
+ return AjaxResult.success();
+ }
+ return AjaxResult.error("修改密码异常,请联系管理员");
+ }
+
+ /**
+ * 头像上传
+ */
+ @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+ @PostMapping("/avatar")
+ public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException
+ {
+ if (!file.isEmpty())
+ {
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
+ if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
+ {
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("imgUrl", avatar);
+ // 更新缓存用户头像
+ loginUser.getUser().setAvatar(avatar);
+ tokenService.setLoginUser(loginUser);
+ return ajax;
+ }
+ }
+ return AjaxResult.error("上传图片异常,请联系管理员");
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
new file mode 100644
index 00000000..ca581e7c
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -0,0 +1,182 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 角色信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/role")
+public class SysRoleController extends BaseController
+{
+ @Autowired
+ private ISysRoleService roleService;
+
+ @Autowired
+ private TokenService tokenService;
+
+ @Autowired
+ private SysPermissionService permissionService;
+
+ @Autowired
+ private ISysUserService userService;
+
+ @PreAuthorize("@ss.hasPermi('system:role:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysRole role)
+ {
+ startPage();
+ List list = roleService.selectRoleList(role);
+ return getDataTable(list);
+ }
+
+ @Log(title = "角色管理", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('system:role:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysRole role)
+ {
+ List list = roleService.selectRoleList(role);
+ ExcelUtil util = new ExcelUtil(SysRole.class);
+ return util.exportExcel(list, "角色数据");
+ }
+
+ /**
+ * 根据角色编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:query')")
+ @GetMapping(value = "/{roleId}")
+ public AjaxResult getInfo(@PathVariable Long roleId)
+ {
+ return AjaxResult.success(roleService.selectRoleById(roleId));
+ }
+
+ /**
+ * 新增角色
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:add')")
+ @Log(title = "角色管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysRole role)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
+ {
+ return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
+ {
+ return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+ }
+ role.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(roleService.insertRole(role));
+
+ }
+
+ /**
+ * 修改保存角色
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:edit')")
+ @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysRole role)
+ {
+ roleService.checkRoleAllowed(role);
+ if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
+ {
+ return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
+ {
+ return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
+ }
+ role.setUpdateBy(SecurityUtils.getUsername());
+
+ if (roleService.updateRole(role) > 0)
+ {
+ // 更新缓存用户权限
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
+ {
+ loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
+ loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+ tokenService.setLoginUser(loginUser);
+ }
+ return AjaxResult.success();
+ }
+ return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
+ }
+
+ /**
+ * 修改保存数据权限
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:edit')")
+ @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/dataScope")
+ public AjaxResult dataScope(@RequestBody SysRole role)
+ {
+ roleService.checkRoleAllowed(role);
+ return toAjax(roleService.authDataScope(role));
+ }
+
+ /**
+ * 状态修改
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:edit')")
+ @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public AjaxResult changeStatus(@RequestBody SysRole role)
+ {
+ roleService.checkRoleAllowed(role);
+ role.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(roleService.updateRoleStatus(role));
+ }
+
+ /**
+ * 删除角色
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:remove')")
+ @Log(title = "角色管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{roleIds}")
+ public AjaxResult remove(@PathVariable Long[] roleIds)
+ {
+ return toAjax(roleService.deleteRoleByIds(roleIds));
+ }
+
+ /**
+ * 获取角色选择框列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:role:query')")
+ @GetMapping("/optionselect")
+ public AjaxResult optionselect()
+ {
+ return AjaxResult.success(roleService.selectRoleAll());
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
new file mode 100644
index 00000000..c965589a
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -0,0 +1,201 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysPostService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 用户信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/user")
+public class SysUserController extends BaseController
+{
+ @Autowired
+ private ISysUserService userService;
+
+ @Autowired
+ private ISysRoleService roleService;
+
+ @Autowired
+ private ISysPostService postService;
+
+ @Autowired
+ private TokenService tokenService;
+
+ /**
+ * 获取用户列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(SysUser user)
+ {
+ startPage();
+ List list = userService.selectUserList(user);
+ return getDataTable(list);
+ }
+
+ @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+ @PreAuthorize("@ss.hasPermi('system:user:export')")
+ @GetMapping("/export")
+ public AjaxResult export(SysUser user)
+ {
+ List list = userService.selectUserList(user);
+ ExcelUtil util = new ExcelUtil(SysUser.class);
+ return util.exportExcel(list, "用户数据");
+ }
+
+ @Log(title = "用户管理", businessType = BusinessType.IMPORT)
+ @PreAuthorize("@ss.hasPermi('system:user:import')")
+ @PostMapping("/importData")
+ public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+ {
+ ExcelUtil util = new ExcelUtil(SysUser.class);
+ List userList = util.importExcel(file.getInputStream());
+ LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+ String operName = loginUser.getUsername();
+ String message = userService.importUser(userList, updateSupport, operName);
+ return AjaxResult.success(message);
+ }
+
+ @GetMapping("/importTemplate")
+ public AjaxResult importTemplate()
+ {
+ ExcelUtil util = new ExcelUtil(SysUser.class);
+ return util.importTemplateExcel("用户数据");
+ }
+
+ /**
+ * 根据用户编号获取详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:query')")
+ @GetMapping(value = { "/", "/{userId}" })
+ public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
+ {
+ AjaxResult ajax = AjaxResult.success();
+ List roles = roleService.selectRoleAll();
+ ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+ ajax.put("posts", postService.selectPostAll());
+ if (StringUtils.isNotNull(userId))
+ {
+ ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId));
+ ajax.put("postIds", postService.selectPostListByUserId(userId));
+ ajax.put("roleIds", roleService.selectRoleListByUserId(userId));
+ }
+ return ajax;
+ }
+
+ /**
+ * 新增用户
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:add')")
+ @Log(title = "用户管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@Validated @RequestBody SysUser user)
+ {
+ if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName())))
+ {
+ return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+ {
+ return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+ {
+ return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+ }
+ user.setCreateBy(SecurityUtils.getUsername());
+ user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+ return toAjax(userService.insertUser(user));
+ }
+
+ /**
+ * 修改用户
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:edit')")
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@Validated @RequestBody SysUser user)
+ {
+ userService.checkUserAllowed(user);
+ if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+ {
+ return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+ }
+ else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+ {
+ return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+ }
+ user.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(userService.updateUser(user));
+ }
+
+ /**
+ * 删除用户
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:remove')")
+ @Log(title = "用户管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{userIds}")
+ public AjaxResult remove(@PathVariable Long[] userIds)
+ {
+ return toAjax(userService.deleteUserByIds(userIds));
+ }
+
+ /**
+ * 重置密码
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:edit')")
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/resetPwd")
+ public AjaxResult resetPwd(@RequestBody SysUser user)
+ {
+ userService.checkUserAllowed(user);
+ user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+ user.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(userService.resetPwd(user));
+ }
+
+ /**
+ * 状态修改
+ */
+ @PreAuthorize("@ss.hasPermi('system:user:edit')")
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/changeStatus")
+ public AjaxResult changeStatus(@RequestBody SysUser user)
+ {
+ userService.checkUserAllowed(user);
+ user.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(userService.updateUserStatus(user));
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
new file mode 100644
index 00000000..f66ca24e
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
@@ -0,0 +1,24 @@
+package com.ruoyi.web.controller.tool;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.ruoyi.common.core.controller.BaseController;
+
+/**
+ * swagger 接口
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/tool/swagger")
+public class SwaggerController extends BaseController
+{
+ @PreAuthorize("@ss.hasPermi('tool:swagger:view')")
+ @GetMapping()
+ public String index()
+ {
+ return redirect("/swagger-ui.html");
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
new file mode 100644
index 00000000..9c6e6b5e
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
@@ -0,0 +1,175 @@
+package com.ruoyi.web.controller.tool;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * swagger 用户测试方法
+ *
+ * @author ruoyi
+ */
+@Api("用户信息管理")
+@RestController
+@RequestMapping("/test/user")
+public class TestController extends BaseController
+{
+ private final static Map users = new LinkedHashMap();
+ {
+ users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
+ users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
+ }
+
+ @ApiOperation("获取用户列表")
+ @GetMapping("/list")
+ public AjaxResult userList()
+ {
+ List userList = new ArrayList(users.values());
+ return AjaxResult.success(userList);
+ }
+
+ @ApiOperation("获取用户详细")
+ @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
+ @GetMapping("/{userId}")
+ public AjaxResult getUser(@PathVariable Integer userId)
+ {
+ if (!users.isEmpty() && users.containsKey(userId))
+ {
+ return AjaxResult.success(users.get(userId));
+ }
+ else
+ {
+ return AjaxResult.error("用户不存在");
+ }
+ }
+
+ @ApiOperation("新增用户")
+ @ApiImplicitParam(name = "userEntity", value = "新增用户信息", dataType = "UserEntity")
+ @PostMapping("/save")
+ public AjaxResult save(UserEntity user)
+ {
+ if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+ {
+ return AjaxResult.error("用户ID不能为空");
+ }
+ return AjaxResult.success(users.put(user.getUserId(), user));
+ }
+
+ @ApiOperation("更新用户")
+ @ApiImplicitParam(name = "userEntity", value = "新增用户信息", dataType = "UserEntity")
+ @PutMapping("/update")
+ public AjaxResult update(UserEntity user)
+ {
+ if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+ {
+ return AjaxResult.error("用户ID不能为空");
+ }
+ if (users.isEmpty() || !users.containsKey(user.getUserId()))
+ {
+ return AjaxResult.error("用户不存在");
+ }
+ users.remove(user.getUserId());
+ return AjaxResult.success(users.put(user.getUserId(), user));
+ }
+
+ @ApiOperation("删除用户信息")
+ @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path")
+ @DeleteMapping("/{userId}")
+ public AjaxResult delete(@PathVariable Integer userId)
+ {
+ if (!users.isEmpty() && users.containsKey(userId))
+ {
+ users.remove(userId);
+ return AjaxResult.success();
+ }
+ else
+ {
+ return AjaxResult.error("用户不存在");
+ }
+ }
+}
+
+@ApiModel("用户实体")
+class UserEntity
+{
+ @ApiModelProperty("用户ID")
+ private Integer userId;
+
+ @ApiModelProperty("用户名称")
+ private String username;
+
+ @ApiModelProperty("用户密码")
+ private String password;
+
+ @ApiModelProperty("用户手机")
+ private String mobile;
+
+ public UserEntity()
+ {
+
+ }
+
+ public UserEntity(Integer userId, String username, String password, String mobile)
+ {
+ this.userId = userId;
+ this.username = username;
+ this.password = password;
+ this.mobile = mobile;
+ }
+
+ public Integer getUserId()
+ {
+ return userId;
+ }
+
+ public void setUserId(Integer userId)
+ {
+ this.userId = userId;
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public String getMobile()
+ {
+ return mobile;
+ }
+
+ public void setMobile(String mobile)
+ {
+ this.mobile = mobile;
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
new file mode 100644
index 00000000..7d2627cd
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
@@ -0,0 +1,125 @@
+package com.ruoyi.web.core.config;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.ruoyi.common.config.RuoYiConfig;
+import io.swagger.annotations.ApiOperation;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * Swagger2的接口配置
+ *
+ * @author ruoyi
+ */
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig
+{
+ /** 系统基础配置 */
+ @Autowired
+ private RuoYiConfig ruoyiConfig;
+
+ /** 是否开启swagger */
+ @Value("${swagger.enabled}")
+ private boolean enabled;
+
+ /** 设置请求的统一前缀 */
+ @Value("${swagger.pathMapping}")
+ private String pathMapping;
+
+ /**
+ * 创建API
+ */
+ @Bean
+ public Docket createRestApi()
+ {
+ return new Docket(DocumentationType.SWAGGER_2)
+ // 是否启用Swagger
+ .enable(enabled)
+ // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
+ .apiInfo(apiInfo())
+ // 设置哪些接口暴露给Swagger展示
+ .select()
+ // 扫描所有有注解的api,用这种方式更灵活
+ .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+ // 扫描指定包中的swagger注解
+ // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
+ // 扫描所有 .apis(RequestHandlerSelectors.any())
+ .paths(PathSelectors.any())
+ .build()
+ /* 设置安全模式,swagger可以设置访问token */
+ .securitySchemes(securitySchemes())
+ .securityContexts(securityContexts())
+ .pathMapping(pathMapping);
+ }
+
+ /**
+ * 安全模式,这里指定token通过Authorization头请求头传递
+ */
+ private List securitySchemes()
+ {
+ List apiKeyList = new ArrayList();
+ apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
+ return apiKeyList;
+ }
+
+ /**
+ * 安全上下文
+ */
+ private List securityContexts()
+ {
+ List securityContexts = new ArrayList<>();
+ securityContexts.add(
+ SecurityContext.builder()
+ .securityReferences(defaultAuth())
+ .forPaths(PathSelectors.regex("^(?!auth).*$"))
+ .build());
+ return securityContexts;
+ }
+
+ /**
+ * 默认的安全上引用
+ */
+ private List defaultAuth()
+ {
+ AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+ authorizationScopes[0] = authorizationScope;
+ List securityReferences = new ArrayList<>();
+ securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+ return securityReferences;
+ }
+
+ /**
+ * 添加摘要信息
+ */
+ private ApiInfo apiInfo()
+ {
+ // 用ApiInfoBuilder进行定制
+ return new ApiInfoBuilder()
+ // 设置标题
+ .title("标题:咨询项目成果管理系统_接口文档")
+ // 描述
+ .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
+ // 作者信息
+ .contact(new Contact(ruoyiConfig.getName(), null, null))
+ // 版本
+ .version("版本号:" + ruoyiConfig.getVersion())
+ .build();
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties b/Rk-progect/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties
new file mode 100644
index 00000000..2b23f85a
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties
@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson.*.jar
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/application-druid.yml b/Rk-progect/ruoyi-admin/src/main/resources/application-druid.yml
new file mode 100644
index 00000000..9dbfe92d
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/application-druid.yml
@@ -0,0 +1,63 @@
+# 数据源配置
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: com.kingbase8.Driver
+ druid:
+ master:
+ # url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ # nullCatalogMeansCurrent=true 解决 mysql-connector-mysql 8.0 (spring-boot-starter-parent 管理的版本) + Activiti 6.x 自动建表失败
+ #url: jdbc:mysql://39.99.226.14:3306/ryrk-na?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ #username: root
+ #password: xxxxxx
+ #url: jdbc:kingbase8://192.168.210.16:54321/PROJECTDB??useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ url: jdbc:kingbase8://127.0.0.1:54321/PROJECTDB??useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ username: SYSTEM
+ #password: 12345678ab
+ password: 123456
+ # 从库数据源
+ slave:
+ # 从数据源开关/默认关闭
+ enabled: false
+ url:
+ username:
+ password:
+ # 初始连接数
+ initialSize: 5
+ # 最小连接池数量
+ minIdle: 10
+ # 最大连接池数量
+ maxActive: 20
+ # 配置获取连接等待超时的时间
+ maxWait: 60000
+ # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ timeBetweenEvictionRunsMillis: 60000
+ # 配置一个连接在池中最小生存的时间,单位是毫秒
+ minEvictableIdleTimeMillis: 300000
+ # 配置一个连接在池中最大生存的时间,单位是毫秒
+ maxEvictableIdleTimeMillis: 900000
+ # 配置检测连接是否有效
+ validationQuery: SELECT 1 FROM DUAL
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ webStatFilter:
+ enabled: true
+ statViewServlet:
+ enabled: true
+ # 设置白名单,不填则允许所有访问
+ allow:
+ url-pattern: /druid/*
+ # 控制台管理用户名和密码
+ login-username:
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ # 慢SQL记录
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/application.yml b/Rk-progect/ruoyi-admin/src/main/resources/application.yml
new file mode 100644
index 00000000..8e027ec2
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/application.yml
@@ -0,0 +1,137 @@
+# 项目相关配置
+ruoyi:
+ # 名称
+ name: RuoYi
+ # 版本
+ version: 3.1.0
+ # 版权年份
+ copyrightYear: 2019
+ # 实例演示开关
+ demoEnabled: true
+ # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+ profile: E:/gcyDATA/cg2
+
+
+ #profile: /home/changhao/ruoyi/uploadPath
+ #profile: /home/zxc/ruoyi/uploadPath
+ # 获取ip地址开关
+ addressEnabled: false
+ # 验证码类型 math 数组计算 char 字符验证
+ captchaType: math
+ #文本大小写/是否为式环境
+ textTransform: false
+
+# 开发环境配置
+server:
+ # 服务器的HTTP端口,默认为8080
+ port: 8081
+ servlet:
+ # 应用的访问路径
+ context-path: /
+ tomcat:
+ # tomcat的URI编码
+ uri-encoding: UTF-8
+ # tomcat最大线程数,默认为200
+ max-threads: 800
+ # Tomcat启动初始化的线程数,默认值25
+ min-spare-threads: 30
+
+# 日志配置
+logging:
+ level:
+ com.ruoyi: debug
+ org.springframework: warn
+
+# Spring配置
+spring:
+ # 资源信息
+ messages:
+ # 国际化资源文件路径
+ basename: i18n/messages
+ profiles:
+ active: druid
+ # 文件上传
+ servlet:
+ multipart:
+ # 单个文件大小
+ max-file-size: 10MB
+ # 设置总上传的文件大小
+ max-request-size: 20MB
+ mvc:
+ hiddenmethod:
+ filter:
+ enabled: true
+ # 服务模块
+ devtools:
+ restart:
+ # 热部署开关
+ enabled: true
+ # activiti 模块
+ # 解决启动报错:class path resource [processes/] cannot be resolved to URL because it does not exist
+ #activiti:
+ #check-process-definitions: false
+ # 检测身份信息表是否存在
+ #db-identity-used: false
+ # redis 配置
+ redis:
+ # 地址
+ #host: 192.168.210.9
+ host: 127.0.0.1
+ # 端口,默认为6379
+ port: 6379
+ # 密码
+ #password: Fidfi7$9o2lkaokrd
+ #password: Fidfi7$9o2lkaokrd
+ # 连接超时时间
+ timeout: 10s
+ lettuce:
+ pool:
+ # 连接池中的最小空闲连接
+ min-idle: 0
+ # 连接池中的最大空闲连接
+ max-idle: 8
+ # 连接池的最大数据库连接数
+ max-active: 8
+ # #连接池最大阻塞等待时间(使用负值表示没有限制)
+ max-wait: -1ms
+
+# token配置
+token:
+ # 令牌自定义标识
+ header: Authorization
+ # 令牌密钥
+ secret: abcdefghijklmnopqrstuvwxyz
+ # 令牌有效期(默认30分钟)
+ expireTime: 30
+
+# MyBatis配置
+mybatis:
+ # 搜索指定包别名
+ typeAliasesPackage: com.ruoyi.**.domain
+ # 配置mapper的扫描,找到所有的mapper.xml映射文件
+ mapperLocations: classpath*:mapper/**/*Mapper.xml
+ # 加载全局的配置文件
+ configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper:
+ helperDialect: mysql
+ reasonable: true
+ supportMethodsArguments: true
+ params: count=countSql
+
+# Swagger配置
+swagger:
+ # 是否开启swagger
+ enabled: true
+ # 请求前缀
+ pathMapping: /dev-api
+
+# 防止XSS攻击
+xss:
+ # 过滤开关
+ enabled: true
+ # 排除链接(多个用逗号分隔)
+ excludes: /system/notice/*
+ # 匹配链接
+ urlPatterns: /system/*,/monitor/*,/tool/*
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/banner.txt b/Rk-progect/ruoyi-admin/src/main/resources/banner.txt
new file mode 100644
index 00000000..0ef69ea7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/banner.txt
@@ -0,0 +1,5 @@
+Application Version: ${ruoyi.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+///////项目管理启动/////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/i18n/messages.properties b/Rk-progect/ruoyi-admin/src/main/resources/i18n/messages.properties
new file mode 100644
index 00000000..d63aa1f8
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/i18n/messages.properties
@@ -0,0 +1,36 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=用户不存在/密码错误
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
+user.password.delete=对不起,您的账号已被删除
+user.blocked=用户已封禁,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+
+length.not.valid=长度必须在{min}到{max}个字符之间
+
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.password.not.valid=* 5-50个字符
+
+user.email.not.valid=邮箱格式错误
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/logback.xml b/Rk-progect/ruoyi-admin/src/main/resources/logback.xml
new file mode 100644
index 00000000..744416fc
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/logback.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/sys-info.log
+
+
+
+ ${log.path}/sys-info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/sys-error.log
+
+
+
+ ${log.path}/sys-error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+ ${log.path}/sys-user.log
+
+
+ ${log.path}/sys-user.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/Rk-progect/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
new file mode 100644
index 00000000..e8b52be8
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/src/test/java/test/Testss.java b/Rk-progect/ruoyi-admin/src/test/java/test/Testss.java
new file mode 100644
index 00000000..a937d147
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/src/test/java/test/Testss.java
@@ -0,0 +1,52 @@
+package test;
+
+import com.ruoyi.RuoYiApplication;
+import com.ruoyi.project.domain.PaParticipants;
+import com.ruoyi.project.domain.PaProjectInfo;
+import com.ruoyi.project.service.IPaAttachmentService;
+import com.ruoyi.project.service.IPaParticipantsService;
+import com.ruoyi.project.service.IPaProjectInfoService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @program: Rk-progect
+ * @description:
+ * @author: 杨志杰
+ * @create: 2022-01-14 17:06
+ **/
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = RuoYiApplication.class)
+public class Testss {
+ @Autowired
+ private IPaAttachmentService iPaAttachmentService;
+ @Autowired
+ private ApplicationContext applicationContext;
+
+ @Autowired
+ private IPaProjectInfoService paProjectInfoService;
+
+ @Autowired
+ private IPaParticipantsService iPaParticipantsService;
+
+ @Test
+ public void test2(){
+ PaProjectInfo paProjectInfo = new PaProjectInfo();
+ paProjectInfo.setCode("2019-XY-61");
+ List list = paProjectInfoService.selectPaProjectInfoList(paProjectInfo);
+ PaProjectInfo paProjectInfo1 = list.get(0);
+ paProjectInfoService.modifyProjectInfo(paProjectInfo1);
+ }
+ @Test
+ public void test1(){
+ PaParticipants paParticipants = iPaParticipantsService.selectPaParticipantsById(249898L);
+ System.err.println(paParticipants);
+
+ }
+}
diff --git a/Rk-progect/ruoyi-admin/target/classes/META-INF/spring-devtools.properties b/Rk-progect/ruoyi-admin/target/classes/META-INF/spring-devtools.properties
new file mode 100644
index 00000000..2b23f85a
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/META-INF/spring-devtools.properties
@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson.*.jar
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-admin/target/classes/application-druid.yml b/Rk-progect/ruoyi-admin/target/classes/application-druid.yml
new file mode 100644
index 00000000..9dbfe92d
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/application-druid.yml
@@ -0,0 +1,63 @@
+# 数据源配置
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: com.kingbase8.Driver
+ druid:
+ master:
+ # url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ # nullCatalogMeansCurrent=true 解决 mysql-connector-mysql 8.0 (spring-boot-starter-parent 管理的版本) + Activiti 6.x 自动建表失败
+ #url: jdbc:mysql://39.99.226.14:3306/ryrk-na?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ #username: root
+ #password: xxxxxx
+ #url: jdbc:kingbase8://192.168.210.16:54321/PROJECTDB??useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ url: jdbc:kingbase8://127.0.0.1:54321/PROJECTDB??useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ username: SYSTEM
+ #password: 12345678ab
+ password: 123456
+ # 从库数据源
+ slave:
+ # 从数据源开关/默认关闭
+ enabled: false
+ url:
+ username:
+ password:
+ # 初始连接数
+ initialSize: 5
+ # 最小连接池数量
+ minIdle: 10
+ # 最大连接池数量
+ maxActive: 20
+ # 配置获取连接等待超时的时间
+ maxWait: 60000
+ # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ timeBetweenEvictionRunsMillis: 60000
+ # 配置一个连接在池中最小生存的时间,单位是毫秒
+ minEvictableIdleTimeMillis: 300000
+ # 配置一个连接在池中最大生存的时间,单位是毫秒
+ maxEvictableIdleTimeMillis: 900000
+ # 配置检测连接是否有效
+ validationQuery: SELECT 1 FROM DUAL
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ webStatFilter:
+ enabled: true
+ statViewServlet:
+ enabled: true
+ # 设置白名单,不填则允许所有访问
+ allow:
+ url-pattern: /druid/*
+ # 控制台管理用户名和密码
+ login-username:
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ # 慢SQL记录
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
diff --git a/Rk-progect/ruoyi-admin/target/classes/application.yml b/Rk-progect/ruoyi-admin/target/classes/application.yml
new file mode 100644
index 00000000..8e027ec2
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/application.yml
@@ -0,0 +1,137 @@
+# 项目相关配置
+ruoyi:
+ # 名称
+ name: RuoYi
+ # 版本
+ version: 3.1.0
+ # 版权年份
+ copyrightYear: 2019
+ # 实例演示开关
+ demoEnabled: true
+ # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+ profile: E:/gcyDATA/cg2
+
+
+ #profile: /home/changhao/ruoyi/uploadPath
+ #profile: /home/zxc/ruoyi/uploadPath
+ # 获取ip地址开关
+ addressEnabled: false
+ # 验证码类型 math 数组计算 char 字符验证
+ captchaType: math
+ #文本大小写/是否为式环境
+ textTransform: false
+
+# 开发环境配置
+server:
+ # 服务器的HTTP端口,默认为8080
+ port: 8081
+ servlet:
+ # 应用的访问路径
+ context-path: /
+ tomcat:
+ # tomcat的URI编码
+ uri-encoding: UTF-8
+ # tomcat最大线程数,默认为200
+ max-threads: 800
+ # Tomcat启动初始化的线程数,默认值25
+ min-spare-threads: 30
+
+# 日志配置
+logging:
+ level:
+ com.ruoyi: debug
+ org.springframework: warn
+
+# Spring配置
+spring:
+ # 资源信息
+ messages:
+ # 国际化资源文件路径
+ basename: i18n/messages
+ profiles:
+ active: druid
+ # 文件上传
+ servlet:
+ multipart:
+ # 单个文件大小
+ max-file-size: 10MB
+ # 设置总上传的文件大小
+ max-request-size: 20MB
+ mvc:
+ hiddenmethod:
+ filter:
+ enabled: true
+ # 服务模块
+ devtools:
+ restart:
+ # 热部署开关
+ enabled: true
+ # activiti 模块
+ # 解决启动报错:class path resource [processes/] cannot be resolved to URL because it does not exist
+ #activiti:
+ #check-process-definitions: false
+ # 检测身份信息表是否存在
+ #db-identity-used: false
+ # redis 配置
+ redis:
+ # 地址
+ #host: 192.168.210.9
+ host: 127.0.0.1
+ # 端口,默认为6379
+ port: 6379
+ # 密码
+ #password: Fidfi7$9o2lkaokrd
+ #password: Fidfi7$9o2lkaokrd
+ # 连接超时时间
+ timeout: 10s
+ lettuce:
+ pool:
+ # 连接池中的最小空闲连接
+ min-idle: 0
+ # 连接池中的最大空闲连接
+ max-idle: 8
+ # 连接池的最大数据库连接数
+ max-active: 8
+ # #连接池最大阻塞等待时间(使用负值表示没有限制)
+ max-wait: -1ms
+
+# token配置
+token:
+ # 令牌自定义标识
+ header: Authorization
+ # 令牌密钥
+ secret: abcdefghijklmnopqrstuvwxyz
+ # 令牌有效期(默认30分钟)
+ expireTime: 30
+
+# MyBatis配置
+mybatis:
+ # 搜索指定包别名
+ typeAliasesPackage: com.ruoyi.**.domain
+ # 配置mapper的扫描,找到所有的mapper.xml映射文件
+ mapperLocations: classpath*:mapper/**/*Mapper.xml
+ # 加载全局的配置文件
+ configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper:
+ helperDialect: mysql
+ reasonable: true
+ supportMethodsArguments: true
+ params: count=countSql
+
+# Swagger配置
+swagger:
+ # 是否开启swagger
+ enabled: true
+ # 请求前缀
+ pathMapping: /dev-api
+
+# 防止XSS攻击
+xss:
+ # 过滤开关
+ enabled: true
+ # 排除链接(多个用逗号分隔)
+ excludes: /system/notice/*
+ # 匹配链接
+ urlPatterns: /system/*,/monitor/*,/tool/*
diff --git a/Rk-progect/ruoyi-admin/target/classes/banner.txt b/Rk-progect/ruoyi-admin/target/classes/banner.txt
new file mode 100644
index 00000000..0ef69ea7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/banner.txt
@@ -0,0 +1,5 @@
+Application Version: ${ruoyi.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+///////项目管理启动/////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
diff --git a/Rk-progect/ruoyi-admin/target/classes/i18n/messages.properties b/Rk-progect/ruoyi-admin/target/classes/i18n/messages.properties
new file mode 100644
index 00000000..d63aa1f8
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/i18n/messages.properties
@@ -0,0 +1,36 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=用户不存在/密码错误
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
+user.password.delete=对不起,您的账号已被删除
+user.blocked=用户已封禁,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+
+length.not.valid=长度必须在{min}到{max}个字符之间
+
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.password.not.valid=* 5-50个字符
+
+user.email.not.valid=邮箱格式错误
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
diff --git a/Rk-progect/ruoyi-admin/target/classes/logback.xml b/Rk-progect/ruoyi-admin/target/classes/logback.xml
new file mode 100644
index 00000000..744416fc
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/logback.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/sys-info.log
+
+
+
+ ${log.path}/sys-info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/sys-error.log
+
+
+
+ ${log.path}/sys-error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+ ${log.path}/sys-user.log
+
+
+ ${log.path}/sys-user.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/target/classes/mybatis/mybatis-config.xml b/Rk-progect/ruoyi-admin/target/classes/mybatis/mybatis-config.xml
new file mode 100644
index 00000000..e8b52be8
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/classes/mybatis/mybatis-config.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/target/maven-archiver/pom.properties b/Rk-progect/ruoyi-admin/target/maven-archiver/pom.properties
new file mode 100644
index 00000000..d43cb1c6
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/maven-archiver/pom.properties
@@ -0,0 +1,4 @@
+#Created by Apache Maven 3.3.9
+version=3.1.0
+groupId=com.ruoyi
+artifactId=ruoyi-admin
diff --git a/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 00000000..e69de29b
diff --git a/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 00000000..ab53caee
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,22 @@
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysLoginController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\monitor\ServerController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\monitor\SysLogininforController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysRoleController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysDeptController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysPostController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysUserController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysDictDataController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\RuoYiServletInitializer.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysConfigController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysDictTypeController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\monitor\SysUserOnlineController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\common\CaptchaController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\common\CommonController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\tool\TestController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysMenuController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysProfileController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\tool\SwaggerController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\core\config\SwaggerConfig.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\monitor\SysOperlogController.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\RuoYiApplication.java
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\main\java\com\ruoyi\web\controller\system\SysNoticeController.java
diff --git a/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 00000000..e69de29b
diff --git a/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 00000000..9d7b6d56
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1 @@
+F:\workspace\gcy\Rk-progect\ruoyi-admin\src\test\java\test\Testss.java
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin.war.original b/Rk-progect/ruoyi-admin/target/ruoyi-admin.war.original
new file mode 100644
index 00000000..de197766
Binary files /dev/null and b/Rk-progect/ruoyi-admin/target/ruoyi-admin.war.original differ
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/META-INF/MANIFEST.MF b/Rk-progect/ruoyi-admin/target/ruoyi-admin/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..c99fd994
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Created-By: IntelliJ IDEA
+Built-By: ThinkPad
+Build-Jdk: 1.8.0_261
+
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/META-INF/spring-devtools.properties b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/META-INF/spring-devtools.properties
new file mode 100644
index 00000000..2b23f85a
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/META-INF/spring-devtools.properties
@@ -0,0 +1 @@
+restart.include.json=/com.alibaba.fastjson.*.jar
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/application-druid.yml b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/application-druid.yml
new file mode 100644
index 00000000..9dbfe92d
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/application-druid.yml
@@ -0,0 +1,63 @@
+# 数据源配置
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: com.kingbase8.Driver
+ druid:
+ master:
+ # url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ # nullCatalogMeansCurrent=true 解决 mysql-connector-mysql 8.0 (spring-boot-starter-parent 管理的版本) + Activiti 6.x 自动建表失败
+ #url: jdbc:mysql://39.99.226.14:3306/ryrk-na?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ #username: root
+ #password: xxxxxx
+ #url: jdbc:kingbase8://192.168.210.16:54321/PROJECTDB??useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ url: jdbc:kingbase8://127.0.0.1:54321/PROJECTDB??useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+ username: SYSTEM
+ #password: 12345678ab
+ password: 123456
+ # 从库数据源
+ slave:
+ # 从数据源开关/默认关闭
+ enabled: false
+ url:
+ username:
+ password:
+ # 初始连接数
+ initialSize: 5
+ # 最小连接池数量
+ minIdle: 10
+ # 最大连接池数量
+ maxActive: 20
+ # 配置获取连接等待超时的时间
+ maxWait: 60000
+ # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ timeBetweenEvictionRunsMillis: 60000
+ # 配置一个连接在池中最小生存的时间,单位是毫秒
+ minEvictableIdleTimeMillis: 300000
+ # 配置一个连接在池中最大生存的时间,单位是毫秒
+ maxEvictableIdleTimeMillis: 900000
+ # 配置检测连接是否有效
+ validationQuery: SELECT 1 FROM DUAL
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ webStatFilter:
+ enabled: true
+ statViewServlet:
+ enabled: true
+ # 设置白名单,不填则允许所有访问
+ allow:
+ url-pattern: /druid/*
+ # 控制台管理用户名和密码
+ login-username:
+ login-password:
+ filter:
+ stat:
+ enabled: true
+ # 慢SQL记录
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/application.yml b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/application.yml
new file mode 100644
index 00000000..8e027ec2
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/application.yml
@@ -0,0 +1,137 @@
+# 项目相关配置
+ruoyi:
+ # 名称
+ name: RuoYi
+ # 版本
+ version: 3.1.0
+ # 版权年份
+ copyrightYear: 2019
+ # 实例演示开关
+ demoEnabled: true
+ # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+ profile: E:/gcyDATA/cg2
+
+
+ #profile: /home/changhao/ruoyi/uploadPath
+ #profile: /home/zxc/ruoyi/uploadPath
+ # 获取ip地址开关
+ addressEnabled: false
+ # 验证码类型 math 数组计算 char 字符验证
+ captchaType: math
+ #文本大小写/是否为式环境
+ textTransform: false
+
+# 开发环境配置
+server:
+ # 服务器的HTTP端口,默认为8080
+ port: 8081
+ servlet:
+ # 应用的访问路径
+ context-path: /
+ tomcat:
+ # tomcat的URI编码
+ uri-encoding: UTF-8
+ # tomcat最大线程数,默认为200
+ max-threads: 800
+ # Tomcat启动初始化的线程数,默认值25
+ min-spare-threads: 30
+
+# 日志配置
+logging:
+ level:
+ com.ruoyi: debug
+ org.springframework: warn
+
+# Spring配置
+spring:
+ # 资源信息
+ messages:
+ # 国际化资源文件路径
+ basename: i18n/messages
+ profiles:
+ active: druid
+ # 文件上传
+ servlet:
+ multipart:
+ # 单个文件大小
+ max-file-size: 10MB
+ # 设置总上传的文件大小
+ max-request-size: 20MB
+ mvc:
+ hiddenmethod:
+ filter:
+ enabled: true
+ # 服务模块
+ devtools:
+ restart:
+ # 热部署开关
+ enabled: true
+ # activiti 模块
+ # 解决启动报错:class path resource [processes/] cannot be resolved to URL because it does not exist
+ #activiti:
+ #check-process-definitions: false
+ # 检测身份信息表是否存在
+ #db-identity-used: false
+ # redis 配置
+ redis:
+ # 地址
+ #host: 192.168.210.9
+ host: 127.0.0.1
+ # 端口,默认为6379
+ port: 6379
+ # 密码
+ #password: Fidfi7$9o2lkaokrd
+ #password: Fidfi7$9o2lkaokrd
+ # 连接超时时间
+ timeout: 10s
+ lettuce:
+ pool:
+ # 连接池中的最小空闲连接
+ min-idle: 0
+ # 连接池中的最大空闲连接
+ max-idle: 8
+ # 连接池的最大数据库连接数
+ max-active: 8
+ # #连接池最大阻塞等待时间(使用负值表示没有限制)
+ max-wait: -1ms
+
+# token配置
+token:
+ # 令牌自定义标识
+ header: Authorization
+ # 令牌密钥
+ secret: abcdefghijklmnopqrstuvwxyz
+ # 令牌有效期(默认30分钟)
+ expireTime: 30
+
+# MyBatis配置
+mybatis:
+ # 搜索指定包别名
+ typeAliasesPackage: com.ruoyi.**.domain
+ # 配置mapper的扫描,找到所有的mapper.xml映射文件
+ mapperLocations: classpath*:mapper/**/*Mapper.xml
+ # 加载全局的配置文件
+ configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper:
+ helperDialect: mysql
+ reasonable: true
+ supportMethodsArguments: true
+ params: count=countSql
+
+# Swagger配置
+swagger:
+ # 是否开启swagger
+ enabled: true
+ # 请求前缀
+ pathMapping: /dev-api
+
+# 防止XSS攻击
+xss:
+ # 过滤开关
+ enabled: true
+ # 排除链接(多个用逗号分隔)
+ excludes: /system/notice/*
+ # 匹配链接
+ urlPatterns: /system/*,/monitor/*,/tool/*
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/banner.txt b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/banner.txt
new file mode 100644
index 00000000..0ef69ea7
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/banner.txt
@@ -0,0 +1,5 @@
+Application Version: ${ruoyi.version}
+Spring Boot Version: ${spring-boot.version}
+////////////////////////////////////////////////////////////////////
+///////项目管理启动/////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/i18n/messages.properties b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/i18n/messages.properties
new file mode 100644
index 00000000..d63aa1f8
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/i18n/messages.properties
@@ -0,0 +1,36 @@
+#错误消息
+not.null=* 必须填写
+user.jcaptcha.error=验证码错误
+user.jcaptcha.expire=验证码已失效
+user.not.exists=用户不存在/密码错误
+user.password.not.match=用户不存在/密码错误
+user.password.retry.limit.count=密码输入错误{0}次
+user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
+user.password.delete=对不起,您的账号已被删除
+user.blocked=用户已封禁,请联系管理员
+role.blocked=角色已封禁,请联系管理员
+user.logout.success=退出成功
+
+length.not.valid=长度必须在{min}到{max}个字符之间
+
+user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
+user.password.not.valid=* 5-50个字符
+
+user.email.not.valid=邮箱格式错误
+user.mobile.phone.number.not.valid=手机号格式错误
+user.login.success=登录成功
+user.notfound=请重新登录
+user.forcelogout=管理员强制退出,请重新登录
+user.unknown.error=未知错误,请重新登录
+
+##文件上传消息
+upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB!
+upload.filename.exceed.length=上传的文件名最长{0}个字符
+
+##权限
+no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
+no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
+no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
+no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
+no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
+no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/logback.xml b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/logback.xml
new file mode 100644
index 00000000..744416fc
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/logback.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/sys-info.log
+
+
+
+ ${log.path}/sys-info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/sys-error.log
+
+
+
+ ${log.path}/sys-error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+ ${log.path}/sys-user.log
+
+
+ ${log.path}/sys-user.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/mybatis/mybatis-config.xml b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/mybatis/mybatis-config.xml
new file mode 100644
index 00000000..e8b52be8
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/ruoyi-admin/WEB-INF/classes/mybatis/mybatis-config.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-admin/target/surefire-reports/TEST-test.Testss.xml b/Rk-progect/ruoyi-admin/target/surefire-reports/TEST-test.Testss.xml
new file mode 100644
index 00000000..e729b45b
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/surefire-reports/TEST-test.Testss.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-admin/target/surefire-reports/test.Testss.txt b/Rk-progect/ruoyi-admin/target/surefire-reports/test.Testss.txt
new file mode 100644
index 00000000..33647079
--- /dev/null
+++ b/Rk-progect/ruoyi-admin/target/surefire-reports/test.Testss.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: test.Testss
+-------------------------------------------------------------------------------
+Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 20.422 sec
diff --git a/Rk-progect/ruoyi-common/.classpath b/Rk-progect/ruoyi-common/.classpath
new file mode 100644
index 00000000..3c5e7d17
--- /dev/null
+++ b/Rk-progect/ruoyi-common/.classpath
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Rk-progect/ruoyi-common/.project b/Rk-progect/ruoyi-common/.project
new file mode 100644
index 00000000..347d2687
--- /dev/null
+++ b/Rk-progect/ruoyi-common/.project
@@ -0,0 +1,23 @@
+
+
+ ruoyi-common
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/Rk-progect/ruoyi-common/.settings/org.eclipse.core.resources.prefs b/Rk-progect/ruoyi-common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..e9441bb1
--- /dev/null
+++ b/Rk-progect/ruoyi-common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding/=UTF-8
diff --git a/Rk-progect/ruoyi-common/.settings/org.eclipse.jdt.core.prefs b/Rk-progect/ruoyi-common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..2f5cc74c
--- /dev/null
+++ b/Rk-progect/ruoyi-common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/Rk-progect/ruoyi-common/.settings/org.eclipse.m2e.core.prefs b/Rk-progect/ruoyi-common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000..f897a7f1
--- /dev/null
+++ b/Rk-progect/ruoyi-common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/Rk-progect/ruoyi-common/pom.xml b/Rk-progect/ruoyi-common/pom.xml
new file mode 100644
index 00000000..6c8a53d7
--- /dev/null
+++ b/Rk-progect/ruoyi-common/pom.xml
@@ -0,0 +1,145 @@
+
+
+
+ RK-project
+ com.ruoyi
+ 3.1.0
+
+ 4.0.0
+
+ ruoyi-common
+
+
+ common通用工具
+
+
+
+
+
+
+ org.springframework
+ spring-context-support
+
+
+
+
+ org.springframework
+ spring-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+
+
+
+
+ javax.validation
+ validation-api
+
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+ com.alibaba
+ fastjson
+
+
+
+
+ commons-io
+ commons-io
+
+
+
+
+ commons-fileupload
+ commons-fileupload
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+
+
+ org.yaml
+ snakeyaml
+
+
+
+
+ io.jsonwebtoken
+ jjwt
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ org.apache.commons
+ commons-pool2
+
+
+
+
+ eu.bitwalker
+ UserAgentUtils
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+
+
+
+ org.springframework
+ spring-test
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5
+
+
+ org.apache.httpcomponents
+ httpmime
+ 4.5
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.1
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-common/ruoyi-common.iml b/Rk-progect/ruoyi-common/ruoyi-common.iml
new file mode 100644
index 00000000..b7af7785
--- /dev/null
+++ b/Rk-progect/ruoyi-common/ruoyi-common.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
new file mode 100644
index 00000000..176878e9
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
@@ -0,0 +1,28 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 数据权限过滤注解
+ *
+ * @author ruoyi
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataScope
+{
+ /**
+ * 部门表的别名
+ */
+ public String deptAlias() default "";
+
+ /**
+ * 用户表的别名
+ */
+ public String userAlias() default "";
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
new file mode 100644
index 00000000..79cd191f
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
@@ -0,0 +1,28 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.ruoyi.common.enums.DataSourceType;
+
+/**
+ * 自定义多数据源切换注解
+ *
+ * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
+ *
+ * @author ruoyi
+ */
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface DataSource
+{
+ /**
+ * 切换数据源名称
+ */
+ public DataSourceType value() default DataSourceType.MASTER;
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
new file mode 100644
index 00000000..19d87e9b
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
@@ -0,0 +1,144 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+
+/**
+ * 自定义导出Excel数据注解
+ *
+ * @author ruoyi
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Excel
+{
+ /**
+ * 导出时在excel中排序
+ */
+ public int sort() default Integer.MAX_VALUE;
+
+ /**
+ * 导出到Excel中的名字.
+ */
+ public String name() default "";
+
+ /**
+ * 日期格式, 如: yyyy-MM-dd
+ */
+ public String dateFormat() default "";
+
+ /**
+ * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
+ */
+ public String dictType() default "";
+
+ /**
+ * 读取内容转表达式 (如: 0=男,1=女,2=未知)
+ */
+ public String readConverterExp() default "";
+
+ /**
+ * 分隔符,读取字符串组内容
+ */
+ public String separator() default ",";
+
+ /**
+ * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
+ */
+ public int scale() default -1;
+
+ /**
+ * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
+ */
+ public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
+
+ /**
+ * 导出类型(0数字 1字符串)
+ */
+ public ColumnType cellType() default ColumnType.STRING;
+
+ /**
+ * 导出时在excel中每个列的高度 单位为字符
+ */
+ public double height() default 14;
+
+ /**
+ * 导出时在excel中每个列的宽 单位为字符
+ */
+ public double width() default 16;
+
+ /**
+ * 文字后缀,如% 90 变成90%
+ */
+ public String suffix() default "";
+
+ /**
+ * 当值为空时,字段的默认值
+ */
+ public String defaultValue() default "";
+
+ /**
+ * 提示信息
+ */
+ public String prompt() default "";
+
+ /**
+ * 设置只能选择不能输入的列内容.
+ */
+ public String[] combo() default {};
+
+ /**
+ * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
+ */
+ public boolean isExport() default true;
+
+ /**
+ * 另一个类中的属性名称,支持多级获取,以小数点隔开
+ */
+ public String targetAttr() default "";
+
+ /**
+ * 是否自动统计数据,在最后追加一行统计数据总和
+ */
+ public boolean isStatistics() default false;
+
+ /**
+ * 字段类型(0:导出导入;1:仅导出;2:仅导入)
+ */
+ Type type() default Type.ALL;
+
+ public enum Type
+ {
+ ALL(0), EXPORT(1), IMPORT(2);
+ private final int value;
+
+ Type(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+
+ public enum ColumnType
+ {
+ NUMERIC(0), STRING(1);
+ private final int value;
+
+ ColumnType(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java
new file mode 100644
index 00000000..d33004f5
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java
@@ -0,0 +1,18 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Excel注解集
+ *
+ * @author ruoyi
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Excels
+{
+ Excel[] value();
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
new file mode 100644
index 00000000..eb05dc7c
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
@@ -0,0 +1,41 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
+
+/**
+ * 自定义操作日志记录注解
+ *
+ * @author ruoyi
+ *
+ */
+@Target({ ElementType.PARAMETER, ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Log
+{
+ /**
+ * 模块
+ */
+ public String title() default "";
+
+ /**
+ * 功能
+ */
+ public BusinessType businessType() default BusinessType.OTHER;
+
+ /**
+ * 操作人类别
+ */
+ public OperatorType operatorType() default OperatorType.MANAGE;
+
+ /**
+ * 是否保存请求的参数
+ */
+ public boolean isSaveRequestData() default true;
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
new file mode 100644
index 00000000..9e350f17
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
@@ -0,0 +1,23 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 自定义注解防止表单重复提交
+ *
+ * @author ruoyi
+ *
+ */
+@Inherited
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RepeatSubmit
+{
+
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
new file mode 100644
index 00000000..e4fb5cde
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
@@ -0,0 +1,136 @@
+package com.ruoyi.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 读取项目相关配置
+ *
+ * @author ruoyi
+ */
+@Component
+@ConfigurationProperties(prefix = "ruoyi")
+public class RuoYiConfig
+{
+ /** 项目名称 */
+ private String name;
+
+ /** 版本 */
+ private String version;
+
+ /** 版权年份 */
+ private String copyrightYear;
+
+ /** 实例演示开关 */
+ private boolean demoEnabled;
+
+ /** 上传路径 */
+ private static String profile;
+
+ /** 获取地址开关 */
+ private static boolean addressEnabled;
+
+ private static boolean textTransform;
+
+
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion(String version)
+ {
+ this.version = version;
+ }
+
+ public String getCopyrightYear()
+ {
+ return copyrightYear;
+ }
+
+ public void setCopyrightYear(String copyrightYear)
+ {
+ this.copyrightYear = copyrightYear;
+ }
+
+ public boolean isDemoEnabled()
+ {
+ return demoEnabled;
+ }
+
+ public void setDemoEnabled(boolean demoEnabled)
+ {
+ this.demoEnabled = demoEnabled;
+ }
+
+ public static String getProfile()
+ {
+ return profile;
+ }
+
+ public void setProfile(String profile)
+ {
+ RuoYiConfig.profile = profile;
+ }
+
+ public static boolean isTextTransform() {
+ return textTransform;
+ }
+
+ public void setTextTransform(boolean textTransform) {
+ RuoYiConfig.textTransform = textTransform;
+ }
+
+ public static boolean isAddressEnabled()
+ {
+ return addressEnabled;
+ }
+
+ public void setAddressEnabled(boolean addressEnabled)
+ {
+ RuoYiConfig.addressEnabled = addressEnabled;
+ }
+
+ /**
+ * 获取头像上传路径
+ */
+ public static String getAvatarPath()
+ {
+ return getProfile() + "/avatar";
+ }
+
+ /**
+ * 获取下载路径
+ */
+ public static String getDownloadPath()
+ {
+ return getProfile() + "/download/";
+ }
+
+ /**
+ * 获取上传路径
+ */
+ public static String getUploadPath()
+ {
+ return getProfile() + "/upload";
+ }
+
+ /**
+ * 获取上传路径
+ */
+ public static Boolean getIsTextTransform()
+ {
+ return isTextTransform();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
new file mode 100644
index 00000000..6e13ac15
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -0,0 +1,129 @@
+package com.ruoyi.common.constant;
+
+/**
+ * 通用常量信息
+ *
+ * @author ruoyi
+ */
+public class Constants
+{
+ /**
+ * UTF-8 字符集
+ */
+ public static final String UTF8 = "UTF-8";
+
+ /**
+ * GBK 字符集
+ */
+ public static final String GBK = "GBK";
+
+ /**
+ * http请求
+ */
+ public static final String HTTP = "http://";
+
+ /**
+ * https请求
+ */
+ public static final String HTTPS = "https://";
+
+ /**
+ * 通用成功标识
+ */
+ public static final String SUCCESS = "0";
+
+ /**
+ * 通用失败标识
+ */
+ public static final String FAIL = "1";
+
+ /**
+ * 登录成功
+ */
+ public static final String LOGIN_SUCCESS = "Success";
+
+ /**
+ * 注销
+ */
+ public static final String LOGOUT = "Logout";
+
+ /**
+ * 登录失败
+ */
+ public static final String LOGIN_FAIL = "Error";
+
+ /**
+ * 验证码 redis key
+ */
+ public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
+
+ /**
+ * 登录用户 redis key
+ */
+ public static final String LOGIN_TOKEN_KEY = "login_tokens:";
+
+ /**
+ * 防重提交 redis key
+ */
+ public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
+
+ /**
+ * 验证码有效期(分钟)
+ */
+ public static final Integer CAPTCHA_EXPIRATION = 2;
+
+ /**
+ * 令牌
+ */
+ public static final String TOKEN = "token";
+
+ /**
+ * 令牌前缀
+ */
+ public static final String TOKEN_PREFIX = "Bearer ";
+
+ /**
+ * 令牌前缀
+ */
+ public static final String LOGIN_USER_KEY = "login_user_key";
+
+ /**
+ * 用户ID
+ */
+ public static final String JWT_USERID = "userid";
+
+ /**
+ * 用户名称
+ */
+ public static final String JWT_USERNAME = "sub";
+
+ /**
+ * 用户头像
+ */
+ public static final String JWT_AVATAR = "avatar";
+
+ /**
+ * 创建时间
+ */
+ public static final String JWT_CREATED = "created";
+
+ /**
+ * 用户权限
+ */
+ public static final String JWT_AUTHORITIES = "authorities";
+
+ /**
+ * 参数管理 cache key
+ */
+ public static final String SYS_CONFIG_KEY = "sys_config:";
+
+ /**
+ * 字典管理 cache key
+ */
+ public static final String SYS_DICT_KEY = "sys_dict:";
+
+ /**
+ * 资源映射路径 前缀
+ */
+ public static final String RESOURCE_PREFIX = "/profile";
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
new file mode 100644
index 00000000..5ffab98e
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
@@ -0,0 +1,103 @@
+package com.ruoyi.common.constant;
+
+/**
+ * 代码生成通用常量
+ *
+ * @author ruoyi
+ */
+public class GenConstants
+{
+ /** 单表(增删改查) */
+ public static final String TPL_CRUD = "crud";
+
+ /** 树表(增删改查) */
+ public static final String TPL_TREE = "tree";
+
+ /** 树编码字段 */
+ public static final String TREE_CODE = "treeCode";
+
+ /** 树父编码字段 */
+ public static final String TREE_PARENT_CODE = "treeParentCode";
+
+ /** 树名称字段 */
+ public static final String TREE_NAME = "treeName";
+
+ /** 上级菜单ID字段 */
+ public static final String PARENT_MENU_ID = "parentMenuId";
+
+ /** 上级菜单名称字段 */
+ public static final String PARENT_MENU_NAME = "parentMenuName";
+
+ /** 数据库字符串类型 */
+ public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2", "tinytext", "text",
+ "mediumtext", "longtext" };
+
+ /** 数据库时间类型 */
+ public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
+
+ /** 数据库数字类型 */
+ public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
+ "bigint", "float", "float", "double", "decimal" };
+
+ /** 页面不需要编辑字段 */
+ public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
+
+ /** 页面不需要显示的列表字段 */
+ public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
+ "update_time" };
+
+ /** 页面不需要查询字段 */
+ public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
+ "update_time", "remark" };
+
+ /** Entity基类字段 */
+ public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
+
+ /** Tree基类字段 */
+ public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" };
+
+ /** 文本框 */
+ public static final String HTML_INPUT = "input";
+
+ /** 文本域 */
+ public static final String HTML_TEXTAREA = "textarea";
+
+ /** 下拉框 */
+ public static final String HTML_SELECT = "select";
+
+ /** 单选框 */
+ public static final String HTML_RADIO = "radio";
+
+ /** 复选框 */
+ public static final String HTML_CHECKBOX = "checkbox";
+
+ /** 日期控件 */
+ public static final String HTML_DATETIME = "datetime";
+
+ /** 富文本控件 */
+ public static final String HTML_EDITOR = "editor";
+
+ /** 字符串类型 */
+ public static final String TYPE_STRING = "String";
+
+ /** 整型 */
+ public static final String TYPE_INTEGER = "Integer";
+
+ /** 长整型 */
+ public static final String TYPE_LONG = "Long";
+
+ /** 浮点型 */
+ public static final String TYPE_DOUBLE = "Double";
+
+ /** 高精度计算类型 */
+ public static final String TYPE_BIGDECIMAL = "BigDecimal";
+
+ /** 时间类型 */
+ public static final String TYPE_DATE = "Date";
+
+ /** 模糊查询 */
+ public static final String QUERY_LIKE = "LIKE";
+
+ /** 需要 */
+ public static final String REQUIRE = "1";
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java
new file mode 100644
index 00000000..d60afee2
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java
@@ -0,0 +1,89 @@
+package com.ruoyi.common.constant;
+
+/**
+ * 返回状态码
+ *
+ * @author ruoyi
+ */
+public class HttpStatus
+{
+ /**
+ * 操作成功
+ */
+ public static final int SUCCESS = 200;
+
+ /**
+ * 对象创建成功
+ */
+ public static final int CREATED = 201;
+
+ /**
+ * 请求已经被接受
+ */
+ public static final int ACCEPTED = 202;
+
+ /**
+ * 操作已经执行成功,但是没有返回数据
+ */
+ public static final int NO_CONTENT = 204;
+
+ /**
+ * 资源已被移除
+ */
+ public static final int MOVED_PERM = 301;
+
+ /**
+ * 重定向
+ */
+ public static final int SEE_OTHER = 303;
+
+ /**
+ * 资源没有被修改
+ */
+ public static final int NOT_MODIFIED = 304;
+
+ /**
+ * 参数列表错误(缺少,格式不匹配)
+ */
+ public static final int BAD_REQUEST = 400;
+
+ /**
+ * 未授权
+ */
+ public static final int UNAUTHORIZED = 401;
+
+ /**
+ * 访问受限,授权过期
+ */
+ public static final int FORBIDDEN = 403;
+
+ /**
+ * 资源,服务未找到
+ */
+ public static final int NOT_FOUND = 404;
+
+ /**
+ * 不允许的http方法
+ */
+ public static final int BAD_METHOD = 405;
+
+ /**
+ * 资源冲突,或者资源被锁
+ */
+ public static final int CONFLICT = 409;
+
+ /**
+ * 不支持的数据,媒体类型
+ */
+ public static final int UNSUPPORTED_TYPE = 415;
+
+ /**
+ * 系统内部错误
+ */
+ public static final int ERROR = 500;
+
+ /**
+ * 接口未实现
+ */
+ public static final int NOT_IMPLEMENTED = 501;
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
new file mode 100644
index 00000000..62ad8154
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
@@ -0,0 +1,50 @@
+package com.ruoyi.common.constant;
+
+/**
+ * 任务调度通用常量
+ *
+ * @author ruoyi
+ */
+public class ScheduleConstants
+{
+ public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
+
+ /** 执行目标key */
+ public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
+
+ /** 默认 */
+ public static final String MISFIRE_DEFAULT = "0";
+
+ /** 立即触发执行 */
+ public static final String MISFIRE_IGNORE_MISFIRES = "1";
+
+ /** 触发一次执行 */
+ public static final String MISFIRE_FIRE_AND_PROCEED = "2";
+
+ /** 不触发立即执行 */
+ public static final String MISFIRE_DO_NOTHING = "3";
+
+ public enum Status
+ {
+ /**
+ * 正常
+ */
+ NORMAL("0"),
+ /**
+ * 暂停
+ */
+ PAUSE("1");
+
+ private String value;
+
+ private Status(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
new file mode 100644
index 00000000..746f4b68
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
@@ -0,0 +1,60 @@
+package com.ruoyi.common.constant;
+
+/**
+ * 用户常量信息
+ *
+ * @author ruoyi
+ */
+public class UserConstants
+{
+ /**
+ * 平台内系统用户的唯一标志
+ */
+ public static final String SYS_USER = "SYS_USER";
+
+ /** 正常状态 */
+ public static final String NORMAL = "0";
+
+ /** 异常状态 */
+ public static final String EXCEPTION = "1";
+
+ /** 用户封禁状态 */
+ public static final String USER_DISABLE = "1";
+
+ /** 角色封禁状态 */
+ public static final String ROLE_DISABLE = "1";
+
+ /** 部门正常状态 */
+ public static final String DEPT_NORMAL = "0";
+
+ /** 部门停用状态 */
+ public static final String DEPT_DISABLE = "1";
+
+ /** 字典正常状态 */
+ public static final String DICT_NORMAL = "0";
+
+ /** 是否为系统默认(是) */
+ public static final String YES = "Y";
+
+ /** 是否菜单外链(是) */
+ public static final String YES_FRAME = "0";
+
+ /** 是否菜单外链(否) */
+ public static final String NO_FRAME = "1";
+
+ /** 菜单类型(目录) */
+ public static final String TYPE_DIR = "M";
+
+ /** 菜单类型(菜单) */
+ public static final String TYPE_MENU = "C";
+
+ /** 菜单类型(按钮) */
+ public static final String TYPE_BUTTON = "F";
+
+ /** Layout组件标识 */
+ public final static String LAYOUT = "Layout";
+
+ /** 校验返回结果码 */
+ public final static String UNIQUE = "0";
+ public final static String NOT_UNIQUE = "1";
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
new file mode 100644
index 00000000..2a31e70f
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
@@ -0,0 +1,94 @@
+package com.ruoyi.common.core.controller;
+
+import java.beans.PropertyEditorSupport;
+import java.util.Date;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.sql.SqlUtil;
+
+/**
+ * web层通用数据处理
+ *
+ * @author ruoyi
+ */
+public class BaseController
+{
+ protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
+
+ /**
+ * 将前台传递过来的日期格式的字符串,自动转化为Date类型
+ */
+ @InitBinder
+ public void initBinder(WebDataBinder binder)
+ {
+ // Date 类型转换
+ binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
+ {
+ @Override
+ public void setAsText(String text)
+ {
+ setValue(DateUtils.parseDate(text));
+ }
+ });
+ }
+
+ /**
+ * 设置请求分页数据
+ */
+ protected void startPage()
+ {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+ if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
+ {
+ String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+ PageHelper.startPage(pageNum, pageSize, orderBy);
+ }
+ }
+
+ /**
+ * 响应请求分页数据
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ protected TableDataInfo getDataTable(List> list)
+ {
+ TableDataInfo rspData = new TableDataInfo();
+ rspData.setCode(HttpStatus.SUCCESS);
+ rspData.setMsg("查询成功");
+ rspData.setRows(list);
+ rspData.setTotal(new PageInfo(list).getTotal());
+ return rspData;
+ }
+
+ /**
+ * 响应返回结果
+ *
+ * @param rows 影响行数
+ * @return 操作结果
+ */
+ protected AjaxResult toAjax(int rows)
+ {
+ return rows > 0 ? AjaxResult.success() : AjaxResult.error();
+ }
+
+ /**
+ * 页面跳转
+ */
+ public String redirect(String url)
+ {
+ return StringUtils.format("redirect:{}", url);
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
new file mode 100644
index 00000000..28e5a688
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
@@ -0,0 +1,148 @@
+package com.ruoyi.common.core.domain;
+
+import java.util.HashMap;
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 操作消息提醒
+ *
+ * @author ruoyi
+ */
+public class AjaxResult extends HashMap
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 状态码 */
+ public static final String CODE_TAG = "code";
+
+ /** 返回内容 */
+ public static final String MSG_TAG = "msg";
+
+ /** 数据对象 */
+ public static final String DATA_TAG = "data";
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+ */
+ public AjaxResult()
+ {
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param code 状态码
+ * @param msg 返回内容
+ */
+ public AjaxResult(int code, String msg)
+ {
+ super.put(CODE_TAG, code);
+ super.put(MSG_TAG, msg);
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param code 状态码
+ * @param msg 返回内容
+ * @param data 数据对象
+ */
+ public AjaxResult(int code, String msg, Object data)
+ {
+ super.put(CODE_TAG, code);
+ super.put(MSG_TAG, msg);
+ if (StringUtils.isNotNull(data))
+ {
+ super.put(DATA_TAG, data);
+ }
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success()
+ {
+ return AjaxResult.success("操作成功");
+ }
+
+ /**
+ * 返回成功数据
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success(Object data)
+ {
+ return AjaxResult.success("操作成功", data);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg)
+ {
+ return AjaxResult.success(msg, null);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg, Object data)
+ {
+ return new AjaxResult(HttpStatus.SUCCESS, msg, data);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @return
+ */
+ public static AjaxResult error()
+ {
+ return AjaxResult.error("操作失败");
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg)
+ {
+ return AjaxResult.error(msg, null);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg, Object data)
+ {
+ return new AjaxResult(HttpStatus.ERROR, msg, data);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param code 状态码
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult error(int code, String msg)
+ {
+ return new AjaxResult(code, msg, null);
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
new file mode 100644
index 00000000..b5d13620
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
@@ -0,0 +1,153 @@
+package com.ruoyi.common.core.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * Entity基类
+ *
+ * @author ruoyi
+ */
+public class BaseEntity implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 搜索值 */
+ private String searchValue;
+
+ /** 创建者 */
+ private String createBy;
+
+ /** 创建时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /** 更新者 */
+ private String updateBy;
+
+ /** 更新时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /** 备注 */
+ private String remark;
+
+ /** 开始时间 */
+ @JsonIgnore
+ private String beginTime;
+
+ /** 结束时间 */
+ @JsonIgnore
+ private String endTime;
+
+ private String sql;
+
+ public String getSql() {
+ return sql;
+ }
+
+ public void setSql(String sql) {
+ this.sql = sql;
+ }
+
+ /** 请求参数 */
+ private Map params;
+
+ public String getSearchValue()
+ {
+ return searchValue;
+ }
+
+ public void setSearchValue(String searchValue)
+ {
+ this.searchValue = searchValue;
+ }
+
+ public String getCreateBy()
+ {
+ return createBy;
+ }
+
+ public void setCreateBy(String createBy)
+ {
+ this.createBy = createBy;
+ }
+
+ public Date getCreateTime()
+ {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime)
+ {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateBy()
+ {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy)
+ {
+ this.updateBy = updateBy;
+ }
+
+ public Date getUpdateTime()
+ {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime)
+ {
+ this.updateTime = updateTime;
+ }
+
+ public String getRemark()
+ {
+ return remark;
+ }
+
+ public void setRemark(String remark)
+ {
+ this.remark = remark;
+ }
+
+ public String getBeginTime()
+ {
+ return beginTime;
+ }
+
+ public void setBeginTime(String beginTime)
+ {
+ this.beginTime = beginTime;
+ }
+
+ public String getEndTime()
+ {
+ return endTime;
+ }
+
+ public void setEndTime(String endTime)
+ {
+ this.endTime = endTime;
+ }
+
+ public Map getParams()
+ {
+ if (params == null)
+ {
+ params = new HashMap<>();
+ }
+ return params;
+ }
+
+ public void setParams(Map params)
+ {
+ this.params = params;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
new file mode 100644
index 00000000..a180a18c
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
@@ -0,0 +1,79 @@
+package com.ruoyi.common.core.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tree基类
+ *
+ * @author ruoyi
+ */
+public class TreeEntity extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 父菜单名称 */
+ private String parentName;
+
+ /** 父菜单ID */
+ private Long parentId;
+
+ /** 显示顺序 */
+ private Integer orderNum;
+
+ /** 祖级列表 */
+ private String ancestors;
+
+ /** 子部门 */
+ private List> children = new ArrayList<>();
+
+ public String getParentName()
+ {
+ return parentName;
+ }
+
+ public void setParentName(String parentName)
+ {
+ this.parentName = parentName;
+ }
+
+ public Long getParentId()
+ {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId)
+ {
+ this.parentId = parentId;
+ }
+
+ public Integer getOrderNum()
+ {
+ return orderNum;
+ }
+
+ public void setOrderNum(Integer orderNum)
+ {
+ this.orderNum = orderNum;
+ }
+
+ public String getAncestors()
+ {
+ return ancestors;
+ }
+
+ public void setAncestors(String ancestors)
+ {
+ this.ancestors = ancestors;
+ }
+
+ public List> getChildren()
+ {
+ return children;
+ }
+
+ public void setChildren(List> children)
+ {
+ this.children = children;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
new file mode 100644
index 00000000..bd835db9
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java
@@ -0,0 +1,77 @@
+package com.ruoyi.common.core.domain;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.stream.Collectors;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+
+/**
+ * Treeselect树结构实体类
+ *
+ * @author ruoyi
+ */
+public class TreeSelect implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 节点ID */
+ private Long id;
+
+ /** 节点名称 */
+ private String label;
+
+ /** 子节点 */
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private List children;
+
+ public TreeSelect()
+ {
+
+ }
+
+ public TreeSelect(SysDept dept)
+ {
+ this.id = dept.getDeptId();
+ this.label = dept.getDeptName();
+ this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+ }
+
+ public TreeSelect(SysMenu menu)
+ {
+ this.id = menu.getMenuId();
+ this.label = menu.getMenuName();
+ this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public String getLabel()
+ {
+ return label;
+ }
+
+ public void setLabel(String label)
+ {
+ this.label = label;
+ }
+
+ public List getChildren()
+ {
+ return children;
+ }
+
+ public void setChildren(List children)
+ {
+ this.children = children;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
new file mode 100644
index 00000000..c9238e23
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
@@ -0,0 +1,202 @@
+package com.ruoyi.common.core.domain.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 部门表 sys_dept
+ *
+ * @author ruoyi
+ */
+public class SysDept extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 部门ID */
+ private Long deptId;
+
+ /** 父部门ID */
+ private Long parentId;
+
+ /** 祖级列表 */
+ private String ancestors;
+
+ /** 部门名称 */
+ private String deptName;
+
+ /** 显示顺序 */
+ private String orderNum;
+
+ /** 负责人 */
+ private String leader;
+
+ /** 联系电话 */
+ private String phone;
+
+ /** 邮箱 */
+ private String email;
+
+ /** 部门状态:0正常,1停用 */
+ private String status;
+
+ /** 删除标志(0代表存在 2代表删除) */
+ private String delFlag;
+
+ /** 父部门名称 */
+ private String parentName;
+
+ /** 子部门 */
+ private List children = new ArrayList();
+
+ public Long getDeptId()
+ {
+ return deptId;
+ }
+
+ public void setDeptId(Long deptId)
+ {
+ this.deptId = deptId;
+ }
+
+ public Long getParentId()
+ {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId)
+ {
+ this.parentId = parentId;
+ }
+
+ public String getAncestors()
+ {
+ return ancestors;
+ }
+
+ public void setAncestors(String ancestors)
+ {
+ this.ancestors = ancestors;
+ }
+
+ @NotBlank(message = "部门名称不能为空")
+ @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+ public String getDeptName()
+ {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName)
+ {
+ this.deptName = deptName;
+ }
+
+ @NotBlank(message = "显示顺序不能为空")
+ public String getOrderNum()
+ {
+ return orderNum;
+ }
+
+ public void setOrderNum(String orderNum)
+ {
+ this.orderNum = orderNum;
+ }
+
+ public String getLeader()
+ {
+ return leader;
+ }
+
+ public void setLeader(String leader)
+ {
+ this.leader = leader;
+ }
+
+ @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
+ public String getPhone()
+ {
+ return phone;
+ }
+
+ public void setPhone(String phone)
+ {
+ this.phone = phone;
+ }
+
+ @Email(message = "邮箱格式不正确")
+ @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+ public String getEmail()
+ {
+ return email;
+ }
+
+ public void setEmail(String email)
+ {
+ this.email = email;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ public String getDelFlag()
+ {
+ return delFlag;
+ }
+
+ public void setDelFlag(String delFlag)
+ {
+ this.delFlag = delFlag;
+ }
+
+ public String getParentName()
+ {
+ return parentName;
+ }
+
+ public void setParentName(String parentName)
+ {
+ this.parentName = parentName;
+ }
+
+ public List getChildren()
+ {
+ return children;
+ }
+
+ public void setChildren(List children)
+ {
+ this.children = children;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("deptId", getDeptId())
+ .append("parentId", getParentId())
+ .append("ancestors", getAncestors())
+ .append("deptName", getDeptName())
+ .append("orderNum", getOrderNum())
+ .append("leader", getLeader())
+ .append("phone", getPhone())
+ .append("email", getEmail())
+ .append("status", getStatus())
+ .append("delFlag", getDelFlag())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
new file mode 100644
index 00000000..3f152b34
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
@@ -0,0 +1,176 @@
+package com.ruoyi.common.core.domain.entity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.annotation.Excel.ColumnType;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 字典数据表 sys_dict_data
+ *
+ * @author ruoyi
+ */
+public class SysDictData extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 字典编码 */
+ @Excel(name = "字典编码", cellType = ColumnType.NUMERIC)
+ private Long dictCode;
+
+ /** 字典排序 */
+ @Excel(name = "字典排序", cellType = ColumnType.NUMERIC)
+ private Long dictSort;
+
+ /** 字典标签 */
+ @Excel(name = "字典标签")
+ private String dictLabel;
+
+ /** 字典键值 */
+ @Excel(name = "字典键值")
+ private String dictValue;
+
+ /** 字典类型 */
+ @Excel(name = "字典类型")
+ private String dictType;
+
+ /** 样式属性(其他样式扩展) */
+ private String cssClass;
+
+ /** 表格字典样式 */
+ private String listClass;
+
+ /** 是否默认(Y是 N否) */
+ @Excel(name = "是否默认", readConverterExp = "Y=是,N=否")
+ private String isDefault;
+
+ /** 状态(0正常 1停用) */
+ @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
+ private String status;
+
+ public Long getDictCode()
+ {
+ return dictCode;
+ }
+
+ public void setDictCode(Long dictCode)
+ {
+ this.dictCode = dictCode;
+ }
+
+ public Long getDictSort()
+ {
+ return dictSort;
+ }
+
+ public void setDictSort(Long dictSort)
+ {
+ this.dictSort = dictSort;
+ }
+
+ @NotBlank(message = "字典标签不能为空")
+ @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
+ public String getDictLabel()
+ {
+ return dictLabel;
+ }
+
+ public void setDictLabel(String dictLabel)
+ {
+ this.dictLabel = dictLabel;
+ }
+
+ @NotBlank(message = "字典键值不能为空")
+ @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
+ public String getDictValue()
+ {
+ return dictValue;
+ }
+
+ public void setDictValue(String dictValue)
+ {
+ this.dictValue = dictValue;
+ }
+
+ @NotBlank(message = "字典类型不能为空")
+ @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
+ public String getDictType()
+ {
+ return dictType;
+ }
+
+ public void setDictType(String dictType)
+ {
+ this.dictType = dictType;
+ }
+
+ @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
+ public String getCssClass()
+ {
+ return cssClass;
+ }
+
+ public void setCssClass(String cssClass)
+ {
+ this.cssClass = cssClass;
+ }
+
+ public String getListClass()
+ {
+ return listClass;
+ }
+
+ public void setListClass(String listClass)
+ {
+ this.listClass = listClass;
+ }
+
+ public boolean getDefault()
+ {
+ return UserConstants.YES.equals(this.isDefault) ? true : false;
+ }
+
+ public String getIsDefault()
+ {
+ return isDefault;
+ }
+
+ public void setIsDefault(String isDefault)
+ {
+ this.isDefault = isDefault;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("dictCode", getDictCode())
+ .append("dictSort", getDictSort())
+ .append("dictLabel", getDictLabel())
+ .append("dictValue", getDictValue())
+ .append("dictType", getDictType())
+ .append("cssClass", getCssClass())
+ .append("listClass", getListClass())
+ .append("isDefault", getIsDefault())
+ .append("status", getStatus())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("remark", getRemark())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
new file mode 100644
index 00000000..d2c42498
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
@@ -0,0 +1,94 @@
+package com.ruoyi.common.core.domain.entity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.annotation.Excel.ColumnType;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 字典类型表 sys_dict_type
+ *
+ * @author ruoyi
+ */
+public class SysDictType extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 字典主键 */
+ @Excel(name = "字典主键", cellType = ColumnType.NUMERIC)
+ private Long dictId;
+
+ /** 字典名称 */
+ @Excel(name = "字典名称")
+ private String dictName;
+
+ /** 字典类型 */
+ @Excel(name = "字典类型")
+ private String dictType;
+
+ /** 状态(0正常 1停用) */
+ @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
+ private String status;
+
+ public Long getDictId()
+ {
+ return dictId;
+ }
+
+ public void setDictId(Long dictId)
+ {
+ this.dictId = dictId;
+ }
+
+ @NotBlank(message = "字典名称不能为空")
+ @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
+ public String getDictName()
+ {
+ return dictName;
+ }
+
+ public void setDictName(String dictName)
+ {
+ this.dictName = dictName;
+ }
+
+ @NotBlank(message = "字典类型不能为空")
+ @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
+ public String getDictType()
+ {
+ return dictType;
+ }
+
+ public void setDictType(String dictType)
+ {
+ this.dictType = dictType;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("dictId", getDictId())
+ .append("dictName", getDictName())
+ .append("dictType", getDictType())
+ .append("status", getStatus())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("remark", getRemark())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
new file mode 100644
index 00000000..94d654ae
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -0,0 +1,245 @@
+package com.ruoyi.common.core.domain.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 菜单权限表 sys_menu
+ *
+ * @author ruoyi
+ */
+public class SysMenu extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 菜单ID */
+ private Long menuId;
+
+ /** 菜单名称 */
+ private String menuName;
+
+ /** 父菜单名称 */
+ private String parentName;
+
+ /** 父菜单ID */
+ private Long parentId;
+
+ /** 显示顺序 */
+ private String orderNum;
+
+ /** 路由地址 */
+ private String path;
+
+ /** 组件路径 */
+ private String component;
+
+ /** 是否为外链(0是 1否) */
+ private String isFrame;
+
+ /** 是否缓存(0缓存 1不缓存) */
+ private String isCache;
+
+ /** 类型(M目录 C菜单 F按钮) */
+ private String menuType;
+
+ /** 显示状态(0显示 1隐藏) */
+ private String visible;
+
+ /** 菜单状态(0显示 1隐藏) */
+ private String status;
+
+ /** 权限字符串 */
+ private String perms;
+
+ /** 菜单图标 */
+ private String icon;
+
+ /** 子菜单 */
+ private List children = new ArrayList();
+
+ public Long getMenuId()
+ {
+ return menuId;
+ }
+
+ public void setMenuId(Long menuId)
+ {
+ this.menuId = menuId;
+ }
+
+ @NotBlank(message = "菜单名称不能为空")
+ @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
+ public String getMenuName()
+ {
+ return menuName;
+ }
+
+ public void setMenuName(String menuName)
+ {
+ this.menuName = menuName;
+ }
+
+ public String getParentName()
+ {
+ return parentName;
+ }
+
+ public void setParentName(String parentName)
+ {
+ this.parentName = parentName;
+ }
+
+ public Long getParentId()
+ {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId)
+ {
+ this.parentId = parentId;
+ }
+
+ @NotBlank(message = "显示顺序不能为空")
+ public String getOrderNum()
+ {
+ return orderNum;
+ }
+
+ public void setOrderNum(String orderNum)
+ {
+ this.orderNum = orderNum;
+ }
+
+ @Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
+ public String getPath()
+ {
+ return path;
+ }
+
+ public void setPath(String path)
+ {
+ this.path = path;
+ }
+
+ @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
+ public String getComponent()
+ {
+ return component;
+ }
+
+ public void setComponent(String component)
+ {
+ this.component = component;
+ }
+
+ public String getIsFrame()
+ {
+ return isFrame;
+ }
+
+ public void setIsFrame(String isFrame)
+ {
+ this.isFrame = isFrame;
+ }
+
+ public String getIsCache()
+ {
+ return isCache;
+ }
+
+ public void setIsCache(String isCache)
+ {
+ this.isCache = isCache;
+ }
+
+ @NotBlank(message = "菜单类型不能为空")
+ public String getMenuType()
+ {
+ return menuType;
+ }
+
+ public void setMenuType(String menuType)
+ {
+ this.menuType = menuType;
+ }
+
+ public String getVisible()
+ {
+ return visible;
+ }
+
+ public void setVisible(String visible)
+ {
+ this.visible = visible;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
+ public String getPerms()
+ {
+ return perms;
+ }
+
+ public void setPerms(String perms)
+ {
+ this.perms = perms;
+ }
+
+ public String getIcon()
+ {
+ return icon;
+ }
+
+ public void setIcon(String icon)
+ {
+ this.icon = icon;
+ }
+
+ public List getChildren()
+ {
+ return children;
+ }
+
+ public void setChildren(List children)
+ {
+ this.children = children;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("menuId", getMenuId())
+ .append("menuName", getMenuName())
+ .append("parentId", getParentId())
+ .append("orderNum", getOrderNum())
+ .append("path", getPath())
+ .append("component", getComponent())
+ .append("isFrame", getIsFrame())
+ .append("IsCache", getIsCache())
+ .append("menuType", getMenuType())
+ .append("visible", getVisible())
+ .append("status ", getStatus())
+ .append("perms", getPerms())
+ .append("icon", getIcon())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("remark", getRemark())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
new file mode 100644
index 00000000..2991595a
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
@@ -0,0 +1,226 @@
+package com.ruoyi.common.core.domain.entity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.annotation.Excel.ColumnType;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 角色表 sys_role
+ *
+ * @author ruoyi
+ */
+public class SysRole extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 角色ID */
+ @Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
+ private Long roleId;
+
+ /** 角色名称 */
+ @Excel(name = "角色名称")
+ private String roleName;
+
+ /** 角色权限 */
+ @Excel(name = "角色权限")
+ private String roleKey;
+
+ /** 角色排序 */
+ @Excel(name = "角色排序")
+ private String roleSort;
+
+ /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) */
+ @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限")
+ private String dataScope;
+
+ /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */
+ private boolean menuCheckStrictly;
+
+ /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */
+ private boolean deptCheckStrictly;
+
+ /** 角色状态(0正常 1停用) */
+ @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用")
+ private String status;
+
+ /** 删除标志(0代表存在 2代表删除) */
+ private String delFlag;
+
+ /** 用户是否存在此角色标识 默认不存在 */
+ private boolean flag = false;
+
+ /** 菜单组 */
+ private Long[] menuIds;
+
+ /** 部门组(数据权限) */
+ private Long[] deptIds;
+
+ public SysRole()
+ {
+
+ }
+
+ public SysRole(Long roleId)
+ {
+ this.roleId = roleId;
+ }
+
+ public Long getRoleId()
+ {
+ return roleId;
+ }
+
+ public void setRoleId(Long roleId)
+ {
+ this.roleId = roleId;
+ }
+
+ public boolean isAdmin()
+ {
+ return isAdmin(this.roleId);
+ }
+
+ public static boolean isAdmin(Long roleId)
+ {
+ return roleId != null && 1L == roleId;
+ }
+
+ @NotBlank(message = "角色名称不能为空")
+ @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
+ public String getRoleName()
+ {
+ return roleName;
+ }
+
+ public void setRoleName(String roleName)
+ {
+ this.roleName = roleName;
+ }
+
+ @NotBlank(message = "权限字符不能为空")
+ @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
+ public String getRoleKey()
+ {
+ return roleKey;
+ }
+
+ public void setRoleKey(String roleKey)
+ {
+ this.roleKey = roleKey;
+ }
+
+ @NotBlank(message = "显示顺序不能为空")
+ public String getRoleSort()
+ {
+ return roleSort;
+ }
+
+ public void setRoleSort(String roleSort)
+ {
+ this.roleSort = roleSort;
+ }
+
+ public String getDataScope()
+ {
+ return dataScope;
+ }
+
+ public void setDataScope(String dataScope)
+ {
+ this.dataScope = dataScope;
+ }
+
+ public boolean isMenuCheckStrictly()
+ {
+ return menuCheckStrictly;
+ }
+
+ public void setMenuCheckStrictly(boolean menuCheckStrictly)
+ {
+ this.menuCheckStrictly = menuCheckStrictly;
+ }
+
+ public boolean isDeptCheckStrictly()
+ {
+ return deptCheckStrictly;
+ }
+
+ public void setDeptCheckStrictly(boolean deptCheckStrictly)
+ {
+ this.deptCheckStrictly = deptCheckStrictly;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ public String getDelFlag()
+ {
+ return delFlag;
+ }
+
+ public void setDelFlag(String delFlag)
+ {
+ this.delFlag = delFlag;
+ }
+
+ public boolean isFlag()
+ {
+ return flag;
+ }
+
+ public void setFlag(boolean flag)
+ {
+ this.flag = flag;
+ }
+
+ public Long[] getMenuIds()
+ {
+ return menuIds;
+ }
+
+ public void setMenuIds(Long[] menuIds)
+ {
+ this.menuIds = menuIds;
+ }
+
+ public Long[] getDeptIds()
+ {
+ return deptIds;
+ }
+
+ public void setDeptIds(Long[] deptIds)
+ {
+ this.deptIds = deptIds;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("roleId", getRoleId())
+ .append("roleName", getRoleName())
+ .append("roleKey", getRoleKey())
+ .append("roleSort", getRoleSort())
+ .append("dataScope", getDataScope())
+ .append("menuCheckStrictly", isMenuCheckStrictly())
+ .append("deptCheckStrictly", isDeptCheckStrictly())
+ .append("status", getStatus())
+ .append("delFlag", getDelFlag())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("remark", getRemark())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
new file mode 100644
index 00000000..d08668ab
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -0,0 +1,328 @@
+package com.ruoyi.common.core.domain.entity;
+
+import java.util.Date;
+import java.util.List;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.annotation.Excel.ColumnType;
+import com.ruoyi.common.annotation.Excel.Type;
+import com.ruoyi.common.annotation.Excels;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 用户对象 sys_user
+ *
+ * @author ruoyi
+ */
+public class SysUser extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 用户ID */
+ @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
+ private Long userId;
+
+ /** 部门ID */
+ @Excel(name = "部门编号", type = Type.IMPORT)
+ private Long deptId;
+
+ /** 用户账号 */
+ @Excel(name = "登录名称")
+ private String userName;
+
+ /** 用户昵称 */
+ @Excel(name = "用户名称")
+ private String nickName;
+
+ /** 用户邮箱 */
+ @Excel(name = "用户邮箱")
+ private String email;
+
+ /** 手机号码 */
+ @Excel(name = "手机号码")
+ private String phonenumber;
+
+ /** 用户性别 */
+ @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
+ private String sex;
+
+ /** 用户头像 */
+ private String avatar;
+
+ /** 密码 */
+ private String password;
+
+ /** 盐加密 */
+ private String salt;
+
+ /** 帐号状态(0正常 1停用) */
+ @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
+ private String status;
+
+ /** 删除标志(0代表存在 2代表删除) */
+ private String delFlag;
+
+ /** 最后登录IP */
+ @Excel(name = "最后登录IP", type = Type.EXPORT)
+ private String loginIp;
+
+ /** 最后登录时间 */
+ @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
+ private Date loginDate;
+
+ /** 部门对象 */
+ @Excels({
+ @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
+ @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
+ })
+ private SysDept dept;
+
+ /** 角色对象 */
+ private List roles;
+
+ /** 角色组 */
+ private Long[] roleIds;
+
+ /** 岗位组 */
+ private Long[] postIds;
+
+ public SysUser()
+ {
+
+ }
+
+ public SysUser(Long userId)
+ {
+ this.userId = userId;
+ }
+
+ public Long getUserId()
+ {
+ return userId;
+ }
+
+ public void setUserId(Long userId)
+ {
+ this.userId = userId;
+ }
+
+ public boolean isAdmin()
+ {
+ return isAdmin(this.userId);
+ }
+
+ public static boolean isAdmin(Long userId)
+ {
+ return userId != null && 1L == userId;
+ }
+
+ public Long getDeptId()
+ {
+ return deptId;
+ }
+
+ public void setDeptId(Long deptId)
+ {
+ this.deptId = deptId;
+ }
+
+ @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+ public String getNickName()
+ {
+ return nickName;
+ }
+
+ public void setNickName(String nickName)
+ {
+ this.nickName = nickName;
+ }
+
+ @NotBlank(message = "用户账号不能为空")
+ @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+ public String getUserName()
+ {
+ return userName;
+ }
+
+ public void setUserName(String userName)
+ {
+ this.userName = userName;
+ }
+
+ @Email(message = "邮箱格式不正确")
+ @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+ public String getEmail()
+ {
+ return email;
+ }
+
+ public void setEmail(String email)
+ {
+ this.email = email;
+ }
+
+ @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
+ public String getPhonenumber()
+ {
+ return phonenumber;
+ }
+
+ public void setPhonenumber(String phonenumber)
+ {
+ this.phonenumber = phonenumber;
+ }
+
+ public String getSex()
+ {
+ return sex;
+ }
+
+ public void setSex(String sex)
+ {
+ this.sex = sex;
+ }
+
+ public String getAvatar()
+ {
+ return avatar;
+ }
+
+ public void setAvatar(String avatar)
+ {
+ this.avatar = avatar;
+ }
+
+ @JsonIgnore
+ @JsonProperty
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public String getSalt()
+ {
+ return salt;
+ }
+
+ public void setSalt(String salt)
+ {
+ this.salt = salt;
+ }
+
+ public String getStatus()
+ {
+ return status;
+ }
+
+ public void setStatus(String status)
+ {
+ this.status = status;
+ }
+
+ public String getDelFlag()
+ {
+ return delFlag;
+ }
+
+ public void setDelFlag(String delFlag)
+ {
+ this.delFlag = delFlag;
+ }
+
+ public String getLoginIp()
+ {
+ return loginIp;
+ }
+
+ public void setLoginIp(String loginIp)
+ {
+ this.loginIp = loginIp;
+ }
+
+ public Date getLoginDate()
+ {
+ return loginDate;
+ }
+
+ public void setLoginDate(Date loginDate)
+ {
+ this.loginDate = loginDate;
+ }
+
+ public SysDept getDept()
+ {
+ return dept;
+ }
+
+ public void setDept(SysDept dept)
+ {
+ this.dept = dept;
+ }
+
+ public List getRoles()
+ {
+ return roles;
+ }
+
+ public void setRoles(List roles)
+ {
+ this.roles = roles;
+ }
+
+ public Long[] getRoleIds()
+ {
+ return roleIds;
+ }
+
+ public void setRoleIds(Long[] roleIds)
+ {
+ this.roleIds = roleIds;
+ }
+
+ public Long[] getPostIds()
+ {
+ return postIds;
+ }
+
+ public void setPostIds(Long[] postIds)
+ {
+ this.postIds = postIds;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("userId", getUserId())
+ .append("deptId", getDeptId())
+ .append("userName", getUserName())
+ .append("nickName", getNickName())
+ .append("email", getEmail())
+ .append("phonenumber", getPhonenumber())
+ .append("sex", getSex())
+ .append("avatar", getAvatar())
+ .append("password", getPassword())
+ .append("salt", getSalt())
+ .append("status", getStatus())
+ .append("delFlag", getDelFlag())
+ .append("loginIp", getLoginIp())
+ .append("loginDate", getLoginDate())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("remark", getRemark())
+ .append("dept", getDept())
+ .toString();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
new file mode 100644
index 00000000..03948b43
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
@@ -0,0 +1,69 @@
+package com.ruoyi.common.core.domain.model;
+
+/**
+ * 用户登录对象
+ *
+ * @author ruoyi
+ */
+public class LoginBody
+{
+ /**
+ * 用户名
+ */
+ private String username;
+
+ /**
+ * 用户密码
+ */
+ private String password;
+
+ /**
+ * 验证码
+ */
+ private String code;
+
+ /**
+ * 唯一标识
+ */
+ private String uuid = "";
+
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public String getCode()
+ {
+ return code;
+ }
+
+ public void setCode(String code)
+ {
+ this.code = code;
+ }
+
+ public String getUuid()
+ {
+ return uuid;
+ }
+
+ public void setUuid(String uuid)
+ {
+ this.uuid = uuid;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
new file mode 100644
index 00000000..6e3f1c6b
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
@@ -0,0 +1,228 @@
+package com.ruoyi.common.core.domain.model;
+
+import java.util.Collection;
+import java.util.Set;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.ruoyi.common.core.domain.entity.SysUser;
+
+/**
+ * 登录用户身份权限
+ *
+ * @author ruoyi
+ */
+public class LoginUser implements UserDetails
+{
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用户唯一标识
+ */
+ private String token;
+
+ /**
+ * 登录时间
+ */
+ private Long loginTime;
+
+ /**
+ * 过期时间
+ */
+ private Long expireTime;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ /**
+ * 登录地点
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 权限列表
+ */
+ private Set permissions;
+
+ /**
+ * 用户信息
+ */
+ private SysUser user;
+
+ public String getToken()
+ {
+ return token;
+ }
+
+ public void setToken(String token)
+ {
+ this.token = token;
+ }
+
+ public LoginUser()
+ {
+ }
+
+ public LoginUser(SysUser user, Set permissions)
+ {
+ this.user = user;
+ this.permissions = permissions;
+ }
+
+ @JsonIgnore
+ @Override
+ public String getPassword()
+ {
+ return user.getPassword();
+ }
+
+ @Override
+ public String getUsername()
+ {
+ return user.getUserName();
+ }
+
+ /**
+ * 账户是否未过期,过期无法验证
+ */
+ @JsonIgnore
+ @Override
+ public boolean isAccountNonExpired()
+ {
+ return true;
+ }
+
+ /**
+ * 指定用户是否解锁,锁定的用户无法进行身份验证
+ *
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isAccountNonLocked()
+ {
+ return true;
+ }
+
+ /**
+ * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
+ *
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isCredentialsNonExpired()
+ {
+ return true;
+ }
+
+ /**
+ * 是否可用 ,禁用的用户不能身份验证
+ *
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isEnabled()
+ {
+ return true;
+ }
+
+ public Long getLoginTime()
+ {
+ return loginTime;
+ }
+
+ public void setLoginTime(Long loginTime)
+ {
+ this.loginTime = loginTime;
+ }
+
+ public String getIpaddr()
+ {
+ return ipaddr;
+ }
+
+ public void setIpaddr(String ipaddr)
+ {
+ this.ipaddr = ipaddr;
+ }
+
+ public String getLoginLocation()
+ {
+ return loginLocation;
+ }
+
+ public void setLoginLocation(String loginLocation)
+ {
+ this.loginLocation = loginLocation;
+ }
+
+ public String getBrowser()
+ {
+ return browser;
+ }
+
+ public void setBrowser(String browser)
+ {
+ this.browser = browser;
+ }
+
+ public String getOs()
+ {
+ return os;
+ }
+
+ public void setOs(String os)
+ {
+ this.os = os;
+ }
+
+ public Long getExpireTime()
+ {
+ return expireTime;
+ }
+
+ public void setExpireTime(Long expireTime)
+ {
+ this.expireTime = expireTime;
+ }
+
+ public Set getPermissions()
+ {
+ return permissions;
+ }
+
+ public void setPermissions(Set permissions)
+ {
+ this.permissions = permissions;
+ }
+
+ public SysUser getUser()
+ {
+ return user;
+ }
+
+ public void setUser(SysUser user)
+ {
+ this.user = user;
+ }
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities()
+ {
+ return null;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
new file mode 100644
index 00000000..6fba8837
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
@@ -0,0 +1,72 @@
+package com.ruoyi.common.core.page;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 分页数据
+ *
+ * @author ruoyi
+ */
+public class PageDomain
+{
+ /** 当前记录起始索引 */
+ private Integer pageNum;
+
+ /** 每页显示记录数 */
+ private Integer pageSize;
+
+ /** 排序列 */
+ private String orderByColumn;
+
+ /** 排序的方向desc或者asc */
+ private String isAsc = "asc";
+
+ public String getOrderBy()
+ {
+ if (StringUtils.isEmpty(orderByColumn))
+ {
+ return "";
+ }
+ return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
+ }
+
+ public Integer getPageNum()
+ {
+ return pageNum;
+ }
+
+ public void setPageNum(Integer pageNum)
+ {
+ this.pageNum = pageNum;
+ }
+
+ public Integer getPageSize()
+ {
+ return pageSize;
+ }
+
+ public void setPageSize(Integer pageSize)
+ {
+ this.pageSize = pageSize;
+ }
+
+ public String getOrderByColumn()
+ {
+ return orderByColumn;
+ }
+
+ public void setOrderByColumn(String orderByColumn)
+ {
+ this.orderByColumn = orderByColumn;
+ }
+
+ public String getIsAsc()
+ {
+ return isAsc;
+ }
+
+ public void setIsAsc(String isAsc)
+ {
+ this.isAsc = isAsc;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
new file mode 100644
index 00000000..847685ba
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
@@ -0,0 +1,85 @@
+package com.ruoyi.common.core.page;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 表格分页数据对象
+ *
+ * @author ruoyi
+ */
+public class TableDataInfo implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 总记录数 */
+ private long total;
+
+ /** 列表数据 */
+ private List> rows;
+
+ /** 消息状态码 */
+ private int code;
+
+ /** 消息内容 */
+ private String msg;
+
+ /**
+ * 表格数据对象
+ */
+ public TableDataInfo()
+ {
+ }
+
+ /**
+ * 分页
+ *
+ * @param list 列表数据
+ * @param total 总记录数
+ */
+ public TableDataInfo(List> list, int total)
+ {
+ this.rows = list;
+ this.total = total;
+ }
+
+ public long getTotal()
+ {
+ return total;
+ }
+
+ public void setTotal(long total)
+ {
+ this.total = total;
+ }
+
+ public List> getRows()
+ {
+ return rows;
+ }
+
+ public void setRows(List> rows)
+ {
+ this.rows = rows;
+ }
+
+ public int getCode()
+ {
+ return code;
+ }
+
+ public void setCode(int code)
+ {
+ this.code = code;
+ }
+
+ public String getMsg()
+ {
+ return msg;
+ }
+
+ public void setMsg(String msg)
+ {
+ this.msg = msg;
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
new file mode 100644
index 00000000..14eb1e11
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
@@ -0,0 +1,49 @@
+package com.ruoyi.common.core.page;
+
+import com.ruoyi.common.utils.ServletUtils;
+
+/**
+ * 表格数据处理
+ *
+ * @author ruoyi
+ */
+public class TableSupport
+{
+ /**
+ * 当前记录起始索引
+ */
+ public static final String PAGE_NUM = "pageNum";
+
+ /**
+ * 每页显示记录数
+ */
+ public static final String PAGE_SIZE = "pageSize";
+
+ /**
+ * 排序列
+ */
+ public static final String ORDER_BY_COLUMN = "orderByColumn";
+
+ /**
+ * 排序的方向 "desc" 或者 "asc".
+ */
+ public static final String IS_ASC = "isAsc";
+
+ /**
+ * 封装分页对象
+ */
+ public static PageDomain getPageDomain()
+ {
+ PageDomain pageDomain = new PageDomain();
+ pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));
+ pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));
+ pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
+ pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
+ return pageDomain;
+ }
+
+ public static PageDomain buildPageRequest()
+ {
+ return getPageDomain();
+ }
+}
diff --git a/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
new file mode 100644
index 00000000..ed91f2ec
--- /dev/null
+++ b/Rk-progect/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -0,0 +1,227 @@
+package com.ruoyi.common.core.redis;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.HashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Component;
+
+/**
+ * spring redis 工具类
+ *
+ * @author ruoyi
+ **/
+@SuppressWarnings(value = { "unchecked", "rawtypes" })
+@Component
+public class RedisCache
+{
+ @Autowired
+ public RedisTemplate redisTemplate;
+
+ /**
+ * 缓存基本的对象,Integer、String、实体类等
+ *
+ * @param key 缓存的键值
+ * @param value 缓存的值
+ */
+ public void setCacheObject(final String key, final T value)
+ {
+ redisTemplate.opsForValue().set(key, value);
+ }
+
+ /**
+ * 缓存基本的对象,Integer、String、实体类等
+ *
+ * @param key 缓存的键值
+ * @param value 缓存的值
+ * @param timeout 时间
+ * @param timeUnit 时间颗粒度
+ */
+ public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
+ {
+ redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
+ }
+
+ /**
+ * 设置有效时间
+ *
+ * @param key Redis键
+ * @param timeout 超时时间
+ * @return true=设置成功;false=设置失败
+ */
+ public boolean expire(final String key, final long timeout)
+ {
+ return expire(key, timeout, TimeUnit.SECONDS);
+ }
+
+ /**
+ * 设置有效时间
+ *
+ * @param key Redis键
+ * @param timeout 超时时间
+ * @param unit 时间单位
+ * @return true=设置成功;false=设置失败
+ */
+ public boolean expire(final String key, final long timeout, final TimeUnit unit)
+ {
+ return redisTemplate.expire(key, timeout, unit);
+ }
+
+ /**
+ * 获得缓存的基本对象。
+ *
+ * @param key 缓存键值
+ * @return 缓存键值对应的数据
+ */
+ public T getCacheObject(final String key)
+ {
+ ValueOperations operation = redisTemplate.opsForValue();
+ return operation.get(key);
+ }
+
+ /**
+ * 删除单个对象
+ *
+ * @param key
+ */
+ public boolean deleteObject(final String key)
+ {
+ return redisTemplate.delete(key);
+ }
+
+ /**
+ * 删除集合对象
+ *
+ * @param collection 多个对象
+ * @return
+ */
+ public long deleteObject(final Collection collection)
+ {
+ return redisTemplate.delete(collection);
+ }
+
+ /**
+ * 缓存List数据
+ *
+ * @param key 缓存的键值
+ * @param dataList 待缓存的List数据
+ * @return 缓存的对象
+ */
+ public long setCacheList(final String key, final List dataList)
+ {
+ Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
+ return count == null ? 0 : count;
+ }
+
+ /**
+ * 获得缓存的list对象
+ *
+ * @param key 缓存的键值
+ * @return 缓存键值对应的数据
+ */
+ public List getCacheList(final String key)
+ {
+ return redisTemplate.opsForList().range(key, 0, -1);
+ }
+
+ /**
+ * 缓存Set
+ *
+ * @param key 缓存键值
+ * @param dataSet 缓存的数据
+ * @return 缓存数据的对象
+ */
+ public long setCacheSet(final String key, final Set dataSet)
+ {
+ Long count = redisTemplate.opsForSet().add(key, dataSet);
+ return count == null ? 0 : count;
+ }
+
+ /**
+ * 获得缓存的set
+ *
+ * @param key
+ * @return
+ */
+ public Set getCacheSet(final String key)
+ {
+ return redisTemplate.opsForSet().members(key);
+ }
+
+ /**
+ * 缓存Map
+ *
+ * @param key
+ * @param dataMap
+ */
+ public void setCacheMap(final String key, final Map dataMap)
+ {
+ if (dataMap != null) {
+ redisTemplate.opsForHash().putAll(key, dataMap);
+ }
+ }
+
+ /**
+ * 获得缓存的Map
+ *
+ * @param key
+ * @return
+ */
+ public Map getCacheMap(final String key)
+ {
+ return redisTemplate.opsForHash().entries(key);
+ }
+
+ /**
+ * 往Hash中存入数据
+ *
+ * @param key Redis键
+ * @param hKey Hash键
+ * @param value 值
+ */
+ public void setCacheMapValue(final String key, final String hKey, final T value)
+ {
+ redisTemplate.opsForHash().put(key, hKey, value);
+ }
+
+ /**
+ * 获取Hash中的数据
+ *
+ * @param key Redis键
+ * @param hKey Hash键
+ * @return Hash中的对象
+ */
+ public T getCacheMapValue(final String key, final String hKey)
+ {
+ HashOperations opsForHash = redisTemplate.opsForHash();
+ return opsForHash.get(key, hKey);
+ }
+
+ /**
+ * 获取多个Hash中的数据
+ *
+ * @param key Redis键
+ * @param hKeys Hash键集合
+ * @return Hash对象集合
+ */
+ public List getMultiCacheMapValue(final String key, final Collection