From ff087240b3dee29ce4e14ad0836e76b9fdf312cf Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期二, 19 八月 2025 09:28:07 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/lianhelihua_sh

---
 server/src/main/java/com/doumee/service/system/SystemDictService.java                             |    3 
 .idea/libraries/Maven__io_netty_netty_codec_4_1_118_Final.xml                                     |   13 
 .idea/libraries/Maven__io_netty_netty_buffer_4_1_118_Final.xml                                    |   13 
 .idea/libraries/Maven__com_azure_azure_storage_blob_12_30_0.xml                                   |   13 
 server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java                           |    4 
 .idea/libraries/Maven__io_netty_netty_handler_4_1_118_Final.xml                                   |   13 
 .idea/libraries/Maven__com_azure_azure_storage_common_12_29_0.xml                                 |    8 
 admin/src/components/common/UploadAvatarVideo.vue                                                 |    2 
 server/src/main/java/com/doumee/config/mybatis/MyBatisInterceptor.java                            |   27 
 admin/src/components/business/OperaWorkorderDetailDcaWindow.vue                                   |   42 
 server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java                              |   11 
 server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java                    |  514 ++++++++
 .idea/libraries/Maven__com_nimbusds_nimbus_jose_jwt_10_0_1.xml                                    |   13 
 admin/src/components/common/RichEditor.vue                                                        |   15 
 admin/src/views/business/qrcodes.vue                                                              |  124 ++
 server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                      |   16 
 .idea/libraries/Maven__com_nimbusds_lang_tag_1_7.xml                                              |    8 
 .idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_48.xml                      |   13 
 server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java                   |   45 
 .idea/libraries/Maven__com_azure_azure_xml_1_2_0.xml                                              |    8 
 admin/src/views/business/managersShe.vue                                                          |    6 
 server/src/main/java/com/doumee/api/business/CategoryController.java                              |   26 
 admin/package.json                                                                                |    3 
 server/src/main/java/com/doumee/dao/business/model/CompanyMember.java                             |    6 
 server/src/main/resources/application-test.yml                                                    |   21 
 admin/src/components/common/UploadImage.vue                                                       |    2 
 admin/src/views/business/workorderDbh.vue                                                         |   23 
 server/src/main/java/com/doumee/dao/system/model/SystemDictData.java                              |    2 
 admin/.env.test                                                                                   |    2 
 server/src/main/java/com/doumee/dao/business/model/Workorder.java                                 |    6 
 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_118_Final.xml        |   13 
 .idea/libraries/Maven__com_azure_azure_security_keyvault_secrets_4_9_4.xml                        |   13 
 .idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_118_Final.xml                             |   13 
 admin/src/views/business/workorderShe.vue                                                         |    2 
 server/src/main/java/com/doumee/api/web/WebWorkOrderController.java                               |    6 
 admin/src/components/business/OperaManagersWindow.vue                                             |   98 +
 admin/.env.production                                                                             |    2 
 server/src/main/java/com/doumee/api/system/SystemDictController.java                              |    7 
 server/src/main/java/com/doumee/core/utils/HttpsUtil.java                                         |  128 +
 admin/src/views/business/categoryDcaLocaltion.vue                                                 |    2 
 admin/src/views/business/company.vue                                                              |   34 
 .idea/libraries/Maven__io_netty_netty_codec_http_4_1_118_Final.xml                                |    8 
 server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java                              |    3 
 admin/src/components/common/UploadAvatarImage.vue                                                 |    2 
 server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java |   22 
 server/src/main/java/com/doumee/api/business/CompanyController.java                               |   16 
 .idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_118_Final.xml                |   13 
 server/src/main/java/com/doumee/dao/business/model/Company.java                                   |   12 
 server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java                                      |    3 
 server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java                    |   86 +
 .idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml                                                  |   13 
 admin/src/components/business/OperaWorkorderDetailSheWindow.vue                                   |   41 
 server/src/main/java/com/doumee/biz/system/impl/SystemJobTriggerBizImpl.java                      |    9 
 server/src/main/java/com/doumee/core/utils/azure/AzureBlobUtil.java                               |  146 ++
 .idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_48.xml                      |   13 
 server/src/main/java/com/doumee/api/common/PublicCloudController.java                             |  169 ++
 admin/src/components/common/UploadFaceImg.vue                                                     |    2 
 admin/src/views/business/managersSheNotice.vue                                                    |   23 
 .idea/libraries/Maven__io_netty_netty_transport_4_1_118_Final.xml                                 |    8 
 server/src/main/java/com/doumee/dao/business/vo/CompanyTree.java                                  |   53 
 server/src/main/java/com/doumee/service/business/CompanyService.java                              |    1 
 .idea/libraries/Maven__com_azure_azure_identity_1_15_4.xml                                        |   13 
 server/pom.xml                                                                                    |   61 
 .idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml                                           |   13 
 server/src/main/java/com/doumee/dao/business/CompanyMemberMapper.java                             |    3 
 server/src/main/java/com/doumee/service/system/impl/SystemDictServiceImpl.java                    |   34 
 .idea/libraries/Maven__io_netty_netty_resolver_4_1_118_Final.xml                                  |    8 
 startsh/admin_start.sh                                                                            |   15 
 .idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml                                      |   13 
 admin/src/assets/style/style.scss                                                                 |   13 
 admin/package-lock.json                                                                           |    5 
 .idea/libraries/Maven__io_netty_netty_common_4_1_118_Final.xml                                    |   13 
 admin/src/components/business/OperaCategoryImportWindow.vue                                       |   96 +
 admin/src/api/business/category.js                                                                |    9 
 admin/src/views/business/companyMember.vue                                                        |   31 
 .idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_118_Final.xml      |   13 
 server/src/main/java/com/doumee/core/constants/Constants.java                                     |   50 
 .idea/libraries/Maven__com_microsoft_azure_msal4j_persistence_extension_1_3_0.xml                 |   13 
 .idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_118_Final.xml                  |   13 
 server/src/main/java/com/doumee/dao/system/vo/SystemQrcodeListVO.java                             |   24 
 .idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_11.xml                                |   13 
 server/src/main/java/com/doumee/service/common/EmailService.java                                  |   15 
 admin/.env.development                                                                            |    3 
 .idea/libraries/Maven__io_netty_netty_codec_http2_4_1_118_Final.xml                               |   13 
 admin/src/components/common/UploadFile.vue                                                        |    2 
 .idea/libraries/Maven__io_netty_netty_codec_socks_4_1_118_Final.xml                               |   13 
 admin/src/components/common/Tree.vue                                                              |  145 +-
 admin/src/components/common/UploadFileCommon.vue                                                  |    2 
 admin/src/views/business/categorySheLocaltion.vue                                                 |    2 
 server/src/main/java/com/doumee/dao/business/vo/CategoryDcaProblemDto.java                        |   30 
 admin/src/views/business/categoryDcaProblem.vue                                                   |   29 
 admin/src/views/business/workorderDca.vue                                                         |    7 
 server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java                               |  105 +
 server/src/main/java/com/doumee/dao/business/model/Managers.java                                  |   16 
 admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue                               |   27 
 admin/src/views/index.vue                                                                         |    8 
 server/src/main/java/com/doumee/config/mybatis/DmStdOutImpl.java                                  |   16 
 .idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_118_Final.xml                              |   13 
 .idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_118_Final.xml              |   13 
 server/src/main/resources/application.yml                                                         |   12 
 admin/src/api/business/company.js                                                                 |   10 
 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_118_Final.xml       |   13 
 server/src/main/resources/logback-spring.xml                                                      |    2 
 admin/src/views/business/categoryDbhType.vue                                                      |    2 
 .idea/libraries/Maven__com_nimbusds_content_type_2_3.xml                                          |   13 
 server/src/main/java/com/doumee/dao/web/vo/CategoryMapTree.java                                   |   88 +
 server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java                         |   16 
 server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java                              |    2 
 server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java                              |   23 
 server/src/main/resources/application-dev.yml                                                     |   17 
 .idea/libraries/Maven__com_microsoft_azure_msal4j_1_19_1.xml                                      |   13 
 .idea/libraries/Maven__io_netty_netty_codec_dns_4_1_118_Final.xml                                 |    8 
 .idea/modules.xml                                                                                 |    2 
 admin/src/components/common/upload.vue                                                            |    2 
 server/src/main/java/com/doumee/config/quartz/JobInitializer.java                                 |   13 
 admin/src/views/business/workorderDcaChild.vue                                                    |   26 
 admin/src/views/business/categoryDbhLocaltion.vue                                                 |    6 
 server/src/main/resources/application-pro.yml                                                     |   62 
 .idea/libraries/Maven__com_azure_azure_core_1_55_3.xml                                            |   13 
 admin/src/components/business/OperaWorkorderDetailDbhWindow.vue                                   |   35 
 server/src/main/java/com/doumee/core/utils/FtpUtil.java                                           |    2 
 .idea/libraries/Maven__com_github_stephenc_jcip_jcip_annotations_1_0_1.xml                        |   13 
 .idea/libraries/Maven__com_azure_azure_json_1_5_0.xml                                             |   13 
 .idea/libraries/Maven__com_nimbusds_oauth2_oidc_sdk_11_23.xml                                     |   13 
 /dev/null                                                                                         |    8 
 server/src/main/java/com/doumee/api/web/WebCategoryController.java                                |    8 
 server/src/main/java/com/doumee/dao/business/model/Category.java                                  |    7 
 .idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_118_Final.xml                   |   13 
 admin/src/api/system/dict.js                                                                      |    3 
 admin/src/components/common/TreeNew.vue                                                           |  145 ++
 .idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_15_0.xml                          |   13 
 server/src/main/java/com/doumee/service/business/CategoryService.java                             |    8 
 server/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java                     |   48 
 133 files changed, 3,108 insertions(+), 439 deletions(-)

diff --git a/.idea/libraries/Maven__com_azure_azure_core_1_49_0.xml b/.idea/libraries/Maven__com_azure_azure_core_1_49_0.xml
deleted file mode 100644
index a3a55bc..0000000
--- a/.idea/libraries/Maven__com_azure_azure_core_1_49_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.azure:azure-core:1.49.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core/1.49.0/azure-core-1.49.0.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core/1.49.0/azure-core-1.49.0-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core/1.49.0/azure-core-1.49.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_core_1_55_3.xml b/.idea/libraries/Maven__com_azure_azure_core_1_55_3.xml
new file mode 100644
index 0000000..c6ba0f7
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_core_1_55_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-core:1.55.3">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core/1.55.3/azure-core-1.55.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core/1.55.3/azure-core-1.55.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core/1.55.3/azure-core-1.55.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_11.xml b/.idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_11.xml
new file mode 100644
index 0000000..af95be4
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_11.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-core-http-netty:1.15.11">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core-http-netty/1.15.11/azure-core-http-netty-1.15.11.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core-http-netty/1.15.11/azure-core-http-netty-1.15.11-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core-http-netty/1.15.11/azure-core-http-netty-1.15.11-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_identity_1_15_4.xml b/.idea/libraries/Maven__com_azure_azure_identity_1_15_4.xml
new file mode 100644
index 0000000..137056b
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_identity_1_15_4.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-identity:1.15.4">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-identity/1.15.4/azure-identity-1.15.4.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-identity/1.15.4/azure-identity-1.15.4-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-identity/1.15.4/azure-identity-1.15.4-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_json_1_1_0.xml b/.idea/libraries/Maven__com_azure_azure_json_1_1_0.xml
deleted file mode 100644
index 8cdd4c1..0000000
--- a/.idea/libraries/Maven__com_azure_azure_json_1_1_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.azure:azure-json:1.1.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-json/1.1.0/azure-json-1.1.0.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-json/1.1.0/azure-json-1.1.0-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-json/1.1.0/azure-json-1.1.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_json_1_5_0.xml b/.idea/libraries/Maven__com_azure_azure_json_1_5_0.xml
new file mode 100644
index 0000000..3ac6d62
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_json_1_5_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-json:1.5.0">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-json/1.5.0/azure-json-1.5.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-json/1.5.0/azure-json-1.5.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-json/1.5.0/azure-json-1.5.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_security_keyvault_secrets_4_9_4.xml b/.idea/libraries/Maven__com_azure_azure_security_keyvault_secrets_4_9_4.xml
new file mode 100644
index 0000000..abb4311
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_security_keyvault_secrets_4_9_4.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-security-keyvault-secrets:4.9.4">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-security-keyvault-secrets/4.9.4/azure-security-keyvault-secrets-4.9.4.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-security-keyvault-secrets/4.9.4/azure-security-keyvault-secrets-4.9.4-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-security-keyvault-secrets/4.9.4/azure-security-keyvault-secrets-4.9.4-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_storage_blob_12_14_1.xml b/.idea/libraries/Maven__com_azure_azure_storage_blob_12_14_1.xml
deleted file mode 100644
index 6f74588..0000000
--- a/.idea/libraries/Maven__com_azure_azure_storage_blob_12_14_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.azure:azure-storage-blob:12.14.1">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-blob/12.14.1/azure-storage-blob-12.14.1.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-blob/12.14.1/azure-storage-blob-12.14.1-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-blob/12.14.1/azure-storage-blob-12.14.1-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_storage_blob_12_30_0.xml b/.idea/libraries/Maven__com_azure_azure_storage_blob_12_30_0.xml
new file mode 100644
index 0000000..82a857e
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_storage_blob_12_30_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-storage-blob:12.30.0">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-blob/12.30.0/azure-storage-blob-12.30.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-blob/12.30.0/azure-storage-blob-12.30.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-blob/12.30.0/azure-storage-blob-12.30.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_storage_common_12_25_0.xml b/.idea/libraries/Maven__com_azure_azure_storage_common_12_25_0.xml
deleted file mode 100644
index 1fbae1a..0000000
--- a/.idea/libraries/Maven__com_azure_azure_storage_common_12_25_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.azure:azure-storage-common:12.25.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-common/12.25.0/azure-storage-common-12.25.0.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-common/12.25.0/azure-storage-common-12.25.0-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-common/12.25.0/azure-storage-common-12.25.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_0.xml b/.idea/libraries/Maven__com_azure_azure_storage_common_12_29_0.xml
similarity index 60%
rename from .idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_0.xml
rename to .idea/libraries/Maven__com_azure_azure_storage_common_12_29_0.xml
index e555cb9..911fb60 100644
--- a/.idea/libraries/Maven__com_azure_azure_core_http_netty_1_15_0.xml
+++ b/.idea/libraries/Maven__com_azure_azure_storage_common_12_29_0.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: com.azure:azure-core-http-netty:1.15.0">
+  <library name="Maven: com.azure:azure-storage-common:12.29.0">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core-http-netty/1.15.0/azure-core-http-netty-1.15.0.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-common/12.29.0/azure-storage-common-12.29.0.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core-http-netty/1.15.0/azure-core-http-netty-1.15.0-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-common/12.29.0/azure-storage-common-12.29.0-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-core-http-netty/1.15.0/azure-core-http-netty-1.15.0-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-common/12.29.0/azure-storage-common-12.29.0-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_11_0.xml b/.idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_11_0.xml
deleted file mode 100644
index b9691ea..0000000
--- a/.idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_11_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.azure:azure-storage-internal-avro:12.11.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-internal-avro/12.11.0/azure-storage-internal-avro-12.11.0.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-internal-avro/12.11.0/azure-storage-internal-avro-12.11.0-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-internal-avro/12.11.0/azure-storage-internal-avro-12.11.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_15_0.xml b/.idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_15_0.xml
new file mode 100644
index 0000000..59f5308
--- /dev/null
+++ b/.idea/libraries/Maven__com_azure_azure_storage_internal_avro_12_15_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.azure:azure-storage-internal-avro:12.15.0">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-internal-avro/12.15.0/azure-storage-internal-avro-12.15.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-internal-avro/12.15.0/azure-storage-internal-avro-12.15.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-storage-internal-avro/12.15.0/azure-storage-internal-avro-12.15.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_xml_1_0_0.xml b/.idea/libraries/Maven__com_azure_azure_xml_1_2_0.xml
similarity index 60%
rename from .idea/libraries/Maven__com_azure_azure_xml_1_0_0.xml
rename to .idea/libraries/Maven__com_azure_azure_xml_1_2_0.xml
index fcae0fc..b0a65a5 100644
--- a/.idea/libraries/Maven__com_azure_azure_xml_1_0_0.xml
+++ b/.idea/libraries/Maven__com_azure_azure_xml_1_2_0.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: com.azure:azure-xml:1.0.0">
+  <library name="Maven: com.azure:azure-xml:1.2.0">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.0.0/azure-xml-1.0.0.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.2.0/azure-xml-1.2.0.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.0.0/azure-xml-1.0.0-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.2.0/azure-xml-1.2.0-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.0.0/azure-xml-1.0.0-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.2.0/azure-xml-1.2.0-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_xml_2_10_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_xml_2_10_2.xml
deleted file mode 100644
index 2225e4f..0000000
--- a/.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_xml_2_10_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.2">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.10.2/jackson-dataformat-xml-2.10.2.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.10.2/jackson-dataformat-xml-2.10.2-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.10.2/jackson-dataformat-xml-2.10.2-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_jaxb_annotations_2_10_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_jaxb_annotations_2_10_2.xml
deleted file mode 100644
index a3127f7..0000000
--- a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_jaxb_annotations_2_10_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.2">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.10.2/jackson-module-jaxb-annotations-2.10.2-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_github_stephenc_jcip_jcip_annotations_1_0_1.xml b/.idea/libraries/Maven__com_github_stephenc_jcip_jcip_annotations_1_0_1.xml
new file mode 100644
index 0000000..c3ac1e3
--- /dev/null
+++ b/.idea/libraries/Maven__com_github_stephenc_jcip_jcip_annotations_1_0_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.github.stephenc.jcip:jcip-annotations:1.0-1">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_microsoft_azure_msal4j_1_19_1.xml b/.idea/libraries/Maven__com_microsoft_azure_msal4j_1_19_1.xml
new file mode 100644
index 0000000..3337042
--- /dev/null
+++ b/.idea/libraries/Maven__com_microsoft_azure_msal4j_1_19_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.microsoft.azure:msal4j:1.19.1">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/microsoft/azure/msal4j/1.19.1/msal4j-1.19.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/microsoft/azure/msal4j/1.19.1/msal4j-1.19.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/microsoft/azure/msal4j/1.19.1/msal4j-1.19.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_microsoft_azure_msal4j_persistence_extension_1_3_0.xml b/.idea/libraries/Maven__com_microsoft_azure_msal4j_persistence_extension_1_3_0.xml
new file mode 100644
index 0000000..7123d61
--- /dev/null
+++ b/.idea/libraries/Maven__com_microsoft_azure_msal4j_persistence_extension_1_3_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.microsoft.azure:msal4j-persistence-extension:1.3.0">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/microsoft/azure/msal4j-persistence-extension/1.3.0/msal4j-persistence-extension-1.3.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/microsoft/azure/msal4j-persistence-extension/1.3.0/msal4j-persistence-extension-1.3.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/microsoft/azure/msal4j-persistence-extension/1.3.0/msal4j-persistence-extension-1.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_nimbusds_content_type_2_3.xml b/.idea/libraries/Maven__com_nimbusds_content_type_2_3.xml
new file mode 100644
index 0000000..fb32012
--- /dev/null
+++ b/.idea/libraries/Maven__com_nimbusds_content_type_2_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.nimbusds:content-type:2.3">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/content-type/2.3/content-type-2.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/content-type/2.3/content-type-2.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/content-type/2.3/content-type-2.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_azure_azure_xml_1_0_0.xml b/.idea/libraries/Maven__com_nimbusds_lang_tag_1_7.xml
similarity index 60%
copy from .idea/libraries/Maven__com_azure_azure_xml_1_0_0.xml
copy to .idea/libraries/Maven__com_nimbusds_lang_tag_1_7.xml
index fcae0fc..eb8e845 100644
--- a/.idea/libraries/Maven__com_azure_azure_xml_1_0_0.xml
+++ b/.idea/libraries/Maven__com_nimbusds_lang_tag_1_7.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: com.azure:azure-xml:1.0.0">
+  <library name="Maven: com.nimbusds:lang-tag:1.7">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.0.0/azure-xml-1.0.0.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/lang-tag/1.7/lang-tag-1.7.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.0.0/azure-xml-1.0.0-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/lang-tag/1.7/lang-tag-1.7-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/azure/azure-xml/1.0.0/azure-xml-1.0.0-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/lang-tag/1.7/lang-tag-1.7-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_nimbusds_nimbus_jose_jwt_10_0_1.xml b/.idea/libraries/Maven__com_nimbusds_nimbus_jose_jwt_10_0_1.xml
new file mode 100644
index 0000000..4ed6dce
--- /dev/null
+++ b/.idea/libraries/Maven__com_nimbusds_nimbus_jose_jwt_10_0_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.nimbusds:nimbus-jose-jwt:10.0.1">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/nimbus-jose-jwt/10.0.1/nimbus-jose-jwt-10.0.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/nimbus-jose-jwt/10.0.1/nimbus-jose-jwt-10.0.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/nimbus-jose-jwt/10.0.1/nimbus-jose-jwt-10.0.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_nimbusds_oauth2_oidc_sdk_11_23.xml b/.idea/libraries/Maven__com_nimbusds_oauth2_oidc_sdk_11_23.xml
new file mode 100644
index 0000000..48e8503
--- /dev/null
+++ b/.idea/libraries/Maven__com_nimbusds_oauth2_oidc_sdk_11_23.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.nimbusds:oauth2-oidc-sdk:11.23">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/oauth2-oidc-sdk/11.23/oauth2-oidc-sdk-11.23.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/oauth2-oidc-sdk/11.23/oauth2-oidc-sdk-11.23-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/nimbusds/oauth2-oidc-sdk/11.23/oauth2-oidc-sdk-11.23-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_118_Final.xml
new file mode 100644
index 0000000..75a9da8
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-buffer:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-buffer/4.1.118.Final/netty-buffer-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-buffer/4.1.118.Final/netty-buffer-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-buffer/4.1.118.Final/netty-buffer-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_45_Final.xml
deleted file mode 100644
index 9b206b4..0000000
--- a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-buffer:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-buffer/4.1.45.Final/netty-buffer-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_4_1_118_Final.xml
new file mode 100644
index 0000000..ec257a4
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_codec_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-codec:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec/4.1.118.Final/netty-codec-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec/4.1.118.Final/netty-codec-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec/4.1.118.Final/netty-codec-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_4_1_45_Final.xml
deleted file mode 100644
index 043d686..0000000
--- a/.idea/libraries/Maven__io_netty_netty_codec_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-codec:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec/4.1.45.Final/netty-codec-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_118_Final.xml
similarity index 60%
rename from .idea/libraries/Maven__io_netty_netty_codec_http_4_1_45_Final.xml
rename to .idea/libraries/Maven__io_netty_netty_codec_dns_4_1_118_Final.xml
index 9645728..2d6c889 100644
--- a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_45_Final.xml
+++ b/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_118_Final.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: io.netty:netty-codec-http:4.1.45.Final">
+  <library name="Maven: io.netty:netty-codec-dns:4.1.118.Final">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-dns/4.1.118.Final/netty-codec-dns-4.1.118.Final.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-dns/4.1.118.Final/netty-codec-dns-4.1.118.Final-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-dns/4.1.118.Final/netty-codec-dns-4.1.118.Final-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_118_Final.xml
new file mode 100644
index 0000000..4e25154
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-codec-http2:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http2/4.1.118.Final/netty-codec-http2-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http2/4.1.118.Final/netty-codec-http2-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http2/4.1.118.Final/netty-codec-http2-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_118_Final.xml
similarity index 61%
rename from .idea/libraries/Maven__io_netty_netty_codec_http2_4_1_45_Final.xml
rename to .idea/libraries/Maven__io_netty_netty_codec_http_4_1_118_Final.xml
index 60c908c..1bfc1e1 100644
--- a/.idea/libraries/Maven__io_netty_netty_codec_http2_4_1_45_Final.xml
+++ b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_118_Final.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: io.netty:netty-codec-http2:4.1.45.Final">
+  <library name="Maven: io.netty:netty-codec-http:4.1.118.Final">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http2/4.1.45.Final/netty-codec-http2-4.1.45.Final.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.118.Final/netty-codec-http-4.1.118.Final.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http2/4.1.45.Final/netty-codec-http2-4.1.45.Final-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.118.Final/netty-codec-http-4.1.118.Final-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http2/4.1.45.Final/netty-codec-http2-4.1.45.Final-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.118.Final/netty-codec-http-4.1.118.Final-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_118_Final.xml
new file mode 100644
index 0000000..51457f4
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-codec-socks:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-socks/4.1.118.Final/netty-codec-socks-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-socks/4.1.118.Final/netty-codec-socks-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-socks/4.1.118.Final/netty-codec-socks-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_45_Final.xml
deleted file mode 100644
index 1a43fb6..0000000
--- a/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-codec-socks:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-socks/4.1.45.Final/netty-codec-socks-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_common_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_common_4_1_118_Final.xml
new file mode 100644
index 0000000..03ab793
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_common_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-common:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-common/4.1.118.Final/netty-common-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-common/4.1.118.Final/netty-common-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-common/4.1.118.Final/netty-common-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_common_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_common_4_1_45_Final.xml
deleted file mode 100644
index fb1c680..0000000
--- a/.idea/libraries/Maven__io_netty_netty_common_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-common:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-common/4.1.45.Final/netty-common-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_handler_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_4_1_118_Final.xml
new file mode 100644
index 0000000..c2fcb3c
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_handler_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-handler:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler/4.1.118.Final/netty-handler-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler/4.1.118.Final/netty-handler-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler/4.1.118.Final/netty-handler-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_handler_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_4_1_45_Final.xml
deleted file mode 100644
index a9c7fcd..0000000
--- a/.idea/libraries/Maven__io_netty_netty_handler_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-handler:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler/4.1.45.Final/netty-handler-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_118_Final.xml
new file mode 100644
index 0000000..8613a9f
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-handler-proxy:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler-proxy/4.1.118.Final/netty-handler-proxy-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler-proxy/4.1.118.Final/netty-handler-proxy-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler-proxy/4.1.118.Final/netty-handler-proxy-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_45_Final.xml
deleted file mode 100644
index 58053be..0000000
--- a/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-handler-proxy:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-handler-proxy/4.1.45.Final/netty-handler-proxy-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_118_Final.xml
similarity index 60%
rename from .idea/libraries/Maven__io_netty_netty_codec_dns_4_1_45_Final.xml
rename to .idea/libraries/Maven__io_netty_netty_resolver_4_1_118_Final.xml
index e536992..95c8a4b 100644
--- a/.idea/libraries/Maven__io_netty_netty_codec_dns_4_1_45_Final.xml
+++ b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_118_Final.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: io.netty:netty-codec-dns:4.1.45.Final">
+  <library name="Maven: io.netty:netty-resolver:4.1.118.Final">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-dns/4.1.45.Final/netty-codec-dns-4.1.45.Final.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver/4.1.118.Final/netty-resolver-4.1.118.Final.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-dns/4.1.45.Final/netty-codec-dns-4.1.45.Final-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver/4.1.118.Final/netty-resolver-4.1.118.Final-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-dns/4.1.45.Final/netty-codec-dns-4.1.45.Final-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver/4.1.118.Final/netty-resolver-4.1.118.Final-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_45_Final.xml
deleted file mode 100644
index 647e79a..0000000
--- a/.idea/libraries/Maven__io_netty_netty_resolver_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-resolver:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver/4.1.45.Final/netty-resolver-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_118_Final.xml
new file mode 100644
index 0000000..9c26dc0
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-resolver-dns:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns/4.1.118.Final/netty-resolver-dns-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns/4.1.118.Final/netty-resolver-dns-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns/4.1.118.Final/netty-resolver-dns-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_45_Final.xml
deleted file mode 100644
index 6b552ce..0000000
--- a/.idea/libraries/Maven__io_netty_netty_resolver_dns_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-resolver-dns:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns/4.1.45.Final/netty-resolver-dns-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns/4.1.45.Final/netty-resolver-dns-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns/4.1.45.Final/netty-resolver-dns-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_107_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_107_Final.xml
deleted file mode 100644
index bbef449..0000000
--- a/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_107_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.107.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-classes-macos/4.1.107.Final/netty-resolver-dns-classes-macos-4.1.107.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-classes-macos/4.1.107.Final/netty-resolver-dns-classes-macos-4.1.107.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-classes-macos/4.1.107.Final/netty-resolver-dns-classes-macos-4.1.107.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_118_Final.xml
new file mode 100644
index 0000000..51c6641
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_classes_macos_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-classes-macos/4.1.118.Final/netty-resolver-dns-classes-macos-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-classes-macos/4.1.118.Final/netty-resolver-dns-classes-macos-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-classes-macos/4.1.118.Final/netty-resolver-dns-classes-macos-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_107_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_107_Final.xml
deleted file mode 100644
index 644395b..0000000
--- a/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_107_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.107.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-native-macos/4.1.107.Final/netty-resolver-dns-native-macos-4.1.107.Final-osx-x86_64.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-native-macos/4.1.107.Final/netty-resolver-dns-native-macos-4.1.107.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-native-macos/4.1.107.Final/netty-resolver-dns-native-macos-4.1.107.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_118_Final.xml
new file mode 100644
index 0000000..189dad2
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_resolver_dns_native_macos_osx_x86_64_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-native-macos/4.1.118.Final/netty-resolver-dns-native-macos-4.1.118.Final-osx-x86_64.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-native-macos/4.1.118.Final/netty-resolver-dns-native-macos-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-resolver-dns-native-macos/4.1.118.Final/netty-resolver-dns-native-macos-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_4_1_118_Final.xml
similarity index 60%
copy from .idea/libraries/Maven__io_netty_netty_codec_http_4_1_45_Final.xml
copy to .idea/libraries/Maven__io_netty_netty_transport_4_1_118_Final.xml
index 9645728..275736f 100644
--- a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_45_Final.xml
+++ b/.idea/libraries/Maven__io_netty_netty_transport_4_1_118_Final.xml
@@ -1,13 +1,13 @@
 <component name="libraryTable">
-  <library name="Maven: io.netty:netty-codec-http:4.1.45.Final">
+  <library name="Maven: io.netty:netty-transport:4.1.118.Final">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport/4.1.118.Final/netty-transport-4.1.118.Final.jar!/" />
     </CLASSES>
     <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-javadoc.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport/4.1.118.Final/netty-transport-4.1.118.Final-javadoc.jar!/" />
     </JAVADOC>
     <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-codec-http/4.1.45.Final/netty-codec-http-4.1.45.Final-sources.jar!/" />
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport/4.1.118.Final/netty-transport-4.1.118.Final-sources.jar!/" />
     </SOURCES>
   </library>
 </component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_4_1_45_Final.xml
deleted file mode 100644
index f2b814b..0000000
--- a/.idea/libraries/Maven__io_netty_netty_transport_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-transport:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport/4.1.45.Final/netty-transport-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_118_Final.xml
new file mode 100644
index 0000000..dc6167b
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-transport-classes-epoll:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-classes-epoll/4.1.118.Final/netty-transport-classes-epoll-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-classes-epoll/4.1.118.Final/netty-transport-classes-epoll-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-classes-epoll/4.1.118.Final/netty-transport-classes-epoll-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_118_Final.xml
new file mode 100644
index 0000000..fd19bb6
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-transport-classes-kqueue:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-classes-kqueue/4.1.118.Final/netty-transport-classes-kqueue-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-classes-kqueue/4.1.118.Final/netty-transport-classes-kqueue-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-classes-kqueue/4.1.118.Final/netty-transport-classes-kqueue-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_118_Final.xml
new file mode 100644
index 0000000..bd7c1ec
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-epoll/4.1.118.Final/netty-transport-native-epoll-4.1.118.Final-linux-x86_64.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-epoll/4.1.118.Final/netty-transport-native-epoll-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-epoll/4.1.118.Final/netty-transport-native-epoll-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_45_Final.xml
deleted file mode 100644
index b662f80..0000000
--- a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-epoll/4.1.45.Final/netty-transport-native-epoll-4.1.45.Final-linux-x86_64.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-epoll/4.1.45.Final/netty-transport-native-epoll-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-epoll/4.1.45.Final/netty-transport-native-epoll-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_118_Final.xml
new file mode 100644
index 0000000..25e5648
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-kqueue/4.1.118.Final/netty-transport-native-kqueue-4.1.118.Final-osx-x86_64.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-kqueue/4.1.118.Final/netty-transport-native-kqueue-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-kqueue/4.1.118.Final/netty-transport-native-kqueue-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_45_Final.xml
deleted file mode 100644
index d48839c..0000000
--- a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-kqueue/4.1.45.Final/netty-transport-native-kqueue-4.1.45.Final-osx-x86_64.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-kqueue/4.1.45.Final/netty-transport-native-kqueue-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-kqueue/4.1.45.Final/netty-transport-native-kqueue-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_118_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_118_Final.xml
new file mode 100644
index 0000000..a0a58fc
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_118_Final.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-transport-native-unix-common:4.1.118.Final">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-unix-common/4.1.118.Final/netty-transport-native-unix-common-4.1.118.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-unix-common/4.1.118.Final/netty-transport-native-unix-common-4.1.118.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-unix-common/4.1.118.Final/netty-transport-native-unix-common-4.1.118.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_45_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_45_Final.xml
deleted file mode 100644
index bb62039..0000000
--- a/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_45_Final.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.netty:netty-transport-native-unix-common:4.1.45.Final">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-unix-common/4.1.45.Final/netty-transport-native-unix-common-4.1.45.Final.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-unix-common/4.1.45.Final/netty-transport-native-unix-common-4.1.45.Final-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/netty/netty-transport-native-unix-common/4.1.45.Final/netty-transport-native-unix-common-4.1.45.Final-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_43.xml b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_43.xml
deleted file mode 100644
index d8c9423..0000000
--- a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_43.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.projectreactor.netty:reactor-netty-core:1.0.43">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-core/1.0.43/reactor-netty-core-1.0.43.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-core/1.0.43/reactor-netty-core-1.0.43-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-core/1.0.43/reactor-netty-core-1.0.43-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_48.xml b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_48.xml
new file mode 100644
index 0000000..30494a4
--- /dev/null
+++ b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_core_1_0_48.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.projectreactor.netty:reactor-netty-core:1.0.48">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-core/1.0.48/reactor-netty-core-1.0.48.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-core/1.0.48/reactor-netty-core-1.0.48-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-core/1.0.48/reactor-netty-core-1.0.48-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_43.xml b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_43.xml
deleted file mode 100644
index a44c017..0000000
--- a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_43.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.projectreactor.netty:reactor-netty-http:1.0.43">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-http/1.0.43/reactor-netty-http-1.0.43.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-http/1.0.43/reactor-netty-http-1.0.43-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-http/1.0.43/reactor-netty-http-1.0.43-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_48.xml b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_48.xml
new file mode 100644
index 0000000..49c435a
--- /dev/null
+++ b/.idea/libraries/Maven__io_projectreactor_netty_reactor_netty_http_1_0_48.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.projectreactor.netty:reactor-netty-http:1.0.48">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-http/1.0.48/reactor-netty-http-1.0.48.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-http/1.0.48/reactor-netty-http-1.0.48-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/netty/reactor-netty-http/1.0.48/reactor-netty-http-1.0.48-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_projectreactor_reactor_core_3_3_3_RELEASE.xml b/.idea/libraries/Maven__io_projectreactor_reactor_core_3_3_3_RELEASE.xml
deleted file mode 100644
index aeeeadb..0000000
--- a/.idea/libraries/Maven__io_projectreactor_reactor_core_3_3_3_RELEASE.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: io.projectreactor:reactor-core:3.3.3.RELEASE">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/reactor-core/3.3.3.RELEASE/reactor-core-3.3.3.RELEASE.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/reactor-core/3.3.3.RELEASE/reactor-core-3.3.3.RELEASE-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/io/projectreactor/reactor-core/3.3.3.RELEASE/reactor-core-3.3.3.RELEASE-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml
deleted file mode 100644
index 2b2eccd..0000000
--- a/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: jakarta.activation:jakarta.activation-api:1.2.2">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml
deleted file mode 100644
index 4ab6c36..0000000
--- a/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../maven/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml
new file mode 100644
index 0000000..6ea14f3
--- /dev/null
+++ b/.idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: net.minidev:accessors-smart:2.5.2">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/net/minidev/accessors-smart/2.5.2/accessors-smart-2.5.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/net/minidev/accessors-smart/2.5.2/accessors-smart-2.5.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/net/minidev/accessors-smart/2.5.2/accessors-smart-2.5.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml
new file mode 100644
index 0000000..2ebc879
--- /dev/null
+++ b/.idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: net.minidev:json-smart:2.5.2">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/net/minidev/json-smart/2.5.2/json-smart-2.5.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/net/minidev/json-smart/2.5.2/json-smart-2.5.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/net/minidev/json-smart/2.5.2/json-smart-2.5.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml b/.idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml
new file mode 100644
index 0000000..78624ad
--- /dev/null
+++ b/.idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.ow2.asm:asm:9.7.1">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/org/ow2/asm/asm/9.7.1/asm-9.7.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/org/ow2/asm/asm/9.7.1/asm-9.7.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/../../../maven/repository/org/ow2/asm/asm/9.7.1/asm-9.7.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index deaa4c3..5aa4937 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,8 +2,8 @@
 <project version="4">
   <component name="ProjectModuleManager">
     <modules>
+      <module fileurl="file://$PROJECT_DIR$/dmttwebsite.iml" filepath="$PROJECT_DIR$/dmttwebsite.iml" />
       <module fileurl="file://$PROJECT_DIR$/server/lianghelihua.iml" filepath="$PROJECT_DIR$/server/lianghelihua.iml" />
-      <module fileurl="file://$PROJECT_DIR$/lianhelihua_sh.iml" filepath="$PROJECT_DIR$/lianhelihua_sh.iml" />
     </modules>
   </component>
 </project>
\ No newline at end of file
diff --git a/admin/.env.development b/admin/.env.development
index 0d5ccaa..6500f31 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -1,3 +1,4 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
-VUE_APP_API_URL  = 'http://localhost:10010'
+#VUE_APP_API_URL  = 'http://localhost:10010'
+VUE_APP_API_URL  = 'https://lkshereporting.unilever-china.com/lianhelihua_interface'
diff --git a/admin/.env.production b/admin/.env.production
index e378653..452d33e 100644
--- a/admin/.env.production
+++ b/admin/.env.production
@@ -4,4 +4,4 @@
 # 鍏抽棴DEBUG
 VUE_APP_DEBUG = 'off'
 
-VUE_APP_API_URL  = 'https://dmtest.ahapp.net/lianhelihua_interface'
+VUE_APP_API_URL  = 'https://lkshereporting.unilever-china.com/lianhelihua_interface'
diff --git a/admin/.env.test b/admin/.env.test
index e378653..052d4bf 100644
--- a/admin/.env.test
+++ b/admin/.env.test
@@ -4,4 +4,4 @@
 # 鍏抽棴DEBUG
 VUE_APP_DEBUG = 'off'
 
-VUE_APP_API_URL  = 'https://dmtest.ahapp.net/lianhelihua_interface'
+VUE_APP_API_URL  = 'https://lkshereporting-dev.unilever-china.com/lianhelihua_interface'
diff --git a/admin/lianhelihua_admin/avatar/man.png b/admin/lianhelihua_admin/avatar/man.png
deleted file mode 100644
index a84beb9..0000000
--- a/admin/lianhelihua_admin/avatar/man.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/avatar/woman.png b/admin/lianhelihua_admin/avatar/woman.png
deleted file mode 100644
index eef8695..0000000
--- a/admin/lianhelihua_admin/avatar/woman.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/favicon.ico b/admin/lianhelihua_admin/favicon.ico
deleted file mode 100644
index c6ff5db..0000000
--- a/admin/lianhelihua_admin/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/icon.jpg b/admin/lianhelihua_admin/icon.jpg
deleted file mode 100644
index 3caab7a..0000000
--- a/admin/lianhelihua_admin/icon.jpg
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/icon.png b/admin/lianhelihua_admin/icon.png
deleted file mode 100644
index 33f6435..0000000
--- a/admin/lianhelihua_admin/icon.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/index.html b/admin/lianhelihua_admin/index.html
deleted file mode 100644
index 78b9df1..0000000
--- a/admin/lianhelihua_admin/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/lianhelihua_admin/icon.png"><title>鑱斿悎鍒╁崕浜嬩欢涓婃姤绯荤粺</title><link href="/lianhelihua_admin/static/css/app.61b5bbed.css" rel="preload" as="style"><link href="/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css" rel="preload" as="style"><link href="/lianhelihua_admin/static/js/app.f758ac5d.js" rel="preload" as="script"><link href="/lianhelihua_admin/static/js/chunk-vendors.174acd1e.js" rel="preload" as="script"><link href="/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css" rel="stylesheet"><link href="/lianhelihua_admin/static/css/app.61b5bbed.css" rel="stylesheet"></head><body><div id="app"></div><script src="/lianhelihua_admin/static/js/chunk-vendors.174acd1e.js"></script><script src="/lianhelihua_admin/static/js/app.f758ac5d.js"></script></body></html>
\ No newline at end of file
diff --git a/admin/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css b/admin/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css
deleted file mode 100644
index 8a516e6..0000000
--- a/admin/lianhelihua_admin/static/css/chunk-vendors.d9e68312.css
+++ /dev/null
@@ -1,6 +0,0 @@
-:host,:root{--w-e-textarea-bg-color:#fff;--w-e-textarea-color:#333;--w-e-textarea-border-color:#ccc;--w-e-textarea-slight-border-color:#e8e8e8;--w-e-textarea-slight-color:#d4d4d4;--w-e-textarea-slight-bg-color:#f5f2f0;--w-e-textarea-selected-border-color:#b4d5ff;--w-e-textarea-handler-bg-color:#4290f7;--w-e-toolbar-color:#595959;--w-e-toolbar-bg-color:#fff;--w-e-toolbar-active-color:#333;--w-e-toolbar-active-bg-color:#f1f1f1;--w-e-toolbar-disabled-color:#999;--w-e-toolbar-border-color:#e8e8e8;--w-e-modal-button-bg-color:#fafafa;--w-e-modal-button-border-color:#d9d9d9}.w-e-text-container *,.w-e-toolbar *{box-sizing:border-box;margin:0;outline:none;padding:0}.w-e-text-container blockquote,.w-e-text-container li,.w-e-text-container p,.w-e-text-container td,.w-e-text-container th,.w-e-toolbar *{line-height:1.5}.w-e-text-container{background-color:var(--w-e-textarea-bg-color);color:var(--w-e-textarea-color);height:100%;position:relative}.w-e-text-container .w-e-scroll{-webkit-overflow-scrolling:touch;height:100%}.w-e-text-container [data-slate-editor]{word-wrap:break-word;border-top:1px solid transparent;min-height:100%;outline:0;padding:0 10px;white-space:pre-wrap}.w-e-text-container [data-slate-editor] p{margin:15px 0}.w-e-text-container [data-slate-editor] h1,.w-e-text-container [data-slate-editor] h2,.w-e-text-container [data-slate-editor] h3,.w-e-text-container [data-slate-editor] h4,.w-e-text-container [data-slate-editor] h5{margin:20px 0}.w-e-text-container [data-slate-editor] img{cursor:default;display:inline!important;max-width:100%;min-height:20px;min-width:20px}.w-e-text-container [data-slate-editor] span{text-indent:0}.w-e-text-container [data-slate-editor] [data-selected=true]{box-shadow:0 0 0 2px var(--w-e-textarea-selected-border-color)}.w-e-text-placeholder{font-style:italic;left:10px;top:17px;width:90%}.w-e-max-length-info,.w-e-text-placeholder{color:var(--w-e-textarea-slight-color);pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.w-e-max-length-info{bottom:.5em;right:1em}.w-e-bar{background-color:var(--w-e-toolbar-bg-color);color:var(--w-e-toolbar-color);font-size:14px;padding:0 5px}.w-e-bar svg{fill:var(--w-e-toolbar-color);height:14px;width:14px}.w-e-bar-show{display:flex}.w-e-bar-hidden{display:none}.w-e-hover-bar{border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 5px rgba(0,0,0,.12156862745098039);position:absolute}.w-e-toolbar{flex-wrap:wrap;position:relative}.w-e-bar-divider{background-color:var(--w-e-toolbar-border-color);display:inline-flex;height:40px;margin:0 5px;width:1px}.w-e-bar-item{display:flex;height:40px;padding:4px;position:relative;text-align:center}.w-e-bar-item,.w-e-bar-item button{align-items:center;justify-content:center}.w-e-bar-item button{background:transparent;border:none;color:var(--w-e-toolbar-color);cursor:pointer;display:inline-flex;height:32px;overflow:hidden;padding:0 8px;white-space:nowrap}.w-e-bar-item button:hover{background-color:var(--w-e-toolbar-active-bg-color);color:var(--w-e-toolbar-active-color)}.w-e-bar-item button .title{margin-left:5px}.w-e-bar-item .active{background-color:var(--w-e-toolbar-active-bg-color);color:var(--w-e-toolbar-active-color)}.w-e-bar-item .disabled{color:var(--w-e-toolbar-disabled-color);cursor:not-allowed}.w-e-bar-item .disabled svg{fill:var(--w-e-toolbar-disabled-color)}.w-e-bar-item .disabled:hover{background-color:var(--w-e-toolbar-bg-color);color:var(--w-e-toolbar-disabled-color)}.w-e-bar-item .disabled:hover svg{fill:var(--w-e-toolbar-disabled-color)}.w-e-menu-tooltip-v5:before{background-color:var(--w-e-toolbar-active-color);border-radius:5px;color:var(--w-e-toolbar-bg-color);content:attr(data-tooltip);font-size:.75em;padding:5px 10px;text-align:center;top:40px;white-space:pre;z-index:1}.w-e-menu-tooltip-v5:after,.w-e-menu-tooltip-v5:before{opacity:0;position:absolute;transition:opacity .6s;visibility:hidden}.w-e-menu-tooltip-v5:after{border:5px solid transparent;border-bottom:5px solid var(--w-e-toolbar-active-color);content:"";top:30px}.w-e-menu-tooltip-v5:hover:after,.w-e-menu-tooltip-v5:hover:before{opacity:1;visibility:visible}.w-e-menu-tooltip-v5.tooltip-right:before{left:100%;top:10px}.w-e-menu-tooltip-v5.tooltip-right:after{border-bottom-color:transparent;border-left-color:transparent;border-right-color:var(--w-e-toolbar-active-color);border-top-color:transparent;left:100%;margin-left:-10px;top:16px}.w-e-bar-item-group .w-e-bar-item-menus-container{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px rgba(0,0,0,.12156862745098039);display:none;left:0;margin-top:40px;position:absolute;top:0;z-index:1}.w-e-bar-item-group:hover .w-e-bar-item-menus-container{display:block}.w-e-select-list{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px rgba(0,0,0,.12156862745098039);left:0;margin-top:40px;max-height:350px;min-width:100px;overflow-y:auto;position:absolute;top:0;z-index:1}.w-e-select-list ul{line-height:1;list-style:none}.w-e-select-list ul .selected{background-color:var(--w-e-toolbar-active-bg-color)}.w-e-select-list ul li{cursor:pointer;padding:7px 0 7px 25px;position:relative;text-align:left;white-space:nowrap}.w-e-select-list ul li:hover{background-color:var(--w-e-toolbar-active-bg-color)}.w-e-select-list ul li svg{left:0;margin-left:5px;margin-top:-7px;position:absolute;top:50%}.w-e-bar-bottom .w-e-select-list{bottom:0;margin-bottom:40px;margin-top:0;top:inherit}.w-e-drop-panel{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px rgba(0,0,0,.12156862745098039);margin-top:40px;min-width:200px;padding:10px;position:absolute;top:0;z-index:1}.w-e-bar-bottom .w-e-drop-panel{bottom:0;margin-bottom:40px;margin-top:0;top:inherit}.w-e-modal{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px rgba(0,0,0,.12156862745098039);color:var(--w-e-toolbar-color);font-size:14px;min-height:40px;min-width:100px;padding:20px 15px 0;position:absolute;text-align:left;z-index:1}.w-e-modal .btn-close{cursor:pointer;line-height:1;padding:5px;position:absolute;right:8px;top:7px}.w-e-modal .btn-close svg{fill:var(--w-e-toolbar-color);height:10px;width:10px}.w-e-modal .babel-container{display:block;margin-bottom:15px}.w-e-modal .babel-container span{display:block;margin-bottom:10px}.w-e-modal .button-container{margin-bottom:15px}.w-e-modal button{background-color:var(--w-e-modal-button-bg-color);cursor:pointer;font-weight:400;height:32px;padding:4.5px 15px;text-align:center;touch-action:manipulation;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.w-e-modal button,.w-e-modal input[type=number],.w-e-modal input[type=text],.w-e-modal textarea{border:1px solid var(--w-e-modal-button-border-color);border-radius:4px;color:var(--w-e-toolbar-color)}.w-e-modal input[type=number],.w-e-modal input[type=text],.w-e-modal textarea{font-feature-settings:"tnum";background-color:var(--w-e-toolbar-bg-color);font-variant:tabular-nums;padding:4.5px 11px;transition:all .3s;width:100%}.w-e-modal textarea{min-height:60px}body .w-e-modal,body .w-e-modal *{box-sizing:border-box}.w-e-progress-bar{background-color:var(--w-e-textarea-handler-bg-color);height:1px;position:absolute;transition:width .3s;width:0}.w-e-full-screen-container{bottom:0!important;display:flex!important;flex-direction:column!important;height:100%!important;left:0!important;margin:0!important;padding:0!important;position:fixed;right:0!important;top:0!important;width:100%!important}.w-e-full-screen-container [data-w-e-textarea=true]{flex:1!important}.w-e-text-container [data-slate-editor] code{background-color:var(--w-e-textarea-slight-bg-color);border-radius:3px;font-family:monospace;padding:3px}.w-e-panel-content-color{list-style:none;text-align:left;width:230px}.w-e-panel-content-color li{border:1px solid var(--w-e-toolbar-bg-color);border-radius:3px 3px;cursor:pointer;display:inline-block;padding:2px}.w-e-panel-content-color li:hover{border-color:var(--w-e-toolbar-color)}.w-e-panel-content-color li .color-block{border:1px solid var(--w-e-toolbar-border-color);border-radius:3px 3px;height:17px;width:17px}.w-e-panel-content-color .active{border-color:var(--w-e-toolbar-color)}.w-e-panel-content-color .clear{line-height:1.5;margin-bottom:5px;width:100%}.w-e-panel-content-color .clear svg{height:16px;margin-bottom:-4px;width:16px}.w-e-text-container [data-slate-editor] blockquote{background-color:var(--w-e-textarea-slight-bg-color);border-left:8px solid var(--w-e-textarea-selected-border-color);display:block;font-size:100%;line-height:1.5;margin:10px 0;padding:10px}.w-e-panel-content-emotion{font-size:20px;list-style:none;text-align:left;width:300px}.w-e-panel-content-emotion li{border-radius:3px 3px;cursor:pointer;display:inline-block;padding:0 5px}.w-e-panel-content-emotion li:hover{background-color:var(--w-e-textarea-slight-bg-color)}.w-e-textarea-divider{border-radius:3px;margin:20px auto;padding:20px}.w-e-textarea-divider hr{background-color:var(--w-e-textarea-border-color);border:0;display:block;height:1px}.w-e-text-container [data-slate-editor] pre>code{background-color:var(--w-e-textarea-slight-bg-color);border:1px solid var(--w-e-textarea-slight-border-color);border-radius:4px 4px;display:block;font-size:14px;padding:10px;text-indent:0}.w-e-text-container [data-slate-editor] .w-e-image-container{display:inline-block;margin:0 3px}.w-e-text-container [data-slate-editor] .w-e-image-container:hover{box-shadow:0 0 0 2px var(--w-e-textarea-selected-border-color)}.w-e-text-container [data-slate-editor] .w-e-selected-image-container{overflow:hidden;position:relative}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .w-e-image-dragger{background-color:var(--w-e-textarea-handler-bg-color);height:7px;position:absolute;width:7px}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .left-top{cursor:nwse-resize;left:0;top:0}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .right-top{cursor:nesw-resize;right:0;top:0}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .left-bottom{bottom:0;cursor:nesw-resize;left:0}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .right-bottom{bottom:0;cursor:nwse-resize;right:0}.w-e-text-container [contenteditable=false] .w-e-image-container:hover,.w-e-text-container [data-slate-editor] .w-e-selected-image-container:hover{box-shadow:none}.w-e-text-container [data-slate-editor] .table-container{border:1px dashed var(--w-e-textarea-border-color);border-radius:5px;margin-top:10px;overflow-x:auto;padding:10px;width:100%}.w-e-text-container [data-slate-editor] table{border-collapse:collapse}.w-e-text-container [data-slate-editor] table td,.w-e-text-container [data-slate-editor] table th{border:1px solid var(--w-e-textarea-border-color);line-height:1.5;min-width:30px;padding:3px 5px;text-align:left}.w-e-text-container [data-slate-editor] table th{background-color:var(--w-e-textarea-slight-bg-color);font-weight:700;text-align:center}.w-e-panel-content-table{background-color:var(--w-e-toolbar-bg-color)}.w-e-panel-content-table table{border-collapse:collapse}.w-e-panel-content-table td{border:1px solid var(--w-e-toolbar-border-color);cursor:pointer;height:15px;padding:3px 5px;width:20px}.w-e-panel-content-table td.active{background-color:var(--w-e-toolbar-active-bg-color)}.w-e-textarea-video-container{background-image:linear-gradient(45deg,#eee 25%,transparent 0,transparent 75%,#eee 0,#eee),linear-gradient(45deg,#eee 25%,#fff 0,#fff 75%,#eee 0,#eee);background-position:0 0,10px 10px;background-size:20px 20px;border:1px dashed var(--w-e-textarea-border-color);border-radius:5px;margin:10px auto 0;padding:10px 0;text-align:center}.w-e-text-container [data-slate-editor] pre>code{word-wrap:normal;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;line-height:1.5;margin:.5em 0;overflow:auto;padding:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;text-shadow:0 1px #fff;white-space:pre;word-break:normal;word-spacing:normal}.w-e-text-container [data-slate-editor] pre>code .token.cdata,.w-e-text-container [data-slate-editor] pre>code .token.comment,.w-e-text-container [data-slate-editor] pre>code .token.doctype,.w-e-text-container [data-slate-editor] pre>code .token.prolog{color:#708090}.w-e-text-container [data-slate-editor] pre>code .token.punctuation{color:#999}.w-e-text-container [data-slate-editor] pre>code .token.namespace{opacity:.7}.w-e-text-container [data-slate-editor] pre>code .token.boolean,.w-e-text-container [data-slate-editor] pre>code .token.constant,.w-e-text-container [data-slate-editor] pre>code .token.deleted,.w-e-text-container [data-slate-editor] pre>code .token.number,.w-e-text-container [data-slate-editor] pre>code .token.property,.w-e-text-container [data-slate-editor] pre>code .token.symbol,.w-e-text-container [data-slate-editor] pre>code .token.tag{color:#905}.w-e-text-container [data-slate-editor] pre>code .token.attr-name,.w-e-text-container [data-slate-editor] pre>code .token.builtin,.w-e-text-container [data-slate-editor] pre>code .token.char,.w-e-text-container [data-slate-editor] pre>code .token.inserted,.w-e-text-container [data-slate-editor] pre>code .token.selector,.w-e-text-container [data-slate-editor] pre>code .token.string{color:#690}.w-e-text-container [data-slate-editor] pre>code .language-css .token.string,.w-e-text-container [data-slate-editor] pre>code .style .token.string,.w-e-text-container [data-slate-editor] pre>code .token.entity,.w-e-text-container [data-slate-editor] pre>code .token.operator,.w-e-text-container [data-slate-editor] pre>code .token.url{color:#9a6e3a}.w-e-text-container [data-slate-editor] pre>code .token.atrule,.w-e-text-container [data-slate-editor] pre>code .token.attr-value,.w-e-text-container [data-slate-editor] pre>code .token.keyword{color:#07a}.w-e-text-container [data-slate-editor] pre>code .token.class-name,.w-e-text-container [data-slate-editor] pre>code .token.function{color:#dd4a68}.w-e-text-container [data-slate-editor] pre>code .token.important,.w-e-text-container [data-slate-editor] pre>code .token.regex,.w-e-text-container [data-slate-editor] pre>code .token.variable{color:#e90}.w-e-text-container [data-slate-editor] pre>code .token.bold,.w-e-text-container [data-slate-editor] pre>code .token.important{font-weight:700}.w-e-text-container [data-slate-editor] pre>code .token.italic{font-style:italic}.w-e-text-container [data-slate-editor] pre>code .token.entity{cursor:help}
-/*!
- * vue-treeselect v0.4.0 | (c) 2017-2019 Riophae Lee
- * Released under the MIT License.
- * https://vue-treeselect.js.org/
- */.vue-treeselect-helper-hide{display:none}.vue-treeselect-helper-zoom-effect-off{transform:none!important}@-webkit-keyframes vue-treeselect-animation-fade-in{0%{opacity:0}}@keyframes vue-treeselect-animation-fade-in{0%{opacity:0}}@-webkit-keyframes vue-treeselect-animation-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}@keyframes vue-treeselect-animation-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}@-webkit-keyframes vue-treeselect-animation-rotate{to{transform:rotate(1turn)}}@keyframes vue-treeselect-animation-rotate{to{transform:rotate(1turn)}}.vue-treeselect__multi-value-item--transition-enter-active,.vue-treeselect__multi-value-item--transition-leave-active{transition-duration:.2s;transition-property:transform,opacity}.vue-treeselect__multi-value-item--transition-enter-active{transition-timing-function:cubic-bezier(.075,.82,.165,1)}.vue-treeselect__multi-value-item--transition-leave-active{transition-timing-function:cubic-bezier(.215,.61,.355,1);position:absolute}.vue-treeselect__multi-value-item--transition-enter,.vue-treeselect__multi-value-item--transition-leave-to{transform:scale(.7);opacity:0}.vue-treeselect__multi-value-item--transition-move{transition:transform .2s cubic-bezier(.165,.84,.44,1)}.vue-treeselect{position:relative;text-align:left}[dir=rtl] .vue-treeselect{text-align:right}.vue-treeselect div,.vue-treeselect span{box-sizing:border-box}.vue-treeselect svg{fill:currentColor}.vue-treeselect__control{padding-left:5px;padding-right:5px;display:table;table-layout:fixed;width:100%;height:36px;border:1px solid #ddd;border-radius:5px;background:#fff;transition-duration:.2s;transition-property:border-color,box-shadow,width,height,background-color,opacity;transition-timing-function:cubic-bezier(.215,.61,.355,1)}.vue-treeselect:not(.vue-treeselect--disabled):not(.vue-treeselect--focused) .vue-treeselect__control:hover{border-color:#cfcfcf}.vue-treeselect--focused:not(.vue-treeselect--open) .vue-treeselect__control{border-color:#039be5;box-shadow:0 0 0 3px rgba(3,155,229,.1)}.vue-treeselect--disabled .vue-treeselect__control{background-color:#f9f9f9}.vue-treeselect--open .vue-treeselect__control{border-color:#cfcfcf}.vue-treeselect--open.vue-treeselect--open-below .vue-treeselect__control{border-bottom-left-radius:0;border-bottom-right-radius:0}.vue-treeselect--open.vue-treeselect--open-above .vue-treeselect__control{border-top-left-radius:0;border-top-right-radius:0}.vue-treeselect__multi-value,.vue-treeselect__value-container{width:100%;vertical-align:middle}.vue-treeselect__value-container{display:table-cell;position:relative}.vue-treeselect--searchable:not(.vue-treeselect--disabled) .vue-treeselect__value-container{cursor:text}.vue-treeselect__multi-value{display:inline-block}.vue-treeselect--has-value .vue-treeselect__multi-value{margin-bottom:5px}.vue-treeselect__placeholder,.vue-treeselect__single-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:5px;padding-right:5px;position:absolute;top:0;right:0;bottom:0;left:0;line-height:34px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.vue-treeselect__placeholder{color:#bdbdbd}.vue-treeselect__single-value{color:#333}.vue-treeselect--focused.vue-treeselect--searchable .vue-treeselect__single-value{color:#bdbdbd}.vue-treeselect--disabled .vue-treeselect__single-value{position:static}.vue-treeselect__multi-value-item-container{display:inline-block;padding-top:5px;padding-right:5px;vertical-align:top}[dir=rtl] .vue-treeselect__multi-value-item-container{padding-right:0;padding-left:5px}.vue-treeselect__multi-value-item{display:inline-table;padding:2px 0;border:1px solid transparent;border-radius:2px;font-size:12px;vertical-align:top}.vue-treeselect:not(.vue-treeselect--disabled) .vue-treeselect__multi-value-item:not(.vue-treeselect__multi-value-item-disabled):hover .vue-treeselect__multi-value-item:not(.vue-treeselect__multi-value-item-new) .vue-treeselect__multi-value-item:not(.vue-treeselect__multi-value-item-new):hover,.vue-treeselect__multi-value-item{cursor:pointer;background:#e3f2fd;color:#039be5}.vue-treeselect__multi-value-item.vue-treeselect__multi-value-item-disabled{cursor:default;background:#f5f5f5;color:#757575}.vue-treeselect--disabled .vue-treeselect__multi-value-item{cursor:default;background:#fff;border-color:#e5e5e5;color:#555}.vue-treeselect__multi-value-item.vue-treeselect__multi-value-item-new,.vue-treeselect__multi-value-item.vue-treeselect__multi-value-item-new:hover{background:#e8f5e9}.vue-treeselect__multi-value-label,.vue-treeselect__value-remove{display:table-cell;padding:0 5px;vertical-align:middle}.vue-treeselect__value-remove{color:#039be5;padding-left:5px;border-left:1px solid #fff;line-height:0}[dir=rtl] .vue-treeselect__value-remove{border-left:0 none;border-right:1px solid #fff}.vue-treeselect__multi-value-item:hover .vue-treeselect__value-remove{color:#e53935}.vue-treeselect--disabled .vue-treeselect__value-remove,.vue-treeselect__multi-value-item-disabled .vue-treeselect__value-remove{display:none}.vue-treeselect__value-remove>svg{width:6px;height:6px}.vue-treeselect__multi-value-label{padding-right:5px;white-space:pre-line;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vue-treeselect__limit-tip{display:inline-block;padding-top:5px;padding-right:5px;vertical-align:top}[dir=rtl] .vue-treeselect__limit-tip{padding-right:0;padding-left:5px}.vue-treeselect__limit-tip-text{cursor:default;display:block;margin:2px 0;padding:1px 0;color:#bdbdbd;font-size:12px;font-weight:600}.vue-treeselect__input-container{display:block;max-width:100%;outline:none}.vue-treeselect--single .vue-treeselect__input-container{font-size:inherit;height:100%}.vue-treeselect--multi .vue-treeselect__input-container{display:inline-block;font-size:12px;vertical-align:top}.vue-treeselect--searchable .vue-treeselect__input-container{padding-left:5px;padding-right:5px}.vue-treeselect--searchable.vue-treeselect--multi.vue-treeselect--has-value .vue-treeselect__input-container{padding-top:5px;padding-left:0}[dir=rtl] .vue-treeselect--searchable.vue-treeselect--multi.vue-treeselect--has-value .vue-treeselect__input-container{padding-left:5px;padding-right:0}.vue-treeselect--disabled .vue-treeselect__input-container{display:none}.vue-treeselect__input,.vue-treeselect__sizer{margin:0;line-height:inherit;font-family:inherit;font-size:inherit}.vue-treeselect__input{max-width:100%;margin:0;padding:0;border:0;outline:none;box-sizing:content-box;box-shadow:none;background:none transparent;line-height:1;vertical-align:middle}.vue-treeselect__input::-ms-clear{display:none}.vue-treeselect--single .vue-treeselect__input{width:100%;height:100%}.vue-treeselect--multi .vue-treeselect__input{padding-top:3px;padding-bottom:3px}.vue-treeselect--has-value .vue-treeselect__input{line-height:inherit;vertical-align:top}.vue-treeselect__sizer{position:absolute;top:0;left:0;visibility:hidden;height:0;overflow:scroll;white-space:pre}.vue-treeselect__x-container{display:table-cell;vertical-align:middle;width:20px;text-align:center;line-height:0;cursor:pointer;color:#ccc;-webkit-animation:vue-treeselect-animation-fade-in .2s cubic-bezier(.075,.82,.165,1);animation:vue-treeselect-animation-fade-in .2s cubic-bezier(.075,.82,.165,1)}.vue-treeselect__x-container:hover{color:#e53935}.vue-treeselect__x{width:8px;height:8px}.vue-treeselect__control-arrow-container{display:table-cell;vertical-align:middle;width:20px;text-align:center;line-height:0;cursor:pointer}.vue-treeselect--disabled .vue-treeselect__control-arrow-container{cursor:default}.vue-treeselect__control-arrow{width:9px;height:9px;color:#ccc}.vue-treeselect:not(.vue-treeselect--disabled) .vue-treeselect__control-arrow-container:hover .vue-treeselect__control-arrow{color:#616161}.vue-treeselect--disabled .vue-treeselect__control-arrow{opacity:.35}.vue-treeselect__control-arrow--rotated{transform:rotate(180deg)}.vue-treeselect__menu-container{position:absolute;left:0;width:100%;overflow:visible;transition:0s}.vue-treeselect--open-below:not(.vue-treeselect--append-to-body) .vue-treeselect__menu-container{top:100%}.vue-treeselect--open-above:not(.vue-treeselect--append-to-body) .vue-treeselect__menu-container{bottom:100%}.vue-treeselect__menu{cursor:default;padding-top:5px;padding-bottom:5px;display:block;position:absolute;overflow-x:hidden;overflow-y:auto;width:auto;border:1px solid #cfcfcf;background:#fff;line-height:180%;-webkit-overflow-scrolling:touch}.vue-treeselect--open-below .vue-treeselect__menu{border-bottom-left-radius:5px;border-bottom-right-radius:5px;top:0;margin-top:-1px;border-top-color:#f2f2f2;box-shadow:0 1px 0 rgba(0,0,0,.06)}.vue-treeselect--open-above .vue-treeselect__menu{border-top-left-radius:5px;border-top-right-radius:5px;bottom:0;margin-bottom:-1px;border-bottom-color:#f2f2f2}.vue-treeselect__indent-level-0 .vue-treeselect__option{padding-left:5px}[dir=rtl] .vue-treeselect__indent-level-0 .vue-treeselect__option{padding-left:5px;padding-right:5px}.vue-treeselect__indent-level-0 .vue-treeselect__tip{padding-left:25px}[dir=rtl] .vue-treeselect__indent-level-0 .vue-treeselect__tip{padding-left:5px;padding-right:25px}.vue-treeselect__indent-level-1 .vue-treeselect__option{padding-left:25px}[dir=rtl] .vue-treeselect__indent-level-1 .vue-treeselect__option{padding-left:5px;padding-right:25px}.vue-treeselect__indent-level-1 .vue-treeselect__tip{padding-left:45px}[dir=rtl] .vue-treeselect__indent-level-1 .vue-treeselect__tip{padding-left:5px;padding-right:45px}.vue-treeselect__indent-level-2 .vue-treeselect__option{padding-left:45px}[dir=rtl] .vue-treeselect__indent-level-2 .vue-treeselect__option{padding-left:5px;padding-right:45px}.vue-treeselect__indent-level-2 .vue-treeselect__tip{padding-left:65px}[dir=rtl] .vue-treeselect__indent-level-2 .vue-treeselect__tip{padding-left:5px;padding-right:65px}.vue-treeselect__indent-level-3 .vue-treeselect__option{padding-left:65px}[dir=rtl] .vue-treeselect__indent-level-3 .vue-treeselect__option{padding-left:5px;padding-right:65px}.vue-treeselect__indent-level-3 .vue-treeselect__tip{padding-left:85px}[dir=rtl] .vue-treeselect__indent-level-3 .vue-treeselect__tip{padding-left:5px;padding-right:85px}.vue-treeselect__indent-level-4 .vue-treeselect__option{padding-left:85px}[dir=rtl] .vue-treeselect__indent-level-4 .vue-treeselect__option{padding-left:5px;padding-right:85px}.vue-treeselect__indent-level-4 .vue-treeselect__tip{padding-left:105px}[dir=rtl] .vue-treeselect__indent-level-4 .vue-treeselect__tip{padding-left:5px;padding-right:105px}.vue-treeselect__indent-level-5 .vue-treeselect__option{padding-left:105px}[dir=rtl] .vue-treeselect__indent-level-5 .vue-treeselect__option{padding-left:5px;padding-right:105px}.vue-treeselect__indent-level-5 .vue-treeselect__tip{padding-left:125px}[dir=rtl] .vue-treeselect__indent-level-5 .vue-treeselect__tip{padding-left:5px;padding-right:125px}.vue-treeselect__indent-level-6 .vue-treeselect__option{padding-left:125px}[dir=rtl] .vue-treeselect__indent-level-6 .vue-treeselect__option{padding-left:5px;padding-right:125px}.vue-treeselect__indent-level-6 .vue-treeselect__tip{padding-left:145px}[dir=rtl] .vue-treeselect__indent-level-6 .vue-treeselect__tip{padding-left:5px;padding-right:145px}.vue-treeselect__indent-level-7 .vue-treeselect__option{padding-left:145px}[dir=rtl] .vue-treeselect__indent-level-7 .vue-treeselect__option{padding-left:5px;padding-right:145px}.vue-treeselect__indent-level-7 .vue-treeselect__tip{padding-left:165px}[dir=rtl] .vue-treeselect__indent-level-7 .vue-treeselect__tip{padding-left:5px;padding-right:165px}.vue-treeselect__indent-level-8 .vue-treeselect__option{padding-left:165px}[dir=rtl] .vue-treeselect__indent-level-8 .vue-treeselect__option{padding-left:5px;padding-right:165px}.vue-treeselect__indent-level-8 .vue-treeselect__tip{padding-left:185px}[dir=rtl] .vue-treeselect__indent-level-8 .vue-treeselect__tip{padding-left:5px;padding-right:185px}.vue-treeselect__option{padding-left:5px;padding-right:5px;display:table;table-layout:fixed;width:100%}.vue-treeselect__option--highlight{background:#f5f5f5}.vue-treeselect--single .vue-treeselect__option--selected{background:#e3f2fd;font-weight:600}.vue-treeselect--single .vue-treeselect__option--selected:hover{background:#e3f2fd}.vue-treeselect__option--hide{display:none}.vue-treeselect__option-arrow-container,.vue-treeselect__option-arrow-placeholder{display:table-cell;vertical-align:middle;width:20px;text-align:center;line-height:0}.vue-treeselect__option-arrow-container{cursor:pointer}.vue-treeselect__option-arrow{display:inline-block;width:9px;height:9px;color:#ccc;vertical-align:middle;transition:transform .2s cubic-bezier(.19,1,.22,1);transform:rotate(-90deg)}[dir=rtl] .vue-treeselect__option-arrow{transform:rotate(90deg)}.vue-treeselect--branch-nodes-disabled .vue-treeselect__option:hover .vue-treeselect__option-arrow,.vue-treeselect__option-arrow-container:hover .vue-treeselect__option-arrow{color:#616161}.vue-treeselect__option-arrow--rotated,[dir=rtl] .vue-treeselect__option-arrow--rotated{transform:rotate(0)}.vue-treeselect__option-arrow--rotated.vue-treeselect__option-arrow--prepare-enter{transform:rotate(-90deg)!important}[dir=rtl] .vue-treeselect__option-arrow--rotated.vue-treeselect__option-arrow--prepare-enter{transform:rotate(90deg)!important}.vue-treeselect__label-container{display:table-cell;vertical-align:middle;cursor:pointer;display:table;width:100%;table-layout:fixed;color:inherit}.vue-treeselect__option--disabled .vue-treeselect__label-container{cursor:not-allowed;color:rgba(0,0,0,.25)}.vue-treeselect__checkbox-container{display:table-cell;width:20px;min-width:20px;height:100%;text-align:center;vertical-align:middle}.vue-treeselect__checkbox{display:block;margin:auto;width:12px;height:12px;border-width:1px;border-style:solid;border-radius:2px;position:relative;transition:all .2s cubic-bezier(.075,.82,.165,1)}.vue-treeselect__check-mark,.vue-treeselect__minus-mark{display:block;position:absolute;left:1px;top:1px;background-repeat:no-repeat;opacity:0;transition:all .2s ease}.vue-treeselect__minus-mark{width:8px;height:8px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAgMAAAC5YVYYAAAACVBMVEUAAAD///////9zeKVjAAAAAnRSTlMAuLMp9oYAAAAPSURBVAjXY4CDrJUgBAMAGaECJ9dz3BAAAAAASUVORK5CYII=);background-size:8px 8px}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:1.5dppx){.vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAAD///////////84wDuoAAAAA3RSTlMAyTzPIdReAAAAGUlEQVQI12PAD+b///+Nof7//79gAsLFCwAx/w4blADeeQAAAABJRU5ErkJggg==)}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAAD///////////84wDuoAAAAA3RSTlMAyTzPIdReAAAAGUlEQVQI12PAD+b///+Nof7//79gAsLFCwAx/w4blADeeQAAAABJRU5ErkJggg==)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:288dpi){.vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYBAMAAAASWSDLAAAAD1BMVEUAAAD///////////////+PQt5oAAAABHRSTlMAy2EFIuWxUgAAACRJREFUGNNjGBBgJOICBY7KDCoucODEAJSAS6FwUJShGjAQAADBPRGrK2/FhgAAAABJRU5ErkJggg==)}}.vue-treeselect__checkbox--indeterminate>.vue-treeselect__minus-mark{opacity:1}.vue-treeselect__checkbox--disabled .vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAgMAAAC5YVYYAAAACVBMVEUAAADi4uLh4eHOxeSRAAAAAnRSTlMAuLMp9oYAAAAPSURBVAjXY4CDrJUgBAMAGaECJ9dz3BAAAAAASUVORK5CYII=)}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:1.5dppx){.vue-treeselect__checkbox--disabled .vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAADi4uLi4uLh4eE5RQaIAAAAA3RSTlMAyTzPIdReAAAAGUlEQVQI12PAD+b///+Nof7//79gAsLFCwAx/w4blADeeQAAAABJRU5ErkJggg==)}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.vue-treeselect__checkbox--disabled .vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAADi4uLi4uLh4eE5RQaIAAAAA3RSTlMAyTzPIdReAAAAGUlEQVQI12PAD+b///+Nof7//79gAsLFCwAx/w4blADeeQAAAABJRU5ErkJggg==)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:288dpi){.vue-treeselect__checkbox--disabled .vue-treeselect__minus-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYBAMAAAASWSDLAAAAD1BMVEUAAADh4eHg4ODNzc3h4eEYfw2wAAAABHRSTlMAy2EFIuWxUgAAACRJREFUGNNjGBBgJOICBY7KDCoucODEAJSAS6FwUJShGjAQAADBPRGrK2/FhgAAAABJRU5ErkJggg==)}}.vue-treeselect__check-mark{width:8px;height:8px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAQlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////8IX9KGAAAAFXRSTlMA8u24NxILB+Tawb6jiH1zRz0xIQIIP3GUAAAAMklEQVQI1y3FtQEAMQDDQD+EGbz/qkEVOpyEOP6PudKjZNSXn4Jm2CKRdBKzSLsFWl8fMG0Bl6Jk1rMAAAAASUVORK5CYII=);background-size:8px 8px;transform:scaleY(.125)}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:1.5dppx){.vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////98JRy6AAAAH3RSTlMAzu4sDenl38fBvo1OMyIdEQrj1cSihX5hYFpHNycIcQOASAAAAF9JREFUGNN9zEcOgDAMRFHTS0LvNfe/JRmHKAIJ/mqeLJn+k9uDtaeUeFnFziGsBucUTirrprfe81RqZ3Bb6hPWeuZwDFOHyf+ig9CCzQ7INBn7bG5kF+QSt13BHNJnF7AaCT4Y+CW7AAAAAElFTkSuQmCC)}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////98JRy6AAAAH3RSTlMAzu4sDenl38fBvo1OMyIdEQrj1cSihX5hYFpHNycIcQOASAAAAF9JREFUGNN9zEcOgDAMRFHTS0LvNfe/JRmHKAIJ/mqeLJn+k9uDtaeUeFnFziGsBucUTirrprfe81RqZ3Bb6hPWeuZwDFOHyf+ig9CCzQ7INBn7bG5kF+QSt13BHNJnF7AaCT4Y+CW7AAAAAElFTkSuQmCC)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:288dpi){.vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAWlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////9ZMre9AAAAHXRSTlMA/PiJhGNI9XlEHJB/b2ldV08+Oibk49vPp6QhAYgGBuwAAACCSURBVCjPrdHdDoIwDAXgTWAqCigo/+f9X5OwnoUwtis4V92XNWladUl+rzQPeQJAN2EHxoOnsPn7/oYk8fxBv08Rr/deOH/aZ2Nm8ZJ+s573QGfWKnNuZGzWm3+lv2V3pcU1XQ385/yjmBoM3Z+dXvlbYLLD3ujhTaOM3KaIXvNkFkuSEvYy1LqOAAAAAElFTkSuQmCC)}}.vue-treeselect__checkbox--checked>.vue-treeselect__check-mark{opacity:1;transform:scaleY(1)}.vue-treeselect__checkbox--disabled .vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAP1BMVEUAAADj4+Pf39/h4eHh4eHh4eHk5OTh4eHg4ODi4uLh4eHh4eHg4ODh4eHh4eHg4ODh4eHh4eHp6en////h4eFqcyvUAAAAFHRSTlMAOQfy7bgS5NrBvqOIfXNHMSELAgQ/iFsAAAA2SURBVAjXY4AANjYIzcjMAaVFuBkY+RkEWERYmRjYRXjANAOfiIgIFxNIAa8IpxBEi6AwiAQAK2MBd7xY8csAAAAASUVORK5CYII=)}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:1.5dppx){.vue-treeselect__checkbox--disabled .vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAADh4eHh4eHh4eHi4uLb29vh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLj4+Pi4uLk5OTo6Ojh4eHh4eHi4uLg4ODg4ODh4eHg4ODh4eHf39/g4OD////h4eEzIk+wAAAAHnRSTlMAzu6/LA3p5eLZx8ONTjYiHRIKooV+YWBaRzEnCANnm5rnAAAAZElEQVQY033P2wqAIAyA4VWaaWrnc/n+j5mbhBjUf7WPoTD47TJb4i5zTr/sRDRHuyFaoWX7uK/RlbctlPEuyI1f4WY9yQINEkf6rzzo8YIzmUFoCs7J1EjeIaa9bXIEmzl8dgOZEAj/+2IvzAAAAABJRU5ErkJggg==)}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.vue-treeselect__checkbox--disabled .vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAADh4eHh4eHh4eHi4uLb29vh4eHh4eHh4eHh4eHh4eHh4eHh4eHi4uLi4uLj4+Pi4uLk5OTo6Ojh4eHh4eHi4uLg4ODg4ODh4eHg4ODh4eHf39/g4OD////h4eEzIk+wAAAAHnRSTlMAzu6/LA3p5eLZx8ONTjYiHRIKooV+YWBaRzEnCANnm5rnAAAAZElEQVQY033P2wqAIAyA4VWaaWrnc/n+j5mbhBjUf7WPoTD47TJb4i5zTr/sRDRHuyFaoWX7uK/RlbctlPEuyI1f4WY9yQINEkf6rzzo8YIzmUFoCs7J1EjeIaa9bXIEmzl8dgOZEAj/+2IvzAAAAABJRU5ErkJggg==)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:288dpi){.vue-treeselect__checkbox--disabled .vue-treeselect__check-mark{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAUVBMVEUAAADh4eHh4eHh4eHh4eHi4uLi4uLh4eHh4eHh4eHf39/j4+Ph4eHh4eHh4eHg4ODi4uLh4eHh4eHi4uLh4eHh4eHh4eHh4eHh4eH////h4eF3FMFTAAAAGnRSTlMA+/eJhGhfSHE9JBzz5KaQf3pXT0Xbz0I5AYDw8F0AAAB+SURBVCjPrdHbDoMgEEVRKAii1dZe9fz/hxplTiKIT7qfYCWTEEZdUvOwbckNAD2WHeh3brHW5f5EzGQ+iN+b1Gt6KPvtv16Dn6JX9M9ya3/A1yfu5dlyduL6Hec7mXY6ddXLPP2lpABGZ8PWXfYLTJxZekVhhl7eTX24zZPNKXoRC7zQLjUAAAAASUVORK5CYII=)}}.vue-treeselect__checkbox--unchecked{border-color:#e0e0e0;background:#fff}.vue-treeselect__label-container:hover .vue-treeselect__checkbox--unchecked{border-color:#039be5;background:#fff}.vue-treeselect__checkbox--checked,.vue-treeselect__checkbox--indeterminate,.vue-treeselect__label-container:hover .vue-treeselect__checkbox--checked,.vue-treeselect__label-container:hover .vue-treeselect__checkbox--indeterminate{border-color:#039be5;background:#039be5}.vue-treeselect__checkbox--disabled,.vue-treeselect__label-container:hover .vue-treeselect__checkbox--disabled{border-color:#e0e0e0;background-color:#f7f7f7}.vue-treeselect__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:table-cell;padding-left:5px;max-width:100%;vertical-align:middle;cursor:inherit}[dir=rtl] .vue-treeselect__label{padding-left:0;padding-right:5px}.vue-treeselect__count{margin-left:5px;font-weight:400;opacity:.6}[dir=rtl] .vue-treeselect__count{margin-left:0;margin-right:5px}.vue-treeselect__tip{padding-left:5px;padding-right:5px;display:table;table-layout:fixed;width:100%;color:#757575}.vue-treeselect__tip-text{display:table-cell;vertical-align:middle;padding-left:5px;padding-right:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;font-size:12px}.vue-treeselect__error-tip .vue-treeselect__retry{cursor:pointer;margin-left:5px;font-style:normal;font-weight:600;text-decoration:none;color:#039be5}[dir=rtl] .vue-treeselect__error-tip .vue-treeselect__retry{margin-left:0;margin-right:5px}.vue-treeselect__icon-container{display:table-cell;vertical-align:middle;width:20px;text-align:center;line-height:0}.vue-treeselect--single .vue-treeselect__icon-container{padding-left:5px}[dir=rtl] .vue-treeselect--single .vue-treeselect__icon-container{padding-left:0;padding-right:5px}.vue-treeselect__icon-warning{display:block;margin:auto;border-radius:50%;position:relative;width:12px;height:12px;background:#fb8c00}.vue-treeselect__icon-warning:after{display:block;position:absolute;content:"";left:5px;top:2.5px;width:2px;height:1px;border:0 solid #fff;border-top-width:5px;border-bottom-width:1px}.vue-treeselect__icon-error{display:block;margin:auto;border-radius:50%;position:relative;width:12px;height:12px;background:#e53935}.vue-treeselect__icon-error:after,.vue-treeselect__icon-error:before{display:block;position:absolute;content:"";background:#fff;transform:rotate(45deg)}.vue-treeselect__icon-error:before{width:6px;height:2px;left:3px;top:5px}.vue-treeselect__icon-error:after{width:2px;height:6px;left:5px;top:3px}.vue-treeselect__icon-loader{display:block;margin:auto;position:relative;width:12px;height:12px;text-align:center;-webkit-animation:vue-treeselect-animation-rotate 1.6s linear infinite;animation:vue-treeselect-animation-rotate 1.6s linear infinite}.vue-treeselect__icon-loader:after,.vue-treeselect__icon-loader:before{border-radius:50%;position:absolute;content:"";left:0;top:0;display:block;width:100%;height:100%;opacity:.6;-webkit-animation:vue-treeselect-animation-bounce 1.6s ease-in-out infinite;animation:vue-treeselect-animation-bounce 1.6s ease-in-out infinite}.vue-treeselect__icon-loader:before{background:#039be5}.vue-treeselect__icon-loader:after{background:#b3e5fc;-webkit-animation-delay:-.8s;animation-delay:-.8s}.vue-treeselect__menu-placeholder{display:none}.vue-treeselect__portal-target{position:absolute;display:block;left:0;top:0;height:0;width:0;padding:0;margin:0;border:0;overflow:visible;box-sizing:border-box}
\ No newline at end of file
diff --git a/admin/lianhelihua_admin/static/fonts/element-icons.535877f5.woff b/admin/lianhelihua_admin/static/fonts/element-icons.535877f5.woff
deleted file mode 100644
index 02b9a25..0000000
--- a/admin/lianhelihua_admin/static/fonts/element-icons.535877f5.woff
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/fonts/element-icons.732389de.ttf b/admin/lianhelihua_admin/static/fonts/element-icons.732389de.ttf
deleted file mode 100644
index 91b74de..0000000
--- a/admin/lianhelihua_admin/static/fonts/element-icons.732389de.ttf
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/404-tip.4d90651f.png b/admin/lianhelihua_admin/static/img/404-tip.4d90651f.png
deleted file mode 100644
index 5182634..0000000
--- a/admin/lianhelihua_admin/static/img/404-tip.4d90651f.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/404.5c17595f.png b/admin/lianhelihua_admin/static/img/404.5c17595f.png
deleted file mode 100644
index a386e02..0000000
--- a/admin/lianhelihua_admin/static/img/404.5c17595f.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/bg_shenhe@2x.632406ea.png b/admin/lianhelihua_admin/static/img/bg_shenhe@2x.632406ea.png
deleted file mode 100644
index 904c7cc..0000000
--- a/admin/lianhelihua_admin/static/img/bg_shenhe@2x.632406ea.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/bg_shenhe_fail@2x.f31e62ff.png b/admin/lianhelihua_admin/static/img/bg_shenhe_fail@2x.f31e62ff.png
deleted file mode 100644
index 4ac63a2..0000000
--- a/admin/lianhelihua_admin/static/img/bg_shenhe_fail@2x.f31e62ff.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/bg_shenhe_pass@2x.356d8eee.png b/admin/lianhelihua_admin/static/img/bg_shenhe_pass@2x.356d8eee.png
deleted file mode 100644
index 55b4d70..0000000
--- a/admin/lianhelihua_admin/static/img/bg_shenhe_pass@2x.356d8eee.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/department.9b0b5285.svg b/admin/lianhelihua_admin/static/img/department.9b0b5285.svg
deleted file mode 100644
index 08d05cd..0000000
--- a/admin/lianhelihua_admin/static/img/department.9b0b5285.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621750709361" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7590" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M890.96986 479.671711 545.11094 479.671711 545.11094 271.38592 684.78875 271.38592 684.78875 64.500013 343.028339 64.500013 343.028339 271.38592 480.338121 271.38592 480.338121 479.671711 133.397522 479.671711 133.397522 532.849864 133.397522 548.629245 133.397522 755.515153 64.284683 755.515153 64.284683 959.499987 270.160836 959.499987 270.160836 755.515153 202.498081 755.515153 202.498081 548.629245 480.338121 548.629245 480.338121 755.515153 409.786454 755.515153 409.786454 959.499987 615.662607 959.499987 615.662607 755.515153 545.11094 755.515153 545.11094 548.629245 822.225426 548.629245 822.225426 755.515153 753.863725 755.515153 753.863725 959.499987 959.714294 959.499987 959.714294 755.515153 890.96986 755.515153Z" p-id="7591" fill="#f7f7f7"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/dictionary.a4f7c09e.svg b/admin/lianhelihua_admin/static/img/dictionary.a4f7c09e.svg
deleted file mode 100644
index 7ed0110..0000000
--- a/admin/lianhelihua_admin/static/img/dictionary.a4f7c09e.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751616853" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12750" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M225.5 596.7h63.8V652h-63.8v-55.3z m0-165.8h63.8v55.3h-63.8v-55.3z m0-165.7h63.8v55.3h-63.8v-55.3z m127.6 331.5h446.3V652H353.1v-55.3z m0-165.8h446.3v55.3H353.1v-55.3z m0-165.7h446.3v55.3H353.1v-55.3zM98 156.3v694.3c0 46.6 45 77.7 96.4 77.7h732.5v-46.6H194.4c-19.3 0-32.2-10.4-32.2-25.9 0-15.5 12.8-25.9 32.2-25.9h732.5V99.4H168.7c-32.1 5.1-64.3 31.1-70.7 56.9z" fill="#f7f7f7" p-id="12751"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/listener.770879d4.svg b/admin/lianhelihua_admin/static/img/listener.770879d4.svg
deleted file mode 100644
index 1d2ca18..0000000
--- a/admin/lianhelihua_admin/static/img/listener.770879d4.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751666911" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13701" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M64.28 671v80.3c0 34.76 26.84 62.94 60 62.94h297.47v94.15H285.53c-24.17 0-48.38-0.49-72.54 0h-1.06c-12.54 0-24.55 11.58-24 25.18s10.53 25.17 24 25.17h525.88c24.16 0 48.37 0.49 72.53 0h1.06c12.54 0 24.56-11.58 24-25.17s-10.54-25.18-24-25.18H601.59v-94.11H899.1c33.11 0 59.95-28.18 59.95-62.94V671zM899.77 65H124.9A60 60 0 0 0 65 125v499.3h894.72V125a60 60 0 0 0-59.95-60zM757.46 296.75l-6.89 7.53-77 84.15-36.78 40.22c0.08 1.2 0.14 2.41 0.14 3.63a51.09 51.09 0 1 1-100.6-12.67l-55.74-65.31-38.46-45a51 51 0 0 1-21.7 0.18l-6 5.78-71.92 69.71-30.85 29.9a45.45 45.45 0 1 1-36.1-35.1l2.85-2.76 71.92-69.72 32.2-31.21A51.09 51.09 0 1 1 482 259.44a51.66 51.66 0 0 1-1.28 11.34l10.62 12.44L561.13 365l14.72 17.23a51.85 51.85 0 0 1 10-1 50.84 50.84 0 0 1 22.14 5l76.82-84q15.3-16.73 30.59-33.44a45.42 45.42 0 1 1 42 28z" p-id="13702" fill="#f7f7f7"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/log-login.2ddfaaaf.svg b/admin/lianhelihua_admin/static/img/log-login.2ddfaaaf.svg
deleted file mode 100644
index a030e67..0000000
--- a/admin/lianhelihua_admin/static/img/log-login.2ddfaaaf.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347607410" class="icon" viewBox="0 0 1038 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3794" width="64.875" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M76.778433 76.778433h776.41112v328.249368h77.209773v-345.071609A59.956192 59.956192 0 0 0 872.599832 0H59.956192A59.956192 59.956192 0 0 0 0 59.956192v898.048863a59.956192 59.956192 0 0 0 59.956192 59.956192H474.473463v-75.915754H76.778433z" p-id="3795" fill="#f7f7f7"></path><path d="M209.631003 256.647009h513.294018v81.091828H209.631003zM209.631003 472.748104h389.068239v81.091829H209.631003zM209.631003 684.535805h278.213984v81.091828H209.631003zM914.871104 774.685762a163.046335 163.046335 0 1 0-227.747262 0 180.731255 180.731255 0 0 0-122.069082 180.731256c0 68.582982 102.227464 68.582982 243.706824 68.582982h86.267902c59.956192 0 101.364785-3.450716 125.088458-27.605729a57.799495 57.799495 0 0 0 17.68492-43.133951 172.535805 172.535805 0 0 0-122.93176-178.574558zM733.277169 590.503791a94.894693 94.894693 0 0 1 67.288964-28.037068 92.306655 92.306655 0 1 1-67.288964 26.74305z m122.500422 364.913227h-46.584668a862.679023 862.679023 0 0 1-172.535804-10.352149c5.607414-99.639427 92.737995-121.206403 166.065712-121.206402 144.498736 0 164.771693 70.73968 166.497051 125.951137a480.943555 480.943555 0 0 1-113.442291 5.607414z" p-id="3796" fill="#f7f7f7"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/log-opera.af0a9111.svg b/admin/lianhelihua_admin/static/img/log-opera.af0a9111.svg
deleted file mode 100644
index 051fd63..0000000
--- a/admin/lianhelihua_admin/static/img/log-opera.af0a9111.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347629380" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4602" width="64.0625" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M548.075474 961.502824H37.281249a39.060735 39.060735 0 0 1-37.257932-40.262603V103.368526a39.060735 39.060735 0 0 1 37.257932-40.262604h717.515653a39.060735 39.060735 0 0 1 37.257931 40.262604V513.205775h-60.093438V128.006836H61.919559v773.40255H487.982036l60.093438 63.699045z" fill="#f7f7f7" p-id="4603"></path><path d="M733.764198 513.205775a223.54759 223.54759 0 1 1-225.350393 223.54759 227.153197 227.153197 0 0 1 225.350393-223.54759m0-63.699045A287.246635 287.246635 0 1 0 1022.813636 736.753365a287.246635 287.246635 0 0 0-289.049438-287.246635zM210.951285 0.007812h18.028032a22.835507 22.835507 0 0 1 22.835506 22.835507v145.42612a23.436441 23.436441 0 0 1-22.835506 23.436441h-18.028032a23.436441 23.436441 0 0 1-23.436441-23.436441V25.247056a22.835507 22.835507 0 0 1 22.835507-25.239244z m385.19894 0h18.028031a22.835507 22.835507 0 0 1 23.436441 22.835507v145.42612a23.436441 23.436441 0 0 1-23.436441 23.436441h-18.028031a23.436441 23.436441 0 0 1-22.835507-23.436441V25.247056a22.835507 22.835507 0 0 1 22.835507-25.239244zM157.468125 321.507707h514.399832a31.849522 31.849522 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z m0 191.698068h257.199916a31.849522 31.849522 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z m0 191.698068h192.899937a31.248588 31.248588 0 0 1 31.849522 31.849522 31.849522 31.849522 0 0 1-31.849522 31.849522H157.468125a31.849522 31.849522 0 0 1-31.849522-31.849522 31.849522 31.849522 0 0 1 31.849522-31.849522z" fill="#f7f7f7" p-id="4604"></path><path d="M870.777237 829.29726h-152.637333v-212.730771a30.647654 30.647654 0 0 1 30.647654-30.647654 30.647654 30.647654 0 0 1 30.647653 30.647654v152.036398h91.342026a30.046719 30.046719 0 0 1 30.04672 30.647654 30.046719 30.046719 0 0 1-30.04672 30.046719z" fill="#f7f7f7" p-id="4605"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/log.6aa1794b.svg b/admin/lianhelihua_admin/static/img/log.6aa1794b.svg
deleted file mode 100644
index 0fe054b..0000000
--- a/admin/lianhelihua_admin/static/img/log.6aa1794b.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622347409604" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2382" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M299.1872 255.5904a42.496 42.496 0 0 0 42.5728-42.5472V42.752a42.5728 42.5728 0 0 0-85.1712 0v170.24c0 23.552 19.0464 42.5984 42.5984 42.5984zM512.1536 255.5904a42.496 42.496 0 0 0 42.5984-42.5472V42.752a42.5728 42.5728 0 1 0-85.1712 0v170.24c0 23.552 19.0976 42.5984 42.5728 42.5984zM384.4096 81.792h42.5984v85.0688h-42.5984zM597.4784 81.792h42.5728v85.0688H597.504z" fill="#f7f7f7" p-id="2383"></path><path d="M1023.3088 896.1024v-691.2c0.1536-70.6048-57.2416-127.6928-127.744-127.6928h-85.1712v85.0688h85.1712c23.4752 0 42.7264 19.072 42.7264 42.5216v691.3024c0 23.4496-19.2512 42.5984-42.752 42.5984H128.768a42.7264 42.7264 0 0 1-42.5728-42.5984H85.504l0.6656-691.2c0-23.4752 19.0976-42.5472 42.5728-42.5472h85.1712V77.2096H128.768A127.6928 127.6928 0 0 0 1.024 204.8768v691.2a127.616 127.616 0 0 0 127.744 127.6928h766.7968a127.3344 127.3344 0 0 0 127.232-121.344c0.0768-0.3584 0.512-0.7936 0.512-1.152v-3.7888c0-0.512 0.1536-0.9472 0.1536-1.4592h-0.1536v0.0768z" fill="#f7f7f7" p-id="2384"></path><path d="M725.248 255.5904c23.4496 0 42.5728-19.0208 42.5728-42.5472V42.752a42.5728 42.5728 0 0 0-85.1712 0v170.24c0 23.552 18.8672 42.5984 42.5728 42.5984zM255.872 426.4448h511.2064c23.3472 0 42.5728-19.072 42.5728-42.5216 0-23.552-19.2256-42.5472-42.5728-42.5472H255.8464a42.496 42.496 0 1 0 0 85.0688zM767.0784 551.3728H255.8464a42.5728 42.5728 0 1 0 0 85.0688h511.232c23.3216 0 42.5728-19.0976 42.5728-42.5472 0-23.4496-19.2512-42.5216-42.5728-42.5216zM767.0784 769.5872H255.8464a42.5216 42.5216 0 1 0 0 85.0688h511.232c23.3216 0 42.5728-19.1488 42.5728-42.6752 0-23.3984-19.2512-42.3936-42.5728-42.3936z" fill="#f7f7f7" p-id="2385"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/login.97bc0f97.png b/admin/lianhelihua_admin/static/img/login.97bc0f97.png
deleted file mode 100644
index 6424c2e..0000000
--- a/admin/lianhelihua_admin/static/img/login.97bc0f97.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/logo.32e88954.png b/admin/lianhelihua_admin/static/img/logo.32e88954.png
deleted file mode 100644
index 33f6435..0000000
--- a/admin/lianhelihua_admin/static/img/logo.32e88954.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/man.6eaa0e37.png b/admin/lianhelihua_admin/static/img/man.6eaa0e37.png
deleted file mode 100644
index a84beb9..0000000
--- a/admin/lianhelihua_admin/static/img/man.6eaa0e37.png
+++ /dev/null
Binary files differ
diff --git a/admin/lianhelihua_admin/static/img/permission.e4625523.svg b/admin/lianhelihua_admin/static/img/permission.e4625523.svg
deleted file mode 100644
index 7499def..0000000
--- a/admin/lianhelihua_admin/static/img/permission.e4625523.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621746809427" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4923" width="64.0625" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M928.612599 95.57028a325.17778 325.17778 0 0 0-523.501496 370.143341l-383.852354 383.852354a72.018013 72.018013 0 0 0 0 102.177841L73.352997 1002.741343a72.018013 72.018013 0 0 0 102.177841 0L329.254566 847.920893l19.192618 19.192618a73.114734 73.114734 0 0 0 102.177841 0l51.180314-51.180314a73.114734 73.114734 0 0 0 0-102.177841L482.978295 694.928312l75.490963-75.490963A325.17778 325.17778 0 0 0 928.612599 95.57028zM777.447886 402.469376a109.672101 109.672101 0 1 1-2.741802-155.186023 109.672101 109.672101 0 0 1 2.741802 155.186023z" p-id="4924" fill="#f7f7f7"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/position.84d5bc25.svg b/admin/lianhelihua_admin/static/img/position.84d5bc25.svg
deleted file mode 100644
index 6172da5..0000000
--- a/admin/lianhelihua_admin/static/img/position.84d5bc25.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621751435396" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11906" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M870 96H154c-49.5 0-90 40.6-90 90.2v651.6c0 49.6 40.5 90.2 90 90.2h716c49.5 0 90-40.6 90-90.2V186.2c0-49.6-40.5-90.2-90-90.2zM177.5 314.4h167.3v59.9H177.5v-59.9z m0 223.5h167.3v59.9H177.5v-59.9z m646.4 229.9v-0.2H362.8v0.2h-59.7c0-20.1 2.3-39.9 6.9-59.1v-1.2h0.3c3.8-15.7 9.1-31 16-46 14.8-32.3 35.9-61.3 62.7-86.1 36.8-34 81.6-57.7 130.5-69.7-39.8-24.8-66.3-69-66.3-119.4 0-77.6 62.7-140.6 140.2-140.6 77.5 0 140.2 63 140.2 140.6 0 50.4-26.5 94.6-66.3 119.4 48.9 11.9 93.7 35.6 130.5 69.7 26.8 24.8 47.9 53.8 62.7 86.1 15.4 33.7 23.2 69.4 23.2 106.3h-59.8z" fill="#f7f7f7" p-id="11907"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/pwd.f269b92a.svg b/admin/lianhelihua_admin/static/img/pwd.f269b92a.svg
deleted file mode 100644
index c77cebe..0000000
--- a/admin/lianhelihua_admin/static/img/pwd.f269b92a.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621744473001" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2398" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M822.857143 475.428571a36.571429 36.571429 0 0 1 36.571428 36.571429v91.428571a347.428571 347.428571 0 0 1-694.857142 0v-91.428571a36.571429 36.571429 0 0 1 36.571428-36.571429h621.714286m0-73.142857H201.142857a109.714286 109.714286 0 0 0-109.714286 109.714286v91.428571a420.571429 420.571429 0 0 0 420.571429 420.571429 420.571429 420.571429 0 0 0 420.571429-420.571429v-91.428571a109.714286 109.714286 0 0 0-109.714286-109.714286z" p-id="2399" fill="#c1c4cc"></path><path d="M731.428571 475.428571a36.571429 36.571429 0 0 1-36.571428-36.571428V256a182.857143 182.857143 0 0 0-365.714286 0v182.857143a36.571429 36.571429 0 0 1-73.142857 0V256a256 256 0 0 1 512 0v182.857143a36.571429 36.571429 0 0 1-36.571429 36.571428zM512 768a36.571429 36.571429 0 0 1-36.571429-36.571429v-146.285714a36.571429 36.571429 0 0 1 73.142858 0v146.285714a36.571429 36.571429 0 0 1-36.571429 36.571429z" p-id="2400" fill="#c1c4cc"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/role.f81aee2b.svg b/admin/lianhelihua_admin/static/img/role.f81aee2b.svg
deleted file mode 100644
index df41c8d..0000000
--- a/admin/lianhelihua_admin/static/img/role.f81aee2b.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621750614796" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6622" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M782.215429 604.888761l-18.436207-15.623905-4.609052-3.749737c-3.827857-3.2029-7.811952-6.249562-11.48357-9.296223l-5.234008-3.905976-1.093673-0.859315-6.56204-4.765291c-3.359139-2.421705-6.796398-4.765291-10.233658-7.030757l-2.343585-1.56239a382.082586 382.082586 0 0 0-109.367332-49.293419 264.668943 264.668943 0 1 0-204.438791 0 385.129247 385.129247 0 0 0-108.0393 48.98094l-2.265466 1.562391c-3.515379 2.265466-6.952638 4.609052-10.233658 7.030757l-6.640159 4.84341-0.937434 0.624957-5.312128 4.062215c-3.905976 2.968542-7.811952 6.093323-11.952287 9.608701l-4.062215 3.437259-18.592446 15.623905 0.937434 0.546836A397.159653 397.159653 0 0 0 122.183582 889.321943V914.085832a109.757929 109.757929 0 0 0 109.757929 109.367331h559.257663a109.757929 109.757929 0 0 0 109.367332-109.367331v-24.998248a396.847175 396.847175 0 0 0-119.288511-283.730106z" fill="#f7f7f7" p-id="6623"></path><path d="M232.253989 576.297015c3.984096-3.359139 7.811952-6.327681 11.327331-9.139984l5.858964-4.452813 0.859315-0.624956 6.952637-5.077769 10.936734-7.811952 2.421705-1.562391a403.409215 403.409215 0 0 1 74.526024-38.512924 286.698648 286.698648 0 0 1-138.115316-244.748465c0-6.405801 0-12.733482 0.703076-18.983044a171.081755 171.081755 0 0 0 24.52953 330.914298zM225.926308 581.609143a252.951015 252.951015 0 0 0-102.805292 39.059761l-1.562391 1.015554c-2.265466 1.56239-4.530932 3.046661-6.718278 4.687171l-4.374694 3.202901c-1.406151 1.015554-2.812303 2.031108-4.140334 3.124781-2.577944 1.952988-5.155888 3.984096-7.811953 6.093322l-0.859314 0.781196-2.187347 1.718629A262.950313 262.950313 0 0 0 5.004298 839.872285v17.342534a63.979889 63.979889 0 0 0 63.979889 63.979889h12.186645v-21.482869a421.220466 421.220466 0 0 1 107.648703-281.230281zM678.863301 509.426704a406.221518 406.221518 0 0 1 74.526024 38.512925l2.343586 1.56239 11.014853 7.811952 6.874518 5.077769 0.937434 0.624956 5.858964 4.452813c3.593498 2.812303 7.343235 5.780845 11.327331 9.139984a171.081755 171.081755 0 0 0 24.52953-330.914298c0.390598 6.249562 0.703076 12.577243 0.703076 18.983044A286.698648 286.698648 0 0 1 678.863301 509.426704zM928.220817 641.136219l-2.109227-1.718629-0.937434-0.781196c-2.499825-2.109227-4.999649-4.140335-7.811953-6.093322l-4.140334-3.124781-4.374694-3.202901c-2.187347-1.64051-4.452813-3.124781-6.796398-4.687171l-1.484271-1.015554a253.341612 253.341612 0 0 0-102.805292-39.059761l37.106773 36.716175a421.142347 421.142347 0 0 1 107.570583 281.230282v21.482869h12.186646a64.058009 64.058009 0 0 0 64.058008-63.979889v-17.030056a262.715955 262.715955 0 0 0-90.462407-198.736066z" fill="#f7f7f7" p-id="6624"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/shield.7b210670.svg b/admin/lianhelihua_admin/static/img/shield.7b210670.svg
deleted file mode 100644
index 9813a37..0000000
--- a/admin/lianhelihua_admin/static/img/shield.7b210670.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621745695957" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3315" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M517.094527 1024c-153.345274 0-438.129353-228.234826-438.129353-444.242786V167.60995c0-10.189055 8.151244-17.830846 18.849751-18.340298l24.963184-0.509453c1.018905 0 98.324378-2.037811 198.686568-41.775124C423.864677 66.228856 490.093532 19.359204 491.112438 18.849751l14.774129-10.189054c3.056716-2.037811 7.132338-3.566169 11.20796-3.56617 4.075622 0 8.151244 1.018905 11.207961 3.56617l14.774129 10.698507c0.509453 0.509453 67.247761 47.379104 170.157214 88.135323 100.362189 39.737313 197.667662 41.775124 198.686567 41.775125l24.453731 0.509452c10.189055 0 18.849751 8.151244 18.849752 18.340299v412.147264c0 215.498507-284.78408 443.733333-438.129354 443.733333z m370.881592-808.501493c-37.699502-3.056716-117.174129-12.736318-199.196019-45.341293-84.569154-33.114428-146.212935-70.304478-171.685573-87.116418-25.472637 16.302488-87.116418 54.00199-171.685572 87.116418-82.021891 32.604975-160.987065 42.284577-199.19602 45.341293v364.258707c0 169.138308 248.103483 376.485572 370.881592 376.485572 47.379104 0 140.099502-38.718408 230.78209-123.287562 87.625871-81.512438 140.099502-176.270647 140.099502-253.19801V215.498507z m-406.03383 433.544279c-6.113433 6.622886-14.774129 10.189055-23.944279 10.189055-9.170149 0-17.321393-3.566169-23.944279-10.189055l-101.381094-101.890547a33.827662 33.827662 0 0 1 0-47.888557c13.245771-13.245771 34.133333-13.245771 47.379104-0.509453l0.509453 0.509453 77.436816 77.946268 195.120398-196.648756c12.736318-13.245771 34.133333-13.245771 47.379104-0.509453l0.509453 0.509453c13.245771 13.245771 13.245771 34.642786 0 47.888557l-219.064676 220.593035z" p-id="3316" fill="#c1c4cc"></path></svg>
diff --git a/admin/lianhelihua_admin/static/img/woman.e651ccdb.png b/admin/lianhelihua_admin/static/img/woman.e651ccdb.png
deleted file mode 100644
index eef8695..0000000
--- a/admin/lianhelihua_admin/static/img/woman.e651ccdb.png
+++ /dev/null
Binary files differ
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 17aa7e2..0d3f45b 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -11037,6 +11037,11 @@
       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
       "dev": true
     },
+    "qrcodejs2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmmirror.com/qrcodejs2/-/qrcodejs2-0.0.2.tgz",
+      "integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA=="
+    },
     "qs": {
       "version": "6.5.2",
       "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz",
diff --git a/admin/package.json b/admin/package.json
index 92b3c5a..c312022 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -4,7 +4,7 @@
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
-    "serve:test": "vue-cli-service serve --mode test",
+    "servetest": "vue-cli-service serve --mode test",
     "build:test": "vue-cli-service build --mode test",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint",
@@ -17,6 +17,7 @@
     "axios": "^0.21.1",
     "core-js": "^3.6.5",
     "crypto-js": "^4.1.1",
+    "qrcodejs2": "0.0.2",
     "dayjs": "^1.11.0",
     "echarts": "^5.6.0",
     "element-ui": "^2.3.6",
diff --git a/admin/src/api/business/category.js b/admin/src/api/business/category.js
index 5ed8bda..569e286 100644
--- a/admin/src/api/business/category.js
+++ b/admin/src/api/business/category.js
@@ -24,6 +24,15 @@
     download: true
   })
 }
+export function importDcaExcel (data) {
+  return request.post('/business/category/importDcaExcel', data)
+}
+export function exportDcaExcel (data) {
+  return request.post('/business/category/exportDcaExcel', encryptData(data), {
+    trim: true,
+    download: true
+  })
+}
 
 // 鍒涘缓
 export function create (data) {
diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
index f19de73..6861e19 100644
--- a/admin/src/api/business/company.js
+++ b/admin/src/api/business/company.js
@@ -12,6 +12,16 @@
     trim: true
   })
 }
+export function allList (data) {
+  return request.post('/business/company/list', encryptData(data), {
+    trim: true
+  })
+}
+export function treeWithMember (data) {
+  return request.post('/business/company/treeWithMember', encryptData(data), {
+    trim: true
+  })
+}
 
 // 瀵煎嚭Excel
 export function exportExcel (data) {
diff --git a/admin/src/api/system/dict.js b/admin/src/api/system/dict.js
index 02a45f3..0c95070 100644
--- a/admin/src/api/system/dict.js
+++ b/admin/src/api/system/dict.js
@@ -5,6 +5,9 @@
 export function fetchList (data) {
   return request.post('/system/dict/page', data)
 }
+export function qrcodeList (data) {
+  return request.post('/system/dict/qrcodeList', data)
+}
 
 // 鏂板缓
 export function create (data) {
diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss
index 6965c4e..a2ed35a 100644
--- a/admin/src/assets/style/style.scss
+++ b/admin/src/assets/style/style.scss
@@ -30,6 +30,19 @@
 .el-transfer__buttons {
   padding: 0 16px !important;
 }
+.tip-warn {
+  margin: 4px 0 25px 0;
+  font-size: 12px;
+  color: #999;
+  line-height: 25px;
+  i {
+    color: orange;
+    margin-right: 4px;
+    font-size: 14px;
+    position: relative;
+    top: 1px;
+  }
+}
 
 // dialog
 .eva-dialog {
diff --git a/admin/src/components/business/OperaCategoryImportWindow.vue b/admin/src/components/business/OperaCategoryImportWindow.vue
new file mode 100644
index 0000000..1d10dc1
--- /dev/null
+++ b/admin/src/components/business/OperaCategoryImportWindow.vue
@@ -0,0 +1,96 @@
+<template>
+  <el-dialog
+      class="center-title"
+      :title="title"
+      width="55%"
+      top="30vh"
+      :visible.sync="visible"
+      :confirm-working="isWorking"
+      @confirm="confirm"
+  >
+    <p class="tip-warn"><i class="el-icon-warning"></i>瀵煎叆璇存槑锛�<br>
+      1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
+      2.涓嬭浇妯$増涓哄綋鍓嶇郴缁熷凡褰曞叆鐨勫叏閲忎富棰樿瀵熼」鏁版嵁;<br>
+      3.姣忔鍏ㄩ噺瀵煎叆灏嗚鐩栨洿鏂颁笌琛ㄦ牸鏁版嵁銆佸眰绾у叧绯讳笉涓�鑷寸殑鏁版嵁閰嶇疆椤癸紝璇疯皑鎱庢搷浣滐紒<br>
+    </p>
+    <el-form class="demo-form-inline" >
+      <el-form-item label="閫夋嫨瀵煎叆鏂囦欢" required>
+        <div style="width: 100%;display: flex;align-items: center;">
+          <el-button type="primary"   @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+          <el-button type="text" @click="exportTemplate" :loading="exporting">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+        </div>
+        <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
+      </el-form-item>
+    </el-form>
+    <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
+    <template   v-slot:footer>
+      <el-button @click="visible=false">杩斿洖</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import { importDcaExcel, exportDcaExcel } from '@/api/business/category'
+export default {
+  name: 'OperaCategoryImportWindow',
+  extends: BaseOpera,
+  components: {},
+  data () {
+    return {
+      exporting: false,
+      importing: false,
+      fileName: ''
+    }
+  },
+  methods: {
+    open (title, companyType) {
+      this.title = title
+      this.fileName = ''
+      this.visible = true
+    },
+    // 瀵煎嚭妯℃澘
+    exportTemplate () {
+      this.$dialog.exportConfirm('纭瀵煎嚭涓嬭浇妯$増鍚楋紵')
+        .then(() => {
+          this.exporting = true
+          exportDcaExcel({}).then(response => {
+            this.exporting = false
+            this.download(response)
+          })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.exporting = false
+            })
+        })
+        .catch(() => {})
+    },
+    clickRef () {
+      this.$refs.fileExcel.click()
+    },
+    result (e) {
+      const data = new FormData()
+      data.append('file', e.target.files[0])
+      importDcaExcel(data)
+        .then(res => {
+          this.$message.success('瀵煎叆鎴愬姛')
+          this.$emit('success')
+          this.visible = false
+        })
+        .catch(err => {
+          this.$message.error(err)
+          this.fileName = ''
+        })
+        .finally(() => {
+          this.$refs.fileExcel.value = null
+        })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/components/business/OperaManagersWindow.vue b/admin/src/components/business/OperaManagersWindow.vue
index e106aac..5a93fea 100644
--- a/admin/src/components/business/OperaManagersWindow.vue
+++ b/admin/src/components/business/OperaManagersWindow.vue
@@ -6,8 +6,37 @@
     @confirm="confirm"
   >
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item  label="閫夋嫨璐熻矗浜猴細" prop="memberId">
-        <el-select v-model="form.memberId" filterable remote :remote-method="loadMember" :loading="loading"  placeholder="鍙緭鍏ュ鍚� | 鎵嬫満鍙� | 閮ㄩ棬鍚嶇О杩涜鎼滅储">
+      <el-form-item label="璁剧疆鑼冨洿" prop="isMember" :required="true">
+        <el-radio-group v-model="form.isMember">
+          <el-radio :label="0">閫夋嫨閮ㄩ棬</el-radio>
+<!--          <el-radio :label="1">閮ㄩ棬鍙婂叾涓嬬骇閮ㄩ棬鍛樺伐</el-radio>-->
+          <el-radio :label="2">鎸囧畾浜哄憳</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="鎵�灞炵粍缁�" prop="companyIds" v-if="form.isMember==0 || form.isMember==1"  :required="true">
+<!--        <treeselect
+            v-model="form.companyId"
+            placeholder="璇烽�夋嫨"
+            :options="companyTree"
+            :normalizer="normalizeOptions"
+            :default-expand-level="1"
+            noChildrenText="娌℃湁瀛愰�夐」"
+            noOptionsText="娌℃湁鍙�夐」"
+            noResultsText="娌℃湁鍖归厤鐨勭粨鏋�" />-->
+        <el-tree
+            ref="tree"
+            :data="companyTree"
+            show-checkbox
+            node-key="id"
+            default-expand-all
+            @check-change="changeTree"
+            :expand-on-click-node="false"
+            :check-on-click-node="false"
+            :props="{id:'id',children: 'childList',label: 'name',isLeaf:'isLeaf'}">
+        </el-tree>
+      </el-form-item>
+      <el-form-item  label="閫夋嫨璐熻矗浜猴細" prop="memberIds" v-if="form.isMember==2" :required="true">
+        <el-select v-model="form.memberIds" filterable :multiple="true" :loading="loading"  placeholder="鍙緭鍏ュ鍚� | 鎵嬫満鍙� | 閮ㄩ棬鍚嶇О杩涜鎼滅储">
           <el-option
               v-for="item in memberList"
               :key="item.id"
@@ -35,6 +64,9 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { allList } from '@/api/business/member'
+import { treeList, allList as companyList } from '@/api/business/company'
+import { createRoleMenu } from '@/api/system/role'
+import { create } from '@/api/business/managers'
 
 export default {
   name: 'OperaManagersWindow',
@@ -45,17 +77,28 @@
       // 琛ㄥ崟鏁版嵁
       form: {
         type: '',
+        companyId: null,
         memberId: '',
+        memberIds: [],
+        companyIds: [],
         remark: '',
         isQw: 0,
-        isEmail: 0
+        isEmail: 0,
+        isMember: 0
       },
+      companyTree: [],
       loading: false,
       memberList: [],
       // 楠岃瘉瑙勫垯
       rules: {
-        memberId: [
+        memberIds: [
           { required: true, message: '璇烽�夋嫨璐熻矗浜�' }
+        ],
+        companyIds: [
+          { required: true, message: '璇烽�夋嫨閮ㄩ棬' }
+        ],
+        isMember: [
+          { required: true, message: '閫夋嫨璁剧疆鑼冨洿' }
         ]
       }
     }
@@ -67,10 +110,52 @@
     })
   },
   methods: {
+    loadData (node, resolve) {
+      console.log(node)
+      if(!node.hasChildren  || (node.childList && node.childList.length >0)){
+        return
+      }
+      companyList({ parentId: node.id })
+        .then(res => {
+          node.childList = res
+        })
+    },
+    changeTree (node) {
+      const selectedMenus = this.$refs.tree.getCheckedNodes(false, true)
+      this.form.companyIds = selectedMenus.map(menu => menu.id)
+      console.log(this.form.companyIds)
+    },
+    getfindCompanyTreePage () {
+      treeList({})
+        .then(res => {
+          if (res && res.length > 0) {
+            res[0].fsStatus = 1
+            res[0].isLeaf = res[0].hasChildren
+            this.companyTree = res
+            // 鎵惧嚭鍙惰妭鐐�
+            // this.companyTree = this.companyTree.filter(menu => this.companyTree.findIndex(m => m.parentId === menu.id) === -1)
+            console.log(res)
+            // this.searchForm.erpOrgId = res[0].erpId
+          }
+        })
+    },
+
+    // 瑙勮寖鍖栭�夐」鏁版嵁鐨勬柟娉�
+    normalizeOptions (node) {
+      if (node.childList && !node.childList.length) {
+        delete node.childList
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.childList
+      }
+    },
     loadMember (query) {
       this.memberList = []
+      console.log(query)
       if (!query || query == '') {
-        return
+        // return
       }
       this.loading = true
       allList({
@@ -95,7 +180,8 @@
         this.form[this.configData['field.id']] = null
       })
       this.memberList = []
-      // this.loadMember()
+      this.getfindCompanyTreePage()
+      this.loadMember()
     }
   }
 }
diff --git a/admin/src/components/business/OperaWorkorderDetailDbhWindow.vue b/admin/src/components/business/OperaWorkorderDetailDbhWindow.vue
index 245d85b..a9e2f01 100644
--- a/admin/src/components/business/OperaWorkorderDetailDbhWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailDbhWindow.vue
@@ -8,9 +8,9 @@
     <div class="modal_wrap">
       <div class="modal_content">
         <div class="header">
-          <img v-if="info.status == '3'" class="head_bg"
-               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">
-          <img v-else-if="info.status == '4'" class="head_bg"
+          <!--          <img v-if="info.status == '0'" class="head_bg"
+                  src="@/assets/task/bg_shenhe_fail@2x.png" alt="">-->
+          <img v-if="info.status == '4' || info.status == '3'||info.status == '5'||info.status == '6'" class="head_bg"
                src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
           <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
           <div class="left">
@@ -46,13 +46,13 @@
               <div class="label">鍙戠敓鍦扮偣</div>
               <div class="value">{{ info.locationName }}</div>
             </div>
-            <div class="item">
-              <div class="label">椋庨櫓鎻忚堪</div>
-              <div class="value">{{ info.riskInfo }}</div>
-            </div>
-            <div class="item">
+            <div class="item" style="width: 100%">
               <div class="label">閫氱煡浜�</div>
               <div class="value">{{ info.memberNames }}</div>
+            </div>
+            <div class="item"  style="width: 100%">
+              <div class="label">椋庨櫓鎻忚堪</div>
+              <div class="value">{{ info.riskInfo }}</div>
             </div>
             <div class="item" style="width: 100%">
               <div class="label">鍥剧墖</div>
@@ -148,11 +148,11 @@
       info: {},
       statusMap: {
         0: '寰呭垎閰峎TS',
-        1: '寰呭垎閰嶄换鍔�',
-        2: '寰呭伐绋嬪笀澶勭悊',
-        3: '宸茶В鍐�',
-        4: '宸茶В鍐�',
-        5: '宸茶В鍐�'
+        1: '寰呭垎閰嶅伐绋嬪笀',
+        2: '寰呭垎閰嶄换鍔�',
+        3: 'SHE鍏抽棴',
+        4: 'WTS鍏抽棴',
+        5: '宸ョ▼甯堝叧闂�'
       },
       cateList: {
         0: 'SHE浜嬩欢宸ュ崟',
@@ -231,7 +231,7 @@
 
 .modal_wrap {
   display: flex;
-  height: 100%;
+  height: aotu;
 
   .modal_content {
     flex: 1;
@@ -253,14 +253,14 @@
         display: flex;
         flex-wrap: wrap;
 
-        .item {
+        .item.item {
           display: flex;
-          width: 40%;
+          width: 50%;
           font-size: 14px;
           margin-bottom: 20px;
 
           &:nth-of-type(2n) {
-            width: 60%;
+            width: 50%;
           }
 
           .label {
@@ -269,6 +269,7 @@
           }
 
           .value {
+            width: calc(100% - 100px);
             color: #111111;
           }
         }
diff --git a/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue b/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
index b6e62d9..c9fd5db 100644
--- a/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
@@ -8,16 +8,16 @@
     <div class="modal_wrap">
       <div class="modal_content">
         <div class="header">
-          <img v-if="info.status == '3'" class="head_bg"
-               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">
-          <img v-else-if="info.status == '4'" class="head_bg"
+          <!--          <img v-if="info.status == '0'" class="head_bg"
+                 src="@/assets/task/bg_shenhe_fail@2x.png" alt="">-->
+          <img v-if="info.status == '4' || info.status == '3'||info.status == '5'||info.status == '6'" class="head_bg"
                src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
           <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
           <div class="left">
             <div class="h1">涓嶇鍚堥」锛歿{ info.problemTitle }}</div>
             <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
           </div>
-          <div class="right"  :style="(info.status ==0 ||info.status ==1 || info.status ==2)?'min-width: 90px':''" :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
+          <div class="right"  style="text-align:center;min-width: 90px" :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
         </div>
         <div class="info">
           <div class="title">宸ュ崟淇℃伅</div>
@@ -46,7 +46,7 @@
               <div class="label">鍙戠幇鏃堕棿</div>
               <div class="value">{{ info.happenTime}}</div>
             </div>
-            <div class="item">
+            <div class="item" style="width: 100%">
               <div class="label">閫氱煡浜�</div>
               <div class="value">{{ info.memberNames }}</div>
             </div>
@@ -147,11 +147,11 @@
       info: {},
       statusMap: {
         0: '寰呭垎閰峎TS',
-        1: '寰呭垎閰嶄换鍔�',
-        2: '寰呭伐绋嬪笀澶勭悊',
-        3: '宸茶В鍐�',
-        4: '宸茶В鍐�',
-        5: '宸茶В鍐�'
+        1: '寰呭垎閰嶅伐绋嬪笀',
+        2: '寰呭垎閰嶄换鍔�',
+        3: 'SHE鍏抽棴',
+        4: 'WTS鍏抽棴',
+        5: '宸ョ▼甯堝叧闂�'
       },
       cateList: {
         0: 'SHE浜嬩欢宸ュ崟',
@@ -230,7 +230,7 @@
 
 .modal_wrap {
   display: flex;
-  height: 100%;
+  height: auto;
 
   overflow: hidden;
   .modal_content {
@@ -255,12 +255,12 @@
 
         .item {
           display: flex;
-          width: 40%;
+          width: 50%;
           font-size: 14px;
           margin-bottom: 20px;
 
           &:nth-of-type(2n) {
-            width: 60%;
+            width: 50%;
           }
 
           .label {
@@ -269,6 +269,7 @@
           }
 
           .value {
+            width: calc(100% - 100px);
             color: #111111;
           }
         }
diff --git a/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue b/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
index 8cc3844..5aeee8c 100644
--- a/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
@@ -8,15 +8,16 @@
     <div class="modal_wrap">
       <div class="modal_content">
         <div class="header">
-          <img v-if="info.status == '3'" class="head_bg"
-               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">
-          <img v-else-if="info.status == '4'" class="head_bg"
+          <!--          <img v-if="info.status == '0'" class="head_bg"
+                  src="@/assets/task/bg_shenhe_fail@2x.png" alt="">-->
+          <img v-if="info.status == '4' || info.status == '3'||info.status == '5'||info.status == '6'" class="head_bg"
                src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
           <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
           <div class="left">
             <div class="h1">{{ cateList[type] }}</div>
             <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
           </div>
+          <div class="right"     :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
         </div>
         <div class="info">  <div class="title">宸ュ崟淇℃伅</div>
           <div class="list">
@@ -82,7 +83,7 @@
             <el-table-column prop="index" label="搴忓彿" width="55" fixed="left">
               <template slot-scope="scope">{{ scope.$index+1}}</template>
             </el-table-column>
-            <el-table-column label="宸ュ崟鍙�" prop="code" min-width="100">
+            <el-table-column label="宸ュ崟鍙�" prop="code" min-width="120">
               <template slot-scope="{row}">
                 <span style="color: #2E68EC;cursor: pointer" @click="$refs.OperaWorkorderDetailDcaInfoWindow.open('DCA涓嶇鍚堥」宸ュ崟璇︽儏', row)" >{{ row.code || '-'}}</span>
               </template>
@@ -90,14 +91,19 @@
             <el-table-column label="涓�绾т富棰�" prop="typeName" min-width="60"> </el-table-column>
             <el-table-column label="浜岀骇涓婚" prop="categoryName" min-width="60"> </el-table-column>
             <el-table-column label="瑙傚療椤�" prop="problemTitle" min-width="100"> </el-table-column>
-            <el-table-column label="涓嶇鍚堝師鍥�" prop="eventInfo" min-width="120" />
-            <el-table-column label="澶勭悊鐘舵��" prop="status" min-width="80">
+            <el-table-column label="鐘舵��" prop="status" min-width="80">
               <template slot-scope="{row}">
 <!--                <span :class="'statusInfo'+row.status" v-if="row.status ==0">寰呭鐞�</span>-->
                 <span :class="'statusInfo'+row.status" v-if="row.status ==3 ||row.status ==4||row.status ==5">宸插鐞�</span>
                 <span :class="'statusInfo'+row.status" v-else>澶勭悊涓�</span>
               </template>
             </el-table-column>
+            <el-table-column prop="statusInfo" label="鐘舵�佹弿杩�" min-width="100px">
+              <template slot-scope="{row}">
+                <span :class="'statusInfo'+row.status" >{{ row.statusName }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="涓嶇鍚堝師鍥�" prop="eventInfo" min-width="180" />
             <el-table-column label="鎿嶄綔" prop="status" min-width="80">
               <template slot-scope="{row}">
                 <el-button type="text" @click="$refs.OperaWorkorderDetailDcaInfoWindow.open('DCA涓嶇鍚堥」宸ュ崟璇︽儏', row)" icon="el-icon-zoom-out" >鏌ョ湅璇︽儏</el-button>
@@ -112,7 +118,7 @@
             <el-table-column prop="index" label="搴忓彿" width="55" fixed="left">
               <template slot-scope="scope">{{ scope.$index+1}}</template>
             </el-table-column>
-            <el-table-column label="涓�绾т富棰�" prop="typeName" min-width="160"> </el-table-column>
+            <el-table-column label="涓�绾т富棰�" prop="typeName" min-width="140"> </el-table-column>
             <el-table-column label="浜岀骇涓婚" prop="categoryName" min-width="150"> </el-table-column>
             <el-table-column label="瑙傚療椤�" prop="problemTitle" min-width="400"> </el-table-column>
           </el-table>
@@ -145,12 +151,12 @@
       info: {},
       dataList2: [],
       statusMap: {
-        0: '寰呭垎閰峎TS',
-        1: '寰呭垎閰嶄换鍔�',
-        2: '寰呭伐绋嬪笀澶勭悊',
-        3: '宸茶В鍐�',
-        4: '宸茶В鍐�',
-        5: '宸茶В鍐�'
+        0: '澶勭悊涓�',
+        1: '澶勭悊涓�',
+        2: '澶勭悊涓�',
+        3: '宸插鐞�',
+        4: '宸插鐞�',
+        5: '宸插鐞�'
       },
       cateList: {
         0: 'SHE浜嬩欢宸ュ崟',
@@ -249,7 +255,7 @@
 
 .modal_wrap {
   display: flex;
-  height: 100%;
+  height: auto;
 
   .modal_content {
     flex: 1;
@@ -272,17 +278,21 @@
         flex-wrap: wrap;
         .item {
           display: flex;
-          width: 30%;
+          width: 50%;
           font-size: 14px;
           margin-bottom: 20px;
+
           &:nth-of-type(2n) {
-            width: 30%;
+            width: 50%;
           }
+
           .label {
             color: #888888;
             width: 100px;
           }
+
           .value {
+            width: calc(100% - 100px);
             color: #111111;
           }
         }
diff --git a/admin/src/components/business/OperaWorkorderDetailSheWindow.vue b/admin/src/components/business/OperaWorkorderDetailSheWindow.vue
index d5f9b49..8a21f88 100644
--- a/admin/src/components/business/OperaWorkorderDetailSheWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailSheWindow.vue
@@ -8,9 +8,9 @@
     <div class="modal_wrap">
       <div class="modal_content">
         <div class="header">
-          <img v-if="info.status == '3'" class="head_bg"
-               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">
-          <img v-else-if="info.status == '4'" class="head_bg"
+<!--          <img v-if="info.status == '0'" class="head_bg"
+               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">-->
+          <img v-if="info.status == '4' || info.status == '3'||info.status == '5'||info.status == '6'" class="head_bg"
                src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
           <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
           <div class="left">
@@ -41,16 +41,8 @@
               <div class="value" v-else>鏈汉</div>
             </div>
             <div class="item">
-              <div class="label">鍙戠敓鍦扮偣</div>
-              <div class="value">{{ info.locationName }}</div>
-            </div>
-            <div class="item">
               <div class="label">鍙戠幇鏃堕棿</div>
               <div class="value">{{ info.happenTime }}</div>
-            </div>
-            <div class="item">
-              <div class="label">鍏蜂綋浣嶇疆</div>
-              <div class="value">{{ info.remark }}</div>
             </div>
             <div class="item">
               <div class="label">澶栭儴灏卞尰</div>
@@ -71,6 +63,14 @@
             <div class="item">
               <div class="label">鍜屽伐浣滅浉鍏�</div>
               <div class="value">{{ info.workRelated == "0" ? "鍚�" : "鏄�" }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鍙戠敓鍦扮偣</div>
+              <div class="value">{{ info.locationName }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鍏蜂綋浣嶇疆</div>
+              <div class="value">{{ info.remark }}</div>
             </div>
             <div class="item">
               <div class="label">浜嬩欢璇存槑</div>
@@ -179,12 +179,12 @@
       title: '宸ュ崟璇︽儏',
       info: {},
       statusMap: {
-        0: '寰呭垎閰峎TS',
-        1: '寰呭垎閰嶄换鍔�',
-        2: '寰呭伐绋嬪笀澶勭悊',
-        3: '宸茶В鍐�',
-        4: '宸茶В鍐�',
-        5: '宸茶В鍐�'
+        0: '澶勭悊涓�',
+        1: '澶勭悊涓�',
+        2: '澶勭悊涓�',
+        3: '宸插鐞�',
+        4: '宸插鐞�',
+        5: '宸插鐞�'
       },
       cateList: {
         0: 'SHE浜嬩欢宸ュ崟',
@@ -263,7 +263,7 @@
 
 .modal_wrap {
   display: flex;
-  height: 100%;
+  height: auto;
 
   .modal_content {
     flex: 1;
@@ -287,12 +287,12 @@
 
         .item {
           display: flex;
-          width: 40%;
+          width: 50%;
           font-size: 14px;
           margin-bottom: 20px;
 
           &:nth-of-type(2n) {
-            width: 60%;
+            width: 50%;
           }
 
           .label {
@@ -301,6 +301,7 @@
           }
 
           .value {
+             width: calc(100% - 100px);
             color: #111111;
           }
         }
diff --git a/admin/src/components/common/RichEditor.vue b/admin/src/components/common/RichEditor.vue
index 91cd904..a312cc2 100644
--- a/admin/src/components/common/RichEditor.vue
+++ b/admin/src/components/common/RichEditor.vue
@@ -129,10 +129,10 @@
         MENU_CONF: {
           // 鍥剧墖涓婁紶
           uploadImage: {
-            server: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload?folder=richeditor',
+            server: process.env.VUE_APP_API_PREFIX + '/web/public/upload?folder=richeditor',
             fieldName: 'file',
             // 鍗曚釜鏂囦欢鐨勬渶澶т綋绉檺鍒讹紝榛樿涓� 2M
-            maxFileSize: 10 * 1024 * 1024, // 10M
+            maxFileSize: 20 * 1024 * 1024, // 10M
             // 鏈�澶氬彲涓婁紶鍑犱釜鏂囦欢锛岄粯璁や负 100
             maxNumberOfFiles: 10,
             // 閫夋嫨鏂囦欢鏃剁殑绫诲瀷闄愬埗锛岄粯璁や负 ['image/*'] 銆傚涓嶆兂闄愬埗锛屽垯璁剧疆涓� []
@@ -147,7 +147,7 @@
             // 璺ㄥ煙鏄惁浼犻�� cookie 锛岄粯璁や负 false
             withCredentials: true,
             // 瓒呮椂鏃堕棿锛岄粯璁や负 10 绉�
-            timeout: 10 * 1000, // 10 绉�
+            timeout: 10 * 10000, // 10 绉�
             // 涓婁紶鍓�
             onBeforeUpload (files) {
               loadingInstance = Loading.service({
@@ -178,9 +178,10 @@
                 //     message: `${res.data.originalName} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
                 // });
               }
-              insertFn(res.data.url, res.data.originname, res.data.imgname)
+              if(res.data && res.data.url){
+                insertFn(res.data.url, res.data.originname, res.data.imgname)
+              }
             },
-
             // 鍗曚釜鏂囦欢涓婁紶鎴愬姛涔嬪悗
             onSuccess (file, res) {
               console.log(`${file.originalFilename} 涓婁紶鎴愬姛`, res)
@@ -246,7 +247,9 @@
                 //     message: `${res.data.originalName} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
                 // });
               }
-              insertFn(res.data.url, res.data.url)
+              if(res.data && res.data.url){
+                insertFn(res.data.url, res.data.url)
+              }
             },
             // 涓婁紶杩涘害鐨勫洖璋冨嚱鏁�
             onProgress (progress) {
diff --git a/admin/src/components/common/Tree.vue b/admin/src/components/common/Tree.vue
index b522403..da887b6 100644
--- a/admin/src/components/common/Tree.vue
+++ b/admin/src/components/common/Tree.vue
@@ -1,22 +1,24 @@
 <template>
-    <div class="tree">
-        <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)">
-            <div class="tree_item">
-                <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.actived === 1 }" v-show="item.fsStatus === 1 && item.childList.length > 0"></i>
-                <i class="el-icon-caret-right color" v-show="item.childList.length > 0 && (item.fsStatus === 0 || !item.fsStatus)"></i>
-                <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor':  item.actived === 1 }">{{ item.name }}</div>
-            </div>
-            <div class="tree_childern" v-show="item.fsStatus === 1">
-                <tree
-                  :list="item.childList"
-                  :alllist="alllist"
-                  :defaultProps="defaultProps"
-                  @callback="callback"
-                />
-                 <!-- @callback="callback" -->
-            </div>
-        </div>
+  <div class="tree">
+    <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)">
+      <div class="tree_item">
+        <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.fsStatus === 1 }" v-show="item.fsStatus === 1 && item.childList && item.childList.length > 0"></i>
+        <i class="el-icon-caret-right color" v-show="item.childList && item.childList.length > 0 && (item.fsStatus === 0 || !item.fsStatus)"></i>
+        <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor': item.fsDate === 1 && item.childList && item.childList.length === 0 }">{{ item.name }}</div>
+        <!--                <i class="el-icon-caret-bottom" :class="{ 'activeColor': item[defaultProps.status] }" v-show="item[defaultProps.status] && item[defaultProps.children]"></i>-->
+        <!--                <i class="el-icon-caret-right color" v-show="item[defaultProps.children] && !item[defaultProps.status]"></i>-->
+        <!--                <div class="tree_item_label long-title-style" :title="item[defaultProps.name]" :class="{ 'activeColor': item[defaultProps.status] && !item[defaultProps.children] }">{{ item[defaultProps.name] }}</div>-->
+      </div>
+      <div class="tree_childern" v-show="item.fsStatus === 1">
+        <tree
+            :list="item.childList"
+            :defaultProps="defaultProps"
+            @callback="callback"
+        />
+        <!-- @callback="callback" -->
+      </div>
     </div>
+  </div>
 </template>
 
 <script>
@@ -25,11 +27,6 @@
   name: 'tree',
   props: {
     list: {
-      type: Array,
-      required: false,
-      default: () => []
-    },
-    alllist: {
       type: Array,
       required: false,
       default: () => []
@@ -58,33 +55,45 @@
     }
   },
   methods: {
-    listForList(){
-      // console.log('===============================',this.alllist)
-    },
     // 鐐瑰嚮褰撳墠椤�
     clickIten (item) {
-      // this.listForList()
+      // item[this.defaultProps.status] = !item[this.defaultProps.status]
+      // this.list.forEach(subItem => {
+      //   if ((subItem[this.defaultProps.id] !== item[this.defaultProps.id] && subItem[this.defaultProps.status]) || (this.list.length === 1 && subItem[this.defaultProps.status] === false)) {
+      //     subItem[this.defaultProps.status] = false
+      //     if (subItem[this.defaultProps.children]) {
+      //       this.recursion(subItem[this.defaultProps.children])
+      //     }
+      //   }
+      // })
+      // if (this.tempItem['id'] === item[this.defaultProps.id]) {
+      //   this.tempItem = {
+      //     id: null,
+      //     name: null,
+      //     erpId: null
+      //   }
+      // } else {
+      //   this.tempItem.id = item[this.defaultProps.id]
+      //   this.tempItem.name = item[this.defaultProps.name]
+      //   this.tempItem.erpId = item['erpId']
+      // }
+      // item.fsDate === 0 || !item.fsDate ? item.fsDate = 1 : item.fsDate = 0
       const fsDate = item.fsDate === 0 || !item.fsDate ? 1 : 0
-      this.alllist.forEach(i => {
+      this.list.forEach(i => {
         i.fsDate = 0
-        i.actived = 0
-        this.recursion1(i.childList)
       })
       item.fsDate = fsDate
-      item.actived = 1
       if (item.childList.length > 0) {
         item.fsStatus === 0 || !item.fsStatus ? item.fsStatus = 1 : item.fsStatus = 0
       }
       this.$emit('callback', item, item)
     },
-    recursion1 (children) {
-      if (!children || children.length === 0){
-        return
-      }
+    // 閫掑綊鏂规硶
+    recursion (children) {
       children.forEach(item => {
-        item.actived = 0
-        if (item.childList && item.childList.length > 0) {
-          this.recursion1(item.childList)
+        item.fsDate = 0
+        if (item.childList.length > 0) {
+          this.recursion(item.childList)
         }
         // item[this.defaultProps.status] = false
         // if (item[this.defaultProps.children]) {
@@ -107,39 +116,39 @@
 
 <style lang="scss" scoped>
 .tree {
-    /*width: 100%;*/
-    /*height: auto;*/
-    /*border-radius: 5px;*/
-    /*overflow: hidden;*/
-    /*border: 1px solid #eeeeee;*/
-    /*box-sizing: border-box;*/
-    .tree_childern {
-        margin-left: 20px;
+  /*width: 100%;*/
+  /*height: auto;*/
+  /*border-radius: 5px;*/
+  /*overflow: hidden;*/
+  /*border: 1px solid #eeeeee;*/
+  /*box-sizing: border-box;*/
+  .tree_childern {
+    margin-left: 20px;
+  }
+  .activeItem {
+    background: #F4F7FC;
+  }
+  .tree_item {
+    display: flex;
+    align-items: center;
+    height: 48px;
+    cursor: pointer;
+    padding-left: 10px;
+    .tree_item_label {
+      font-size: 14px;
+      font-weight: 400;
+      color: #333333;
+      white-space: nowrap;
     }
-    .activeItem {
-        background: #F4F7FC;
+    i {
+      margin-right: 5px;
     }
-    .tree_item {
-        display: flex;
-        align-items: center;
-        height: 48px;
-        cursor: pointer;
-        padding-left: 10px;
-        .tree_item_label {
-            font-size: 14px;
-            font-weight: 400;
-            color: #333333;
-            white-space: nowrap;
-        }
-        i {
-            margin-right: 5px;
-        }
-        .color {
-            color: #999999 !important;
-        }
-        .activeColor {
-            color: #305ED5 !important;
-        }
+    .color {
+      color: #999999 !important;
     }
+    .activeColor {
+      color: #305ED5 !important;
+    }
+  }
 }
 </style>
diff --git a/admin/src/components/common/TreeNew.vue b/admin/src/components/common/TreeNew.vue
new file mode 100644
index 0000000..ddbc3f7
--- /dev/null
+++ b/admin/src/components/common/TreeNew.vue
@@ -0,0 +1,145 @@
+<template>
+    <div class="tree">
+        <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)">
+            <div class="tree_item">
+                <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.actived === 1 }" v-show="item.fsStatus === 1 && item.hasChildren"></i>
+                <i class="el-icon-caret-right color" v-show="item.hasChildren  && (item.fsStatus === 0 || !item.fsStatus)"></i>
+                <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor':  item.actived === 1 }">{{ item.name }}</div>
+            </div>
+            <div class="tree_childern" v-show="item.fsStatus === 1">
+                <tree
+                  :list="item.childList"
+                  :alllist="alllist"
+                  :defaultProps="defaultProps"
+                  @callback="callback"
+                />
+                 <!-- @callback="callback" -->
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+// import Bus from '@/utils/eventBus'
+export default {
+  name: 'tree',
+  props: {
+    list: {
+      type: Array,
+      required: false,
+      default: () => []
+    },
+    alllist: {
+      type: Array,
+      required: false,
+      default: () => []
+    },
+    defaultProps: {
+      type: Object,
+      require: false,
+      default: () => {
+        return {
+          name: 'name',
+          status: 'status',
+          children: 'children',
+          id: 'id',
+          erpId: 'erpId'
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      tempItem: {
+        id: null,
+        name: null,
+        erpId: null
+      }
+    }
+  },
+  methods: {
+    listForList(){
+      // console.log('===============================',this.alllist)
+    },
+    // 鐐瑰嚮褰撳墠椤�
+    clickIten (item) {
+      // this.listForList()
+      const fsDate = item.fsDate === 0 || !item.fsDate ? 1 : 0
+      this.alllist.forEach(i => {
+        i.fsDate = 0
+        i.actived = 0
+        this.recursion1(i.childList)
+      })
+      item.fsDate = fsDate
+      item.actived = 1
+      if (item.hasChildren > 0) {
+        item.fsStatus === 0 || !item.fsStatus ? item.fsStatus = 1 : item.fsStatus = 0
+      }
+      this.$emit('callback', item, item)
+    },
+    recursion1 (children) {
+      if (!children || children.length === 0){
+        return
+      }
+      children.forEach(item => {
+        item.actived = 0
+        if (item.hasChildren) {
+          this.recursion1(item.childList)
+        }
+        // item[this.defaultProps.status] = false
+        // if (item[this.defaultProps.children]) {
+        //   this.recursion(item[this.defaultProps.children])
+        // }
+      })
+    },
+    callback (data, item) {
+      if (this.tempItem.id === data.id) {
+        this.tempItem = {}
+      } else {
+        this.tempItem.id = data.id
+        this.tempItem.name = data.name
+      }
+      this.$emit('callback', data, item)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.tree {
+    /*width: 100%;*/
+    /*height: auto;*/
+    /*border-radius: 5px;*/
+    /*overflow: hidden;*/
+    /*border: 1px solid #eeeeee;*/
+    /*box-sizing: border-box;*/
+    .tree_childern {
+        margin-left: 20px;
+    }
+    .activeItem {
+        background: #F4F7FC;
+    }
+    .tree_item {
+        display: flex;
+        align-items: center;
+        height: 48px;
+        cursor: pointer;
+        padding-left: 10px;
+        .tree_item_label {
+            font-size: 14px;
+            font-weight: 400;
+            color: #333333;
+            white-space: nowrap;
+        }
+        i {
+            margin-right: 5px;
+        }
+        .color {
+            color: #999999 !important;
+        }
+        .activeColor {
+            color: #305ED5 !important;
+        }
+    }
+}
+</style>
diff --git a/admin/src/components/common/UploadAvatarImage.vue b/admin/src/components/common/UploadAvatarImage.vue
index dfd5d22..e39f3e5 100644
--- a/admin/src/components/common/UploadAvatarImage.vue
+++ b/admin/src/components/common/UploadAvatarImage.vue
@@ -31,7 +31,7 @@
   data() {
     return {
       loading: null,
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload'
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/upload'
     }
   },
 
diff --git a/admin/src/components/common/UploadAvatarVideo.vue b/admin/src/components/common/UploadAvatarVideo.vue
index c0e43d9..1ed4dbd 100644
--- a/admin/src/components/common/UploadAvatarVideo.vue
+++ b/admin/src/components/common/UploadAvatarVideo.vue
@@ -36,7 +36,7 @@
   },
   data() {
     return {
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload'
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/upload'
     }
   },
 
diff --git a/admin/src/components/common/UploadFaceImg.vue b/admin/src/components/common/UploadFaceImg.vue
index 98e2dd1..ac68d58 100644
--- a/admin/src/components/common/UploadFaceImg.vue
+++ b/admin/src/components/common/UploadFaceImg.vue
@@ -56,7 +56,7 @@
       img: null,
       updateImg: false,
       imageSrc: null,
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload'
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/upload'
     }
   },
 
diff --git a/admin/src/components/common/UploadFile.vue b/admin/src/components/common/UploadFile.vue
index 7dcad1f..888a670 100644
--- a/admin/src/components/common/UploadFile.vue
+++ b/admin/src/components/common/UploadFile.vue
@@ -34,7 +34,7 @@
   data() {
     return {
       fileList:null,
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload?folder='+this.uploadData.folder
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/upload?folder='+this.uploadData.folder
     }
   },
 
diff --git a/admin/src/components/common/UploadFileCommon.vue b/admin/src/components/common/UploadFileCommon.vue
index db8be23..8ad4306 100644
--- a/admin/src/components/common/UploadFileCommon.vue
+++ b/admin/src/components/common/UploadFileCommon.vue
@@ -39,7 +39,7 @@
   },
   data() {
     return {
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload'
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/upload'
     }
   },
 
diff --git a/admin/src/components/common/UploadImage.vue b/admin/src/components/common/UploadImage.vue
index c0bb2bb..12b87ab 100644
--- a/admin/src/components/common/UploadImage.vue
+++ b/admin/src/components/common/UploadImage.vue
@@ -59,7 +59,7 @@
   },
   data() {
     return {
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadLocal',
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/uploadLocal',
 
       realList: [],
       srcList: [],
diff --git a/admin/src/components/common/upload.vue b/admin/src/components/common/upload.vue
index ccde115..f941a83 100644
--- a/admin/src/components/common/upload.vue
+++ b/admin/src/components/common/upload.vue
@@ -48,7 +48,7 @@
   },
   data () {
     return {
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload'
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/web/public/upload'
     }
   },
 
diff --git a/admin/src/views/business/categoryDbhLocaltion.vue b/admin/src/views/business/categoryDbhLocaltion.vue
index 3d21b0d..e6d3443 100644
--- a/admin/src/views/business/categoryDbhLocaltion.vue
+++ b/admin/src/views/business/categoryDbhLocaltion.vue
@@ -14,9 +14,7 @@
       </el-form>
     </div>
     <template v-slot:menu>
-      <div
-        style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">
-        璺岀粖婊戦闄╁彂鐢熷湴鐐�</div>
+      <div style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">  璺岀粖婊戦闄╁彂鐢熷湴鐐�</div>
       <div style="width: 100%; height: calc(100vh - 130px); overflow-y: scroll;">
         <Tree :list="treeList" :alllist="treeList"  :defaultProps="{ name: 'name', status: 'fsStatus', children: 'childList', id: 'id' }"
           @callback="callback" />
@@ -59,7 +57,7 @@
 import Tree from '@/components/common/Tree'
 import { treeList } from '@/api/business/category'
 export default {
-  name: 'categorySheType',
+  name: 'categoryDbhLocaltion',
   extends: BaseTable,
   components: { TableLayout1, Pagination, Tree, OperaCategoryWindow },
   data () {
diff --git a/admin/src/views/business/categoryDbhType.vue b/admin/src/views/business/categoryDbhType.vue
index 365dae2..79b049c 100644
--- a/admin/src/views/business/categoryDbhType.vue
+++ b/admin/src/views/business/categoryDbhType.vue
@@ -59,7 +59,7 @@
 import Tree from '@/components/common/Tree'
 import { treeList } from '@/api/business/category'
 export default {
-  name: 'categorySheType',
+  name: 'categoryDbhType',
   extends: BaseTable,
   components: { TableLayout1, Pagination, Tree, OperaCategoryWindow },
   data () {
diff --git a/admin/src/views/business/categoryDcaLocaltion.vue b/admin/src/views/business/categoryDcaLocaltion.vue
index 33001b4..24b2667 100644
--- a/admin/src/views/business/categoryDcaLocaltion.vue
+++ b/admin/src/views/business/categoryDcaLocaltion.vue
@@ -59,7 +59,7 @@
 import Tree from '@/components/common/Tree'
 import { treeList } from '@/api/business/category'
 export default {
-  name: 'categorySheType',
+  name: 'categoryDcaLocation',
   extends: BaseTable,
   components: { TableLayout1, Pagination, Tree, OperaCategoryWindow },
   data () {
diff --git a/admin/src/views/business/categoryDcaProblem.vue b/admin/src/views/business/categoryDcaProblem.vue
index 14937da..fb32829 100644
--- a/admin/src/views/business/categoryDcaProblem.vue
+++ b/admin/src/views/business/categoryDcaProblem.vue
@@ -25,9 +25,11 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
+        <li> <el-button type="primary" :loading="isWorking.export"  icon="el-icon-download"  @click="exportDcaExcel">瀵煎嚭鍏ㄩ儴</el-button></li>
         <li><el-button type="primary"
                        @click="$refs.operaCategoryWindow.open('鏂板缓DCA涓婚鍜岃瀵熼」', null,categoryList ,4,searchForm.parentId)" icon="el-icon-plus"
                        v-permissions="['business:category:create']">鏂板缓</el-button></li>
+        <li> <el-button type="primary" :loading="importing"  icon="el-icon-plus" @click="$refs.OperaCategoryImportWindow.open('鎵归噺瀵煎叆涓婚瑙傚療椤�')">鍏ㄩ噺瀵煎叆</el-button></li>
         <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">鎵归噺鍒犻櫎</el-button></li>
       </ul>
       <el-table  :height="tableHeightNew" v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
@@ -54,6 +56,7 @@
       <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
       </pagination>
       <OperaCategoryDcaProblemWindow ref="operaCategoryWindow" @success="handlePageChangeDo"/>
+      <OperaCategoryImportWindow ref="OperaCategoryImportWindow" @success="handlePageChangeDo" />
     </template>
   </TableLayout1>
 </template>
@@ -65,14 +68,16 @@
 import Pagination from '@/components/common/Pagination'
 import Tree from '@/components/common/Tree'
 import { treeList } from '@/api/business/category'
+import OperaCategoryImportWindow from '@/components/business/OperaCategoryImportWindow'
 export default {
-  name: 'categorySheType',
+  name: 'categoryDcaProblem',
   extends: BaseTable,
-  components: { TableLayout1, Pagination, Tree, OperaCategoryDcaProblemWindow },
+  components: { TableLayout1, Pagination, Tree, OperaCategoryDcaProblemWindow ,OperaCategoryImportWindow},
   data () {
     return {
       TreeList: [],
       level: 0,
+      importing: false,
       // 鎼滅储
       searchForm: {
         name: '',
@@ -100,6 +105,24 @@
     this.getfindTreePage()
   },
   methods: {
+    exportDcaExcel () {
+      this.__checkApi()
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.isWorking.export = true
+          this.api.exportDcaExcel({})
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking.export = false
+            })
+        })
+        .catch(() => {})
+    },
     handlePageChangeDo () {
       this.searchForm.isRoot = 1
       this.searchForm.level = 1
@@ -163,7 +186,7 @@
       this.searchForm.parentId = row.id
       this.searchForm.isRoot = null
       this.searchForm.parentIdPath = row.idPath
-      this.level= row.level
+      this.level = row.level
       if (row.level === 2) {
         this.searchForm.type = 6
       } else {
diff --git a/admin/src/views/business/categorySheLocaltion.vue b/admin/src/views/business/categorySheLocaltion.vue
index c305190..e022196 100644
--- a/admin/src/views/business/categorySheLocaltion.vue
+++ b/admin/src/views/business/categorySheLocaltion.vue
@@ -59,7 +59,7 @@
 import Tree from '@/components/common/Tree'
 import { treeList } from '@/api/business/category'
 export default {
-  name: 'categorySheType',
+  name: 'categorySheLocation',
   extends: BaseTable,
   components: { TableLayout1, Pagination, Tree, OperaCategoryWindow },
   data () {
diff --git a/admin/src/views/business/company.vue b/admin/src/views/business/company.vue
index 0cef1ce..8eeacd2 100644
--- a/admin/src/views/business/company.vue
+++ b/admin/src/views/business/company.vue
@@ -4,9 +4,16 @@
       <ul class="toolbar" v-permissions="['business:company:create', 'business:company:sync']">
         <li><el-button type="primary" v-permissions="['business:company:create']" :loading="loading"  @click="synchronous()">鍏ㄩ噺鍚屾浼佷笟寰俊缁勭粐</el-button></li>
       </ul>
-      <el-table :height="tableHeightNew" v-loading="isWorking.search" :data="list" stripe
-                :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }" row-key="id"
-                @selection-change="handleSelectionChange" default-expand-all>
+      <el-table :height="tableHeightNew"
+                v-loading="isWorking.search"
+                :data="list"
+                stripe
+                lazy
+                :load="loadData"
+                :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }"
+                row-key="id"
+                @selection-change="handleSelectionChange"
+                :default-expand-all="false">
         <el-table-column prop="name" label="缁勭粐鍚嶇О" min-width="100px"></el-table-column>
         <el-table-column prop="namePath" label="缁勭粐璺緞" min-width="100px"></el-table-column>
         <el-table-column prop="qwId" label="浼佷笟寰俊鏍囪瘑" min-width="100px"></el-table-column>
@@ -21,7 +28,7 @@
 <script>
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
-import { companySync } from '@/api/business/company'
+import {allList, companySync} from '@/api/business/company'
 export default {
   name: 'internalCompany',
   extends: BaseTable,
@@ -48,11 +55,12 @@
   },
   methods: {
     // 椤电爜鍙樻洿澶勭悊
-    handlePageChange (pageIndex) {
+    handlePageChange (pid) {
       this.__checkApi()
       this.isWorking.search = true
-      this.api.treeList({})
+      this.api.allList({parentId:pid})
         .then(data => {
+          console.log(data)
           this.list = data
         })
         .catch(e => {
@@ -62,6 +70,20 @@
           this.isWorking.search = false
         })
     },
+    // 鑾峰彇瀛愮骇鏁版嵁
+    loadData (row, treeNode, resolve) {
+      console.log(row, treeNode)
+      this.api.allList({parentId: row.id})
+          .then(data => {
+            resolve(data)
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking.search = false
+          })
+    },
     // 鍚屾淇℃伅
     async synchronous () {
       this.$dialog.actionConfirm(' 鎮ㄧ‘璁ゅ悓姝ュ叏閮ㄤ俊鎭悧锛�', '鎿嶄綔纭鎻愰啋')
diff --git a/admin/src/views/business/companyMember.vue b/admin/src/views/business/companyMember.vue
index 1280bff..d885ac0 100644
--- a/admin/src/views/business/companyMember.vue
+++ b/admin/src/views/business/companyMember.vue
@@ -17,7 +17,8 @@
         style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">
         浼佷笟缁勭粐</div>
       <div style="width: 100%; height: calc(100vh - 130px); overflow-y: scroll;">
-        <Tree :list="companyTree" :alllist="companyTree" :defaultProps="{ name: 'name', status: 'fsStatus', children: 'childList', id: 'id' }"
+       <Tree :list="companyTree" :alllist="companyTree"
+              :defaultProps="{ name: 'name', status: 'fsStatus', children: 'childList', id: 'id' }"
           @callback="callback" />
       </div>
     </template>
@@ -75,17 +76,18 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout1 from '@/layouts/TableLayout1'
 import Pagination from '@/components/common/Pagination'
-import Tree from '@/components/common/Tree'
+import Tree from '@/components/common/TreeNew'
 import OperaMemberWindow from '@/components/business/OperaMemberWindow'
-import { treeList } from '@/api/business/company'
+import { allList,treeList } from '@/api/business/company'
 import { memberSync} from '@/api/business/member'
 export default {
   name: 'internalMember',
   extends: BaseTable,
-  components: { TableLayout1, Pagination, Tree,OperaMemberWindow },
+  components: { TableLayout1, Pagination, Tree, OperaMemberWindow },
   data() {
     return {
       TreeList: [],
+      defaultExpanedKeys:null,
       // 鎼滅储
       searchForm: {
         name: '' ,
@@ -96,6 +98,7 @@
       loading: false,
       heading: false,
       working: false,
+      dataList: [],
       companyTree: [],
       department: []
     }
@@ -113,15 +116,26 @@
   methods: {
     // 鑾峰彇缁勭粐鏍�
     getfindCompanyTreePage() {
-      treeList({})
+      allList({})
         .then(res => {
+          console.log(res)
           if (res && res.length > 0) {
             res[0].fsStatus = 1
+            this.getCompanyList(res[0])
             this.companyTree = res
             this.search()
-            this.department = this.getDepartmentTree(res)
+            // this.department = this.getDepartmentTree(res)
           }
         })
+    },
+    getCompanyList(row){
+      allList({parentId:row.id})
+          .then(res => {
+            console.log(res)
+            if (res && res.length > 0) {
+              row.childList = res
+            }
+          })
     },
     getDepartmentTree(tree) {
       if (tree == null) {
@@ -153,7 +167,7 @@
           this.loading = true
           memberSync({})
             .then(res => {
-              this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
+              this.$tip.apiSuccess(  '鍚屾鎴愬姛')
               this.search()
             })
             .catch(e => {
@@ -170,6 +184,9 @@
       this.searchForm.erpOrgId = row.erpId
       this.searchForm.companyId = row.id
       this.search()
+      if(row.hasChildren && (row.childList == null || row.childList.length == 0)){
+        this.getCompanyList(row)
+      }
     }
   }
 }
diff --git a/admin/src/views/business/managersShe.vue b/admin/src/views/business/managersShe.vue
index 52171b8..d36d96a 100644
--- a/admin/src/views/business/managersShe.vue
+++ b/admin/src/views/business/managersShe.vue
@@ -16,7 +16,7 @@
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:managers:create', 'business:managers:delete']">
         <li><el-button type="primary" @click="$refs.operaManagersWindow.open('鏂板缓SHE璐d换浜�',{type:0})" icon="el-icon-plus" v-permissions="['business:managers:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:managers:delete']">鍒犻櫎</el-button></li>
+        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:managers:delete']">鍒犻櫎</el-button></li>
       </ul>
       <el-table
           :height="tableHeightNew"
@@ -27,8 +27,8 @@
       >
         <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column prop="memberName" label="浜哄憳濮撳悕" min-width="100px"></el-table-column>
-        <el-table-column prop="memberPhone" label="浜哄憳鎵嬫満鍙�" min-width="100px"></el-table-column>
-        <el-table-column prop="memberEmail" label="浜哄憳閭" min-width="100px"></el-table-column>
+        <el-table-column prop="memberPhone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+        <el-table-column prop="memberEmail" label="浜哄憳閭" min-width="100px">  </el-table-column>
         <el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
         <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
         <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="150px"></el-table-column>
diff --git a/admin/src/views/business/managersSheNotice.vue b/admin/src/views/business/managersSheNotice.vue
index 44b59bd..68e973c 100644
--- a/admin/src/views/business/managersSheNotice.vue
+++ b/admin/src/views/business/managersSheNotice.vue
@@ -16,26 +16,34 @@
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:managers:create', 'business:managers:delete']">
         <li><el-button type="primary" @click="$refs.operaManagersWindow.open('鏂板缓浜嬩欢閫氱煡浜虹鐞�',{type:3})" icon="el-icon-plus" v-permissions="['business:managers:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:managers:delete']">鍒犻櫎</el-button></li>
+        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:managers:delete']">鍒犻櫎</el-button></li>
       </ul>
       <el-table
           :height="tableHeightNew"
         v-loading="isWorking.search"
         :data="tableData.list"
-        stripe
+        strip
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column prop="memberName" label="浜哄憳濮撳悕" min-width="100px"></el-table-column>
         <el-table-column prop="memberPhone" label="浜哄憳鎵嬫満鍙�" min-width="100px"></el-table-column>
-        <el-table-column prop="memberEmail" label="浜哄憳閭" min-width="100px"></el-table-column>
+        <el-table-column prop="memberQwId" label="浼佸井ID" min-width="100px"></el-table-column>
+        <el-table-column prop="memberEmail" label="浜哄憳閭" min-width="100px">
+          <template slot-scope="{row}">
+             <div v-if="row.memberEmail">{{row.memberEmail}}</div>
+             <div v-else style="color: #dc362e;cursor: pointer"  title="鏆傛湭閰嶇疆浜哄憳閭锛岃鍓嶅線銆愪汉鍛樼鐞嗐��-銆愬憳宸ョ鐞嗐�戣彍鍗曠紪杈戣鍛樺伐淇℃伅锛岃缃偖绠变俊鎭�">
+                <el-button type="text" style="color: red"  title="鏆傛湭閰嶇疆浜哄憳閭锛岃鍓嶅線銆愪汉鍛樼鐞嗐��-銆愬憳宸ョ鐞嗐�戣彍鍗曠紪杈戣鍛樺伐淇℃伅锛岃缃偖绠变俊鎭�" icon="el-icon-error" >鏈厤缃�</el-button>
+             </div>
+          </template>
+        </el-table-column>
         <el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
         <el-table-column prop="isQw" label="浼佸井閫氱煡" min-width="80px">
           <template slot-scope="{row}">
             <el-switch v-model="row.isQw"  :active-value="1" :inactive-value="0" @change="updateInfo(row)"/>
           </template>
         </el-table-column>
-        <el-table-column prop="isQw" label="閭欢閫氱煡" min-width="80px">
+        <el-table-column prop="isEmail" label="閭欢閫氱煡" min-width="80px">
           <template slot-scope="{row}">
             <el-switch v-model="row.isEmail" :active-value="1" :inactive-value="0" @change="updateEmailInfo(row)"/>
           </template>
@@ -47,12 +55,9 @@
           v-if="containPermissions(['business:managers:update', 'business:managers:delete'])"
           label="鎿嶄綔"
           min-width="120"
-          fixed="right"
-        >
+          fixed="right" >
           <template slot-scope="{row}">
-<!--
-            <el-button type="text" @click="$refs.operaManagersWindow.open('缂栬緫璐d换浜轰俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:managers:update']">缂栬緫</el-button>
--->
+<!--  <el-button type="text" @click="$refs.operaManagersWindow.open('缂栬緫璐d换浜轰俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:managers:update']">缂栬緫</el-button> -->
             <el-button type="text" style="color: red" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:managers:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
diff --git a/admin/src/views/business/qrcodes.vue b/admin/src/views/business/qrcodes.vue
new file mode 100644
index 0000000..5c0aeeb
--- /dev/null
+++ b/admin/src/views/business/qrcodes.vue
@@ -0,0 +1,124 @@
+<template>
+  <TableLayout >
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']">
+        <li><el-button type="primary" @click="handlePageChange">鍒锋柊</el-button></li>
+      </ul>
+        <el-table
+          v-loading="isWorking.search"
+          :data="tableData.list"
+          stripe
+          @selection-change="handleSelectionChange"
+        >
+        <el-table-column prop="name" label="琛ㄥ崟鍏ュ彛鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="url" label="浜岀淮鐮�" min-width="100px">
+          <template slot-scope="{ row }">
+            <div :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div>
+          </template>
+        </el-table-column>
+          <el-table-column
+              label="鎿嶄綔"
+              min-width="120"  >
+            <template slot-scope="{row}">
+              <el-button type="text" @click="download(row)"  >涓嬭浇</el-button>
+            </template>
+          </el-table-column>
+      </el-table>
+      <canvas id="QRCode_header" ref="canvas" title="鎵弿浜岀淮鐮�"></canvas>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import QRCode from 'qrcodejs2'
+export default {
+  name: 'Category',
+  extends: BaseTable,
+  components: { TableLayout },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        creator: '',
+        createDate: '',
+        editor: '',
+        editDate: '',
+        isdeleted: '',
+        name: '',
+        remark: '',
+        status: '',
+        sortnum: '',
+        imgurl: '',
+        type: '',
+        parentId: null,
+        namePath: '',
+        idPath: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '浜岀淮鐮佺鐞�',
+      api: '/system/dict'
+    })
+    this.handlePageChange()
+  },
+  methods: {
+    handlePageChange () {
+      this.isWorking.search = true
+      var that = this
+      this.api.qrcodeList({})
+        .then(data => {
+          that.tableData.list = data
+          setTimeout(function () {
+            that.tableData.list.forEach(row => {
+              that.$refs['qrcode' + row.id].innerHTML = ''
+              row.qrcodeImg = that.crateQrcodeShow('qrcode' + row.id, row.url)
+            })
+          }, 1000)
+        })
+        .catch(e => {
+          this.$tip.apiFailed(e)
+        })
+        .finally(() => {
+          this.isWorking.search = false
+        })
+    },
+    download (row) {
+      const nodeList = Array.prototype.slice.call(row.qrcodeImg._el.children)
+      const img = nodeList.find((item) => item.nodeName.toUpperCase() === 'IMG')// 閫夊嚭鍥剧墖绫诲瀷
+      // 鏋勫缓鐢诲竷
+      const canvas = document.createElement('canvas')
+      canvas.width = 220
+      canvas.height = 220
+      const ctx = canvas.getContext('2d')
+      ctx.fillStyle = 'white'
+      ctx.fillRect(0, 0, canvas.width, canvas.height) // 濉厖鏁翠釜鐢诲竷鍖哄煙锛岀‘淇濊儗鏅壊瑕嗙洊鏁翠釜鐢诲竷
+      ctx.drawImage(img, 10,10,200,200)
+      // 鏋勯�爑rl
+      const url = canvas.toDataURL('image/png')
+
+      const a = document.createElement('a')
+      a.href = url
+      a.download = `${row.name}-浜岀淮鐮�.png`
+      a.click()
+      a.remove()
+    },
+    crateQrcodeShow (div, qrcode1) {
+      if (qrcode1 == null || qrcode1 == '') {
+        return
+      }
+      return new QRCode(div, {
+        width: 120,
+        height: 120,
+        text: qrcode1
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/business/workorderDbh.vue b/admin/src/views/business/workorderDbh.vue
index 4be20da..2d2e4aa 100644
--- a/admin/src/views/business/workorderDbh.vue
+++ b/admin/src/views/business/workorderDbh.vue
@@ -23,6 +23,18 @@
         <el-form-item label="宸ュ崟鍙�" prop="code">
           <el-input v-model="searchForm.code" clearable placeholder="璇疯緭鍏ュ伐鍗曞彿" @keypress.enter.native="search"></el-input>
         </el-form-item>
+        <el-form-item label="鐘舵�佹弿杩�" prop="status">
+          <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" clearable  @change="search" >
+            <el-option label="寰呭垎閰峎TS" value="0"></el-option>
+<!--
+            <el-option label="寰呭垎閰嶄换鍔�" value="1"></el-option>
+-->
+            <el-option label="寰呭伐绋嬪笀澶勭悊" value="2"></el-option>
+            <el-option label="SHE鍏抽棴" value="3"></el-option>
+            <el-option label="WTS鍏抽棴" value="4"></el-option>
+            <el-option label="宸ョ▼甯堝叧闂�" value="5"></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="鎻愪氦鏃堕棿" prop="queryStartTime">
           <el-date-picker type="datetime" v-model="searchForm.queryStartTime" value-format="yyyy-MM-dd HH:mm:ss"
                           placeholder="璇烽�夋嫨寮�濮嬫椂闂�" @change="changeRadio" />
@@ -64,17 +76,19 @@
         <el-table-column prop="typeName" label="椋庨櫓绫诲瀷" min-width="100px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
-<!--
-            <span :class="'statusInfo'+row.status" v-if="row.status ==0">寰呭鐞�</span>
--->
             <span :class="'statusInfo'+row.status" v-if="row.status ==3 ||row.status ==4||row.status ==5">宸插鐞�</span>
             <span :class="'statusInfo'+row.status" v-else>鏈鐞�</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="statusInfo" label="鐘舵�佹弿杩�" min-width="100px">
+          <template slot-scope="{row}">
+            <span :class="'statusInfo'+row.status" >{{ row.statusName }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="happenTime" label="鍙戠幇鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="locationName" label="鍙戠敓鍦扮偣" min-width="150px"></el-table-column>
-        <el-table-column prop="riskInfo" label="椋庨櫓鎻忚堪" min-width="200px"></el-table-column>
+        <el-table-column prop="riskInfo" label="椋庨櫓鎻忚堪" min-width="250px" show-overflow-tooltip ></el-table-column>
         <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="150px">
           <template slot-scope="{row}">
             <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
@@ -132,6 +146,7 @@
         typeId: null,
         typeIdPath: null,
         code: '',
+        status: null,
         categoryList: []
       },
       categoryprops: {
diff --git a/admin/src/views/business/workorderDca.vue b/admin/src/views/business/workorderDca.vue
index 84a77db..2d4faf3 100644
--- a/admin/src/views/business/workorderDca.vue
+++ b/admin/src/views/business/workorderDca.vue
@@ -64,6 +64,13 @@
           </template>
         </el-table-column>
         <el-table-column prop="locationName" label="浣嶇疆" min-width="150px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <!--                <span :class="'statusInfo'+row.status" v-if="row.status ==0">寰呭鐞�</span>-->
+            <span :class="'statusInfo'+row.status" v-if="row.status ==3 ||row.status ==4||row.status ==5">宸插鐞�</span>
+            <span :class="'statusInfo'+row.status" v-else>澶勭悊涓�</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="happenTime" label="鍙戠幇鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="memberNames" label="閫氱煡浜�" min-width="150px"></el-table-column>
diff --git a/admin/src/views/business/workorderDcaChild.vue b/admin/src/views/business/workorderDcaChild.vue
index 4238c5b..f79c433 100644
--- a/admin/src/views/business/workorderDcaChild.vue
+++ b/admin/src/views/business/workorderDcaChild.vue
@@ -24,10 +24,22 @@
           </el-select>
         </el-form-item>
         <el-form-item label="涓婃姤浜哄憳" prop="memberName">
-          <el-input v-model="searchForm.memberName" style="width: 120px"  clearable placeholder="浜哄憳濮撳悕鎴栨墜鏈哄彿" @keypress.enter.native="search"></el-input>
+          <el-input v-model="searchForm.memberName" style="width: 150px"  clearable placeholder="濮撳悕鎴栨墜鏈哄彿" @keypress.enter.native="search"></el-input>
         </el-form-item>
         <el-form-item label="宸ュ崟鍙�" prop="code">
           <el-input v-model="searchForm.code" style="width: 120px"  clearable placeholder="宸ュ崟鍙�" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="鐘舵�佹弿杩�" prop="status">
+          <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" clearable  @change="search" >
+            <el-option label="寰呭垎閰峎TS" value="0"></el-option>
+<!--
+            <el-option label="寰呭垎閰嶄换鍔�" value="1"></el-option>
+-->
+            <el-option label="寰呭伐绋嬪笀澶勭悊" value="2"></el-option>
+            <el-option label="SHE鍏抽棴" value="3"></el-option>
+            <el-option label="WTS鍏抽棴" value="4"></el-option>
+            <el-option label="宸ョ▼甯堝叧闂�" value="5"></el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="鎻愪氦鏃堕棿" prop="queryStartTime">
           <el-date-picker type="datetime" v-model="searchForm.queryStartTime" value-format="yyyy-MM-dd HH:mm:ss"
@@ -62,7 +74,7 @@
         stripe
         @selection-change="handleSelectionChange"
       >
-        <el-table-column prop="code"  label="宸ュ崟鍙�" min-width="150px" fixed>
+        <el-table-column prop="code"  label="宸ュ崟鍙�" min-width="160px" fixed>
           <template slot-scope="{row}">
             <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('DCA浜嬩欢宸ュ崟璇︽儏', row)" >{{ row.code || '-'}}</span>
           </template>
@@ -71,9 +83,6 @@
           <template slot-scope="{row}"> {{row.typeName}}/{{row.categoryName}}
           </template>
         </el-table-column>
-<!--
-        <el-table-column prop="categoryName" label="浜岀骇涓婚" min-width="100px"></el-table-column>
--->
         <el-table-column prop="problemTitle" label="涓嶇鍚堥」" min-width="250px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
@@ -82,9 +91,15 @@
             <span :class="'statusInfo'+row.status" v-else>澶勭悊涓�</span>
           </template>
         </el-table-column>
+        <el-table-column prop="statusInfo" label="鐘舵�佹弿杩�" min-width="100px">
+          <template slot-scope="{row}">
+            <span :class="'statusInfo'+row.status" >{{ row.statusName}}</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="locationName" label="浣嶇疆" min-width="150px"></el-table-column>
         <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="happenTime" label="鍙戠幇鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="eventInfo" label="涓嶇鍚堝師鍥�" min-width="250px"  show-overflow-tooltip ></el-table-column>
         <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="150px">
           <template slot-scope="{row}">
             <span v-if="row.memberPhone" >{{row.memberName}}/{{row.memberPhone }}</span>
@@ -142,6 +157,7 @@
         categoryId: '',
         typeId: '',
         code: '',
+        status: null,
         categoryList: []
       },
       categoryprops: {
diff --git a/admin/src/views/business/workorderShe.vue b/admin/src/views/business/workorderShe.vue
index 4e073ac..7bee81a 100644
--- a/admin/src/views/business/workorderShe.vue
+++ b/admin/src/views/business/workorderShe.vue
@@ -98,7 +98,7 @@
               <span v-else>鍚�</span>
             </template>
           </el-table-column>
-        <el-table-column prop="eventInfo" label="浜嬩欢璇存槑" min-width="200px"></el-table-column>
+        <el-table-column prop="eventInfo" label="浜嬩欢璇存槑" min-width="200px"  show-overflow-tooltip ></el-table-column>
         <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="150px">
           <template slot-scope="{row}">
             <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index b090fe8..db6abe6 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -34,8 +34,8 @@
 -->
             </div>
             <div class="content">
-              <div>鏈В鍐筹細{{ headerData.dbhYesNum || 0}}</div>
-              <div>宸茶В鍐筹細{{ headerData.dbhNoNum || 0}}</div>
+              <div>鏈В鍐筹細{{ headerData.dbhNoNum || 0}}</div>
+              <div>宸茶В鍐筹細{{ headerData.dbhYesNum || 0}}</div>
                <div>鎬诲伐鍗曢噺锛歿{ headerData.dbhNum || 0}}</div>
             </div>
           </div>
@@ -62,8 +62,8 @@
 <!--              <img src="@/assets/images/bg_a.png" alt="" />-->
             </div>
             <div class="content">
-              <div>鏈В鍐筹細{{ headerData.dcaChildYesNum || 0}}</div>
-              <div>宸茶В鍐筹細{{ headerData.dcaChildNoNum || 0}}</div>
+              <div>鏈В鍐筹細{{ headerData.dcaChildNoNum || 0}}</div>
+              <div>宸茶В鍐筹細{{ headerData.dcaChildYesNum || 0}}</div>
               <div>鎬诲伐鍗曢噺锛歿{ headerData.dcaChildNum || 0}}</div>
             </div>
           </div>
diff --git a/lianhelihua_sh.iml b/lianhelihua_sh.iml
deleted file mode 100644
index 9a5cfce..0000000
--- a/lianhelihua_sh.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="GENERAL_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/server/pom.xml b/server/pom.xml
index f62159e..aad545b 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -15,7 +15,6 @@
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.2.5.RELEASE</version>
   </parent>
-
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -28,15 +27,24 @@
     <apache.shiro.version>1.7.0</apache.shiro.version>
     <oshi.version>5.7.0</oshi.version>
     <jna.version>5.7.0</jna.version>
+    <netty-version>4.1.118.Final</netty-version>
     <poi.version>5.0.0</poi.version>
     <jjwt.version>0.9.1</jjwt.version>
   </properties>
   <dependencyManagement>
     <dependencies>
       <dependency>
-        <groupId>com.azure.spring</groupId>
-        <artifactId>spring-cloud-azure-dependencies</artifactId>
-        <version>4.19.0</version>
+        <groupId>io.netty</groupId>
+        <artifactId>netty-bom</artifactId>
+        <version>${netty-version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>com.azure</groupId>
+        <artifactId>azure-sdk-bom</artifactId>
+        <version>1.2.34</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
@@ -52,6 +60,16 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>io.netty</groupId>
+          <artifactId>netty-bom</artifactId>
+        </exclusion>
+        <exclusion>
+          <artifactId>reactor-core</artifactId>
+          <groupId>io.projectreactor</groupId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <!-- Shiro -->
     <dependency>
@@ -204,14 +222,39 @@
       <artifactId>bcprov-jdk15on</artifactId>
       <version>1.60</version>
     </dependency>
- <!--   <dependency>
-      <groupId>com.azure.spring</groupId>
-      <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
-    </dependency>-->
     <dependency>
       <groupId>com.azure</groupId>
       <artifactId>azure-storage-blob</artifactId>
-      <version>12.14.1</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>reactor-core</artifactId>
+          <groupId>io.projectreactor</groupId>
+        </exclusion>
+      </exclusions>
+      <!--  <exclusions>
+          <exclusion>
+            <artifactId>reactor-core</artifactId>
+            <groupId>io.projectreactor</groupId>
+          </exclusion>
+        </exclusions>-->
+    </dependency>
+    <dependency>
+      <groupId>com.azure</groupId>
+      <artifactId>azure-security-keyvault-secrets</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.azure</groupId>
+      <artifactId>azure-identity</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.azure</groupId>
+      <artifactId>azure-storage-common</artifactId>
+    </dependency>
+    <!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-core -->
+    <dependency>
+      <groupId>io.projectreactor</groupId>
+      <artifactId>reactor-core</artifactId>
+      <version>3.4.41</version>
     </dependency>
   </dependencies>
 
diff --git a/server/src/main/java/com/doumee/api/business/CategoryController.java b/server/src/main/java/com/doumee/api/business/CategoryController.java
index 1a46aa7..43b93f4 100644
--- a/server/src/main/java/com/doumee/api/business/CategoryController.java
+++ b/server/src/main/java/com/doumee/api/business/CategoryController.java
@@ -9,14 +9,17 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.vo.CategoryDcaProblemDto;
 import com.doumee.service.business.CategoryService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import io.swagger.annotations.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 
+import java.io.File;
 import java.util.List;
 
 /**
@@ -95,6 +98,13 @@
     public void exportExcel (@RequestBody PageWrap<Category> pageWrap, HttpServletResponse response) {
         ExcelExporter.build(Category.class).export(categoryService.findPage(pageWrap).getRecords(), "鍒嗙被淇℃伅琛�", response);
     }
+    @ApiOperation("瀵煎嚭DCAExcel")
+    @PostMapping("/exportDcaExcel")
+    @EncryptionReq
+    @RequiresPermissions("business:category:exportExcel")
+    public void exportDcaExcel (@RequestBody Category  pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CategoryDcaProblemDto.class).export(categoryService.findListForDca(pageWrap), "DCA浜嬩欢涓婚鍜岃瀵熼」閰嶇疆_"+System.currentTimeMillis(), response);
+    }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
@@ -114,5 +124,13 @@
     public ApiResponse<List<Category>> tree (@RequestBody Category param){
         return ApiResponse.success(categoryService.treeList(param));
     }
-
+    @ApiOperation(value = "DCA涓婚鍜岃瀵熼」淇℃伅瀵煎叆" ,notes = "淇濆崟鐢宠")
+    @PostMapping("/importDcaExcel")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    @RequiresPermissions("business:member:create")
+    public ApiResponse<String> imporimportDcaExceltExcel (@ApiParam(value = "file") MultipartFile file   ) {
+        return ApiResponse.success(categoryService.importDcaBatch(file));
+    }
 }
diff --git a/server/src/main/java/com/doumee/api/business/CompanyController.java b/server/src/main/java/com/doumee/api/business/CompanyController.java
index c1a27d5..f9e1292 100644
--- a/server/src/main/java/com/doumee/api/business/CompanyController.java
+++ b/server/src/main/java/com/doumee/api/business/CompanyController.java
@@ -58,6 +58,22 @@
     public ApiResponse<List<Company>> tree (@RequestBody Company company){
         return ApiResponse.success(companyService.companyTree());
     }
+    @ApiOperation("鏍规嵁鐖剁骇鏌ヨ闆嗗悎")
+    @PostMapping("/list")
+    @EncryptionResp
+    @EncryptionReq
+    @RequiresPermissions("business:company:query")
+    public ApiResponse<List<Company>> list (@RequestBody Company company){
+        return ApiResponse.success(companyService.findList(company));
+    }
+    @ApiOperation("缁勭粐鏍戞煡璇�")
+    @PostMapping("/treeWithMember")
+    @EncryptionResp
+    @EncryptionReq
+    @RequiresPermissions("business:company:query")
+    public ApiResponse<List<Company>> treeWithMember (@RequestBody Company company){
+        return ApiResponse.success(companyService.companyTreeWithMember ());
+    }
 
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
diff --git a/server/src/main/java/com/doumee/api/common/PublicCloudController.java b/server/src/main/java/com/doumee/api/common/PublicCloudController.java
index f288004..2f51442 100644
--- a/server/src/main/java/com/doumee/api/common/PublicCloudController.java
+++ b/server/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -10,9 +10,13 @@
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.ApiResponse;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.FtpUtil;
 import com.doumee.core.utils.azure.AzureBlobUtil;
+import com.doumee.core.utils.qiyeweixin.QywxUtil;
+import com.doumee.core.utils.qiyeweixin.model.response.QywxUploadMediaResponse;
+import com.doumee.dao.business.dto.WebQwUploadDto;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.service.common.EmailService;
 import io.swagger.annotations.Api;
@@ -24,6 +28,7 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.MultipartRequest;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
 import javax.servlet.http.HttpServletRequest;
@@ -48,13 +53,79 @@
     private SystemDictDataBiz systemDictDataBiz;
     @Autowired
     private EmailService emailService;
-    @Value("${upload.type")
+    @Value("${upload.type}")
     private String  uploadType;
 
 
     public static FtpUtil ftp  = null;
     public static AzureBlobUtil azureBlobUtil  = null;
+    @GetMapping("/image/{folder}/{date}/{name}")
+    public void getImage(@PathVariable String folder,@PathVariable String date,@PathVariable String name, HttpServletResponse response) throws IOException {
+       try {
+           initUploadTool();
+           response.setContentType("image/jpeg"); // 鏍规嵁浣犵殑鍥剧墖绫诲瀷璁剧疆姝g‘鐨凪IME绫诲瀷
+           log.info("===================鍥剧墖blob鍚嶇О"+folder+"/"+date+"/"+name);
+           azureBlobUtil.downloadBlobToStream(folder+"/"+date+"/"+name,response.getOutputStream());
+       }catch (Exception e) {
+           e.printStackTrace();
+       }
+    }
+    @ApiOperation(value = "娴嬭瘯浼佷笟绱犳潗涓婁紶涓嬭浇")
+    @RequestMapping(method= RequestMethod.POST,value="/testQwImg")
+    @ResponseBody
+    public ApiResponse<Map<String, Object>> testQwImg(  @RequestParam(required = false) String imgurl ) throws Exception {
+        QywxUploadMediaResponse r = QywxUtil.uploadMedia(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),"image",imgurl);
+        if(r!=null && r.getMedia_id()!=null){
+            String  folder = systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
+            String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
+            Map<String, Object> context = new HashMap<>();
+            try {
+                initUploadTool();
+                context.put("success", true);
+                context.put("code", 200);
+                context.put("errno",0);
+                JSONArray jsonArray = new JSONArray();
+                Integer index = Constants.ONE;
+                    //鑾峰緱姣忎竴涓枃浠�
+                    String endType = ".jpg";
+                    String originname = UUID.randomUUID().toString()+endType;
+                    InputStream is = QywxUtil.getMediaInputstream(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),r.getMedia_id());
+                    if(is == null){
+                        context.put("code", 0);
+                        context.put("message", "涓婁紶澶辫触");
+                        context.put("errno",0);
+                    }else{
+                        String date = DateUtil.getNowShortDate();
+                        String fName = date + "/" + originname;
+                        String fileName = folder + fName;
+                        boolean r1 =false;
+                        if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
+                            r1 = azureBlobUtil.uploadFileWithResponseAndSize( fileName,is,null);//涓婁紶
+                        }else{
+                            r1 = ftp.uploadInputstreamBatch(is, fileName, true,index);
+                        }
+                        if (r1) {
+                            JSONObject fileJSON = new JSONObject();
+                            fileJSON.put("url", prefixPath + fileName);
+                            fileJSON.put("imgaddr", fName);
+                            fileJSON.put("imgname", fileName);
+                            fileJSON.put("originname", originname);
+                            jsonArray.add(fileJSON);
+                        }
+                    }
+                context.put("data",jsonArray);
+            } catch (Exception e) {
+                log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
+                context.put("code", 0);
+                context.put("message", "涓婁紶澶辫触");
+                context.put("errno",0);
 
+            }
+            return ApiResponse.success(context);
+        }
+        return ApiResponse.failed("涓婁紶澶辫触"+r!=null?JSONObject.toJSONString(r):"");
+
+    }
     @ApiOperation(value = "娴嬭瘯閭欢鍙戦��")
     @RequestMapping(method= RequestMethod.POST,value="/testEmail")
     @ResponseBody
@@ -73,9 +144,18 @@
     @ApiOperation(value = "鎵归噺涓婁紶鏂囦欢鍒癋TP")
     @RequestMapping(method= RequestMethod.POST,value="/uploadBatch")
     @ResponseBody
-    public void uploadBatch(@RequestParam("files") MultipartFile[] fileList,HttpServletRequest request, HttpServletResponse response, String folder) throws Exception {
+    public void uploadBatch(MultipartRequest request, HttpServletResponse response, String folder) throws Exception {
         if(Objects.isNull(folder)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Set<String> setList = request.getMultiFileMap().keySet();
+        if(Objects.isNull(setList)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        List<MultipartFile>  fileList = new ArrayList<>();
+        for(String str:setList){
+            List<MultipartFile> fl = request.getMultiFileMap().get(str);
+            fileList.addAll(fl);
         }
         if(Objects.isNull(fileList)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -94,13 +174,14 @@
             context.put("success", true);
             context.put("code", 200);
             context.put("errno",0);
-               JSONArray jsonArray = new JSONArray();
-            if (fileList.length > 0) {
+            JSONArray jsonArray = new JSONArray();
+            if (fileList.size() > 0) {
                 //閬嶅巻鏂囦欢鍒楄〃
                 Integer index = Constants.ONE;
                 for (MultipartFile file :fileList) {
                     //鑾峰緱姣忎竴涓枃浠�
                     String originname = file.getOriginalFilename();
+                    log.error("銆愪笂浼燜TP鎴愬姛銆�=============寮�濮�========="+index+"===="+originname);
                     InputStream is = file.getInputStream();
                     String endType = originname.substring(originname.lastIndexOf("."), originname.length());
                     String date = DateUtil.getNowShortDate();
@@ -108,9 +189,9 @@
                     String fileName = folder + fName;
                     boolean r =false;
                     if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
-                        r = azureBlobUtil.uploadFileWithResponse( fileName,is);//涓婁紶
+                        r = azureBlobUtil.uploadFileWithResponseAndSize( fileName,is,null);//涓婁紶
                     }else{
-                        r = ftp.uploadInputstreamBatch(is, fileName, Constants.equalsInteger(index ,fileList.length),index);
+                        r = ftp.uploadInputstreamBatch(is, fileName, Constants.equalsInteger(index ,fileList.size()),index);
                     }
                     if (r) {
                         JSONObject fileJSON = new JSONObject();
@@ -120,6 +201,7 @@
                         fileJSON.put("originname", originname);
                         jsonArray.add(fileJSON);
                     }
+                    log.error("銆愪笂浼燜TP鎴愬姛銆�=============缁撴潫========="+index+"====="+r+"===="+fName);
                     index = index + 1;
                 }
                 context.put("data",jsonArray);
@@ -136,6 +218,72 @@
         writerJson(response, context);
         return;
     }
+    @ApiOperation(value = "鎵归噺浠庝紒涓氫复鏃剁礌鏉愬簱涓婁紶鏂囦欢鍒版枃浠舵湇鍔″櫒")
+    @PostMapping(value="/uploadBatchFromWx")
+    @ResponseBody
+    public void uploadBatchFromWx(@RequestBody WebQwUploadDto param, HttpServletResponse response) throws Exception {
+        if(Objects.isNull(param.getFolder()) || param.getMediaIds()==null || param.getMediaIds().size()==0){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        SystemDictData folderData =  systemDictDataBiz.queryByCode(Constants.FTP,param.getFolder());
+        if(Objects.isNull(folderData)||StringUtils.isBlank(folderData.getCode())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐩爣鏂囦欢澶归敊璇�");
+        }
+        String  folder = systemDictDataBiz.queryByCode(Constants.FTP,param.getFolder()).getCode();
+        String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("text/html;charset=UTF-8");
+        Map<String, Object> context = new HashMap<>();
+        try {
+            initUploadTool();
+            context.put("success", true);
+            context.put("code", 200);
+            context.put("errno",0);
+                JSONArray jsonArray = new JSONArray();
+                    Integer index = Constants.ONE;
+                    for (String media : param.getMediaIds()) {
+                        //鑾峰緱姣忎竴涓枃浠�
+                        String endType = ".jpg";
+                        String originname = UUID.randomUUID().toString()+endType;
+                        Map<String,Object> map = QywxUtil.getMediaInputstreamMap(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),media);
+                        if(map == null || map.get("data") == null){
+                            log.error("浼佷笟寰俊绱犳潗涓嬭浇澶辫触锛�========="+media);
+                            continue;
+                        }
+                        log.error("浼佷笟寰俊绱犳潗涓嬭浇鎴愬姛锛�========="+media);
+                        String date = DateUtil.getNowShortDate();
+                        String fName = date + "/" + originname;
+                        String fileName = folder + fName;
+                        boolean r =false;
+                        if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
+                            r = azureBlobUtil.uploadFileWithResponseAndSize( fileName, (InputStream) map.get("data"),(Integer)map.get("size"));//涓婁紶
+                        }else{
+                            r = ftp.uploadInputstreamBatch( (InputStream) map.get("data"), fileName, Constants.equalsInteger(index ,param.getMediaIds().size()),index);
+                        }
+                        if (r) {
+                            JSONObject fileJSON = new JSONObject();
+                            fileJSON.put("url", prefixPath + fileName);
+                            fileJSON.put("imgaddr", fName);
+                            fileJSON.put("imgname", fileName);
+                            fileJSON.put("originname", originname);
+                            jsonArray.add(fileJSON);
+                        }
+                        index = index + 1;
+                }
+                context.put("data",jsonArray);
+        } catch (Exception e) {
+            log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
+            context.put("code", 0);
+            context.put("message", "涓婁紶澶辫触");
+            context.put("errno",0);
+            writerJson(response, context);
+            return;
+
+        }
+        writerJson(response, context);
+        return;
+    }
+
     @ApiOperation(value = "鎵归噺涓婁紶鏂囦欢鍒癋TP")
     @RequestMapping(method= RequestMethod.POST,value="/uploadBatchOld")
     @ResponseBody
@@ -178,7 +326,7 @@
                         String fileName = folder + fName;
                         boolean r =false;
                         if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
-                            r = azureBlobUtil.uploadFileWithResponse( fileName,is);//涓婁紶
+                            r = azureBlobUtil.uploadFileWithResponseAndSize( fileName,is,null);//涓婁紶
                         }else{
                             r = ftp.uploadInputstreamBatch(is, fileName, Constants.equalsInteger(index ,fileList.size()),index);
                         }
@@ -211,10 +359,13 @@
     private void initUploadTool() throws Exception{
         if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
             if(azureBlobUtil == null){
-                azureBlobUtil = new AzureBlobUtil(systemDictDataBiz.queryByCode(Constants.AZURE_BLOB,Constants.AZURE_BLOB_ACCESSNAME).getCode(),
+                azureBlobUtil = new AzureBlobUtil(
+                        systemDictDataBiz.queryByCode(Constants.AZURE_BLOB,Constants.AZURE_BLOB_ACCESSNAME).getCode(),
                         systemDictDataBiz.queryByCode(Constants.AZURE_BLOB,Constants.AZURE_BLOB_ACCESSKEY).getCode(),
                         systemDictDataBiz.queryByCode(Constants.AZURE_BLOB,Constants.AZURE_BLOB_ENDPOINT).getCode(),
                         systemDictDataBiz.queryByCode(Constants.AZURE_BLOB,Constants.AZURE_BLOB_CONTAINER).getCode());
+            }else{
+                azureBlobUtil.initClient();
             }
         }else{
             if(ftp == null){
@@ -266,7 +417,7 @@
                     String fileName = folder+"/"+fName;
                     boolean r =false;
                     if(StringUtils.equals(Constants.uploadType.blob,uploadType)){
-                        r = azureBlobUtil.uploadFileWithResponse( fileName,is);//涓婁紶
+                        r = azureBlobUtil.uploadFileWithResponseAndSize( fileName,is,null);//涓婁紶
                     }else{
                         r = ftp.uploadInputstream(is,fileName);
                     }
diff --git a/server/src/main/java/com/doumee/api/system/SystemDictController.java b/server/src/main/java/com/doumee/api/system/SystemDictController.java
index 28f93f1..fd4e240 100644
--- a/server/src/main/java/com/doumee/api/system/SystemDictController.java
+++ b/server/src/main/java/com/doumee/api/system/SystemDictController.java
@@ -10,6 +10,7 @@
 import com.doumee.dao.system.dto.QuerySystemDictDTO;
 import com.doumee.dao.system.model.SystemDict;
 import com.doumee.dao.system.vo.SystemDictListVO;
+import com.doumee.dao.system.vo.SystemQrcodeListVO;
 import com.doumee.service.system.SystemDictService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -74,4 +75,10 @@
     public ApiResponse<PageData<SystemDictListVO>> findPage (@RequestBody PageWrap<QuerySystemDictDTO> pageWrap) {
         return ApiResponse.success(systemDictService.findPage(pageWrap));
     }
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/qrcodeList")
+    @RequiresPermissions("system:dict:query")
+    public ApiResponse<List<SystemQrcodeListVO>> qrcodeList (@RequestBody QuerySystemDictDTO  pageWrap) {
+        return ApiResponse.success(systemDictService.qrcodeList(pageWrap));
+    }
 }
diff --git a/server/src/main/java/com/doumee/api/web/WebCategoryController.java b/server/src/main/java/com/doumee/api/web/WebCategoryController.java
index 0c034c0..3880c8b 100644
--- a/server/src/main/java/com/doumee/api/web/WebCategoryController.java
+++ b/server/src/main/java/com/doumee/api/web/WebCategoryController.java
@@ -87,4 +87,12 @@
             return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
         }
     }
+
+
+//    @GetMapping("/dealjson")
+//    @ApiOperation("dealjson")
+//    public ApiResponse dealjson(){
+//        categoryService.dealjson();
+//        return ApiResponse.success(null);
+//    }
 }
diff --git a/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java b/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
index 06ad2fc..b738729 100644
--- a/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
+++ b/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
@@ -4,6 +4,7 @@
 import com.doumee.config.annotation.EncryptionReq;
 import com.doumee.config.annotation.EncryptionResp;
 import com.doumee.config.annotation.LoginRequired;
+import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -56,6 +57,7 @@
     @LoginRequired
     @ApiOperation("椋庨櫓涓婃姤")
     @PostMapping("/create")
+    @PreventRepeat
     @EncryptionReq
     @EncryptionResp
     public ApiResponse create (@RequestBody Workorder workorder, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
@@ -111,6 +113,7 @@
     @LoginRequired
     @ApiOperation("宸ュ崟鍏抽棴")
     @PostMapping("/closeWorkOrder")
+    @PreventRepeat
     @EncryptionReq
     @EncryptionResp
     public ApiResponse closeWorkOrder(@RequestBody CloseDTO closeDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
@@ -132,6 +135,7 @@
     @LoginRequired
     @ApiOperation("宸ュ崟鎸囨淳")
     @PostMapping("/passOn")
+    @PreventRepeat
     @EncryptionReq
     @EncryptionResp
     public ApiResponse passOn(@RequestBody PassOnDTO passOnDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
@@ -152,6 +156,7 @@
     @LoginRequired
     @ApiOperation("宸ュ崟鍌績")
     @GetMapping("/urge")
+    @PreventRepeat
     @EncryptionReq
     @EncryptionResp
     public ApiResponse urge(@RequestParam Integer workorderId, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
@@ -169,6 +174,7 @@
 
     @LoginRequired
     @ApiOperation("宸ュ崟鎶勯��")
+    @PreventRepeat
     @PostMapping("/sendCopy")
     @EncryptionReq
     @EncryptionResp
diff --git a/server/src/main/java/com/doumee/biz/system/impl/SystemJobTriggerBizImpl.java b/server/src/main/java/com/doumee/biz/system/impl/SystemJobTriggerBizImpl.java
index 6a4f965..e8bd12c 100644
--- a/server/src/main/java/com/doumee/biz/system/impl/SystemJobTriggerBizImpl.java
+++ b/server/src/main/java/com/doumee/biz/system/impl/SystemJobTriggerBizImpl.java
@@ -11,6 +11,7 @@
 import com.doumee.core.job.JobContext;
 import com.doumee.core.job.JobParam;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.system.SystemJobLogMapper;
 import com.doumee.dao.system.SystemJobMapper;
 import com.doumee.dao.system.SystemJobSnippetMapper;
 import com.doumee.dao.system.model.SystemJob;
@@ -32,7 +33,7 @@
 public class SystemJobTriggerBizImpl implements SystemJobTriggerBiz {
 
     @Autowired
-    private SystemJobLogService systemJobLogService;
+    private SystemJobLogMapper systemJobLogMapper;
 
     @Autowired
     private SystemJobMapper systemJobMapper;
@@ -75,7 +76,7 @@
                 systemJobLog.setStatus(Constants.Job.LogStatus.NONE.getCode());
                 systemJobLog.setTriggerType(dto.getTriggerType());
                 systemJobLog.setRemark("浠诲姟姝e湪鎵ц涓�");
-                systemJobLogService.create(systemJobLog);
+                systemJobLogMapper.insert(systemJobLog);
             }
             // 浠诲姟鍔犻攣锛岄槻姝㈠鏈嶅姟鍣ㄩ噸澶嶆墽琛�
             this.lock(job);
@@ -132,7 +133,7 @@
             if (job != null && job.getWithLog() && systemJobLog.getId() != null) {
                 systemJobLog.setRunTimeEnd(new Date());
                 systemJobLog.setRunSpendTime(Integer.valueOf("" + (systemJobLog.getRunTimeEnd().getTime() - systemJobLog.getRunTimeStart().getTime())));
-                systemJobLogService.updateById(systemJobLog);
+                systemJobLogMapper.updateById(systemJobLog);
             }
             // 浠诲姟瑙i攣
             if (locked) {
@@ -205,6 +206,7 @@
         snippet.setDistributeLimit(job.getDistributeLimit());
         snippet.setHandler(job.getHandler());
         snippet.setSnippetIndex(0);
+        snippet.setCreateTime(new Date());
         snippet.setSnippetCode(UUID.randomUUID().toString());
         snippet.setWithLog(job.getWithLog());
         snippet.setAllowServerIps(job.getAllowServerIps());
@@ -235,6 +237,7 @@
             snippet.setJobDistributeGroup(distributeGroup);
             snippet.setHandler(job.getHandler());
             snippet.setSnippetIndex(i);
+            snippet.setCreateTime(new Date());
             snippet.setSnippetCode(UUID.randomUUID().toString());
             snippet.setSnippetData(JSON.toJSONString(snippetData));
             snippet.setSnippetDataSize(snippetData.size());
diff --git a/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
index 54212fc..90ead78 100644
--- a/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
+++ b/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -22,8 +22,7 @@
 @Component
 @Slf4j
 public class JwtTokenUtil {
-
-    public static final String HEADER_KEY = "web_token";
+    public static final String HEADER_KEY = "web-token";
 //    @Autowired
 //    private RedisTemplate<String,Object> redisTemplate;
 
diff --git a/server/src/main/java/com/doumee/config/mybatis/DmStdOutImpl.java b/server/src/main/java/com/doumee/config/mybatis/DmStdOutImpl.java
index bab3e2e..1f5d305 100644
--- a/server/src/main/java/com/doumee/config/mybatis/DmStdOutImpl.java
+++ b/server/src/main/java/com/doumee/config/mybatis/DmStdOutImpl.java
@@ -5,9 +5,22 @@
 
 @Slf4j
 public class DmStdOutImpl extends StdOutImpl {
+    private Boolean isOff = false;
+
+    public Boolean isOff() {
+        return isOff;
+    }
+
+    public void setOff(Boolean off) {
+        isOff = off;
+    }
 
     public DmStdOutImpl(String clazz) {
         super(clazz);
+    }
+    public DmStdOutImpl(String clazz,Boolean off) {
+        super(clazz);
+        this.isOff = off;
     }
 
     public boolean isDebugEnabled() {
@@ -30,6 +43,9 @@
     }
 
     public void debug(String s) {
+        if(isOff!=null && isOff()){
+            return;
+        }
         log.info(s);
 //        System.out.println(s);
     }
diff --git a/server/src/main/java/com/doumee/config/mybatis/MyBatisInterceptor.java b/server/src/main/java/com/doumee/config/mybatis/MyBatisInterceptor.java
index ac540c8..99261e0 100644
--- a/server/src/main/java/com/doumee/config/mybatis/MyBatisInterceptor.java
+++ b/server/src/main/java/com/doumee/config/mybatis/MyBatisInterceptor.java
@@ -4,6 +4,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.binding.MapperMethod;
 import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.SqlCommandType;
 import org.apache.ibatis.plugin.*;
@@ -11,7 +12,9 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.ReflectionUtils;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.*;
 
 /**
@@ -41,6 +44,7 @@
         MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
         SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
         Object target = invocation.getArgs()[1];
+
         if(target instanceof MapperMethod.ParamMap) {
             try {
                 target = ((MapperMethod.ParamMap) target).get("param1");
@@ -91,20 +95,29 @@
     /**
      * 缁欏睘鎬ц祴鍊�
      */
-    private void setFieldValue(Field field, Object target, Object value) throws Exception {
+    private void setFieldValue(Field field, Object target, Object value)   {
+        try {
         field.setAccessible(true);
         field.set(target, value);
         field.setAccessible(false);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     /**
      * 鑾峰彇灞炴�у��
      */
-    private Object getFieldValue(Field field, Object target) throws Exception {
-        field.setAccessible(true);
-        Object value = field.get(target);
-        field.setAccessible(false);
-        return value;
+    private Object getFieldValue(Field field, Object target)  {
+        try {
+            field.setAccessible(true);
+            Object value = field.get(target);
+            field.setAccessible(false);
+            return value;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+      return  null;
     }
 
     /**
@@ -112,7 +125,7 @@
      */
     private LoginUserInfo getLoginUser () {
         try {
-                return (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+              return (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         }catch (Exception e){
 
         }
diff --git a/server/src/main/java/com/doumee/config/quartz/JobInitializer.java b/server/src/main/java/com/doumee/config/quartz/JobInitializer.java
index 0e3e870..ac44eb8 100644
--- a/server/src/main/java/com/doumee/config/quartz/JobInitializer.java
+++ b/server/src/main/java/com/doumee/config/quartz/JobInitializer.java
@@ -1,5 +1,6 @@
 package com.doumee.config.quartz;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.job.SchedulerProxy;
@@ -41,6 +42,7 @@
      */
     @PostConstruct
     public void initJobs () {
+
         log.debug("Initializing jobs");
         // 淇JOB
         this.repairJobs();
@@ -52,10 +54,15 @@
         queryJobDto.setDeleted(Boolean.FALSE);
         List<SystemJob> jobs = systemJobService.findList(queryJobDto);
         for (SystemJob job : jobs) {
-            schedulerProxy.createJob(new SchedulerProxy.Job(job.getId(), job.getHandler(), job.getCronExpression(), job.getDisallowConcurrent()));
-            log.debug("job '{}' initialized.", job.getJobName());
+            try {
+                schedulerProxy.createJob(new SchedulerProxy.Job(job.getId(), job.getHandler(), job.getCronExpression(), job.getDisallowConcurrent()));
+                log.info("job '{}' initialized.", job.getJobName());
+            }catch (Exception e){
+                e.printStackTrace();
+                log.error("Jobs initialization failed: '{}''{}'  ", JSONObject.toJSONString(job),e.getStackTrace());
+            }
         }
-        log.debug("Jobs initialization completed in {} ms", System.currentTimeMillis() - startTime);
+        log.info("Jobs initialization completed in {} ms", System.currentTimeMillis() - startTime);
     }
 
     /**
diff --git a/server/src/main/java/com/doumee/core/constants/Constants.java b/server/src/main/java/com/doumee/core/constants/Constants.java
index a3daead..db47b51 100644
--- a/server/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/src/main/java/com/doumee/core/constants/Constants.java
@@ -40,6 +40,10 @@
     public static final Integer FOUR = 4;
     public static final Integer SIX = 6;
     public static final Integer FIVE = 5;
+    public static final String QRCODE_URLS = "QRCODE_URLS";
+    public static final String SHE_QRCODES_URL = "SHE_QRCODES_URL";
+    public static final String DCA_QRCODES_URL = "DCA_QRCODES_URL";
+    public static final String DBH_QRCODES_URL = "DBH_QRCODES_URL";
     public static boolean WORKORDER_SHE_EMAIL_SENDING = false;
     public static  boolean DEALING_COMPANY_SYNC = false ;
     public static  boolean DEALING_MEMBER_SYNC = false ;
@@ -57,7 +61,9 @@
      */
     interface CacheKey {
     }
-
+    public interface RedisKeys {
+        public static final String IMPORTING_CATEGORY = "IMPORTING_CATEGORY";
+    }
     /**
      * 鎿嶄綔绫诲瀷锛岀敤浜庡仛鎺ュ彛楠岃瘉鍒嗙粍
      */
@@ -226,31 +232,41 @@
 
 
     public enum WorkOrderStatus{
-        waitConfirm( 0, "寰呭垎閰峎TS","{title}涓婃姤",""),
-        waitAllocation(1, "寰呭垎閰嶄换鍔�","寰呭垎閰嶄换鍔�",""),
-        waitDeal(2, "寰呭鐞�","寰呭鐞�",""),
-        sheClose(3, "宸茶В鍐�","SHE宸插叧闂�",""),
-        wtsClose(4, "宸茶В鍐�","WTS宸插叧闂�",""),
-        close(5, "宸茶В鍐�","宸茶В鍐�",""),
-        urge (6, "鍌績","","")
+        waitConfirm( 0, "寰呭垎閰峎TS","{title}涓婃姤","","寰呭垎閰峎TS" ),
+        waitAllocation(1, "寰呭垎閰嶄换鍔�","寰呭垎閰嶄换鍔�","","寰呭垎閰嶄换鍔�"),
+        waitDeal(2, "寰呭鐞�","寰呭鐞�","","寰呭伐绋嬪笀澶勭悊"),
+        sheClose(3, "宸茶В鍐�","SHE宸插叧闂�","","SHE宸插叧闂�"),
+        wtsClose(4, "宸茶В鍐�","WTS宸插叧闂�","","WTS宸插叧闂�"),
+        close(5, "宸茶В鍐�","宸茶В鍐�","","宸ョ▼甯堝叧闂�"),
+        urge (6, "鍌績","","","")
         ;
 
         private int status;
         private String statusInfo;
+        private String statusName;
         private String logTitle;
         private String noticeContent;
 
         // 鏋勯�犳柟娉�
-        WorkOrderStatus(int status, String statusInfo,String logTitle,String noticeContent ) {
+        WorkOrderStatus(int status, String statusInfo,String logTitle,String noticeContent,String statusName ) {
             this.status = status;
             this.statusInfo = statusInfo;
             this.logTitle = logTitle;
             this.noticeContent = noticeContent;
+            this.statusName = statusName;
         }
         public static String getName(int index) {
             for (WorkOrderStatus c : WorkOrderStatus.values()) {
                 if (c.getKey() == index) {
                     return c.statusInfo;
+                }
+            }
+            return null;
+        }
+        public static String getStatusName(int index) {
+            for (WorkOrderStatus c : WorkOrderStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.statusName;
                 }
             }
             return null;
@@ -264,6 +280,22 @@
             this.status = status;
         }
 
+        public int getStatus() {
+            return status;
+        }
+
+        public void setStatus(int status) {
+            this.status = status;
+        }
+
+        public String getStatusName() {
+            return statusName;
+        }
+
+        public void setStatusName(String statusName) {
+            this.statusName = statusName;
+        }
+
         public String getStatusInfo() {
             return statusInfo;
         }
diff --git a/server/src/main/java/com/doumee/core/utils/FtpUtil.java b/server/src/main/java/com/doumee/core/utils/FtpUtil.java
index 8fbf0b0..72d0cc8 100644
--- a/server/src/main/java/com/doumee/core/utils/FtpUtil.java
+++ b/server/src/main/java/com/doumee/core/utils/FtpUtil.java
@@ -469,7 +469,7 @@
 					if (ftpClient.makeDirectory(subDirectory)) {
 						ftpClient.changeWorkingDirectory(subDirectory);
 					} else {
-						System.out.println("鍒涘缓鐩綍澶辫触");
+						log.error("鍒涘缓鐩綍澶辫触subDirectory=锛�"+subDirectory);
 						return "2";
 						// return UploadStatus.Create_Directory_Fail;
 					}
diff --git a/server/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/src/main/java/com/doumee/core/utils/HttpsUtil.java
index 2692602..06aed69 100644
--- a/server/src/main/java/com/doumee/core/utils/HttpsUtil.java
+++ b/server/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -1,9 +1,9 @@
 package com.doumee.core.utils;
 
+import lombok.extern.slf4j.Slf4j;
+
 import javax.net.ssl.*;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.security.KeyManagementException;
@@ -11,7 +11,11 @@
 import java.security.SecureRandom;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
+@Slf4j
 public class HttpsUtil {
 
     public static String get(String url,boolean ignoreSSL) {
@@ -28,7 +32,80 @@
             return connectionHttp(url, "POST", data, "application/json");
         }
     }
+    public static String uploadTempMedia(String urlString ,String fileUrl){
+        HttpsURLConnection conn= null;
+        try {
+            String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
+            // 鑾峰彇缃戠粶鍥剧墖
+            URL mediaUrl = new URL(fileUrl);
+            HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();
+            meidaConn.setDoOutput(true);
+            meidaConn.setRequestMethod("GET");
 
+            String result = null;
+            URL url=new URL(urlString);
+            conn=(HttpsURLConnection) url.openConnection();
+            conn.setRequestMethod("POST");//浠OST鏂瑰紡鎻愪氦琛ㄥ崟
+            conn.setDoInput(true);
+            conn.setDoOutput(true);
+            conn.setUseCaches(false);//POST鏂瑰紡涓嶈兘浣跨敤缂撳瓨
+            //璁剧疆璇锋眰澶翠俊鎭�
+            conn.setRequestProperty("Connection", "Keep-Alive");
+            conn.setRequestProperty("Charset", "UTF-8");
+            //璁剧疆杈圭晫
+            String BOUNDARY="----------"+System.currentTimeMillis();
+            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
+            //璇锋眰姝f枃淇℃伅
+            //绗竴閮ㄥ垎
+            StringBuilder sb=new StringBuilder();
+            sb.append("--");//蹇呴』澶氫袱鏉¢亾
+            sb.append(BOUNDARY);
+            sb.append("\r\n");
+            sb.append("Content-Disposition: form-data;name=\"media\"; filename=\"" + fileName+"\"\r\n");
+
+            sb.append("Content-Type:application/octet-stream\r\n\r\n");
+            System.out.println("sb:"+sb);
+
+            //鑾峰緱杈撳嚭娴�
+            OutputStream out=new DataOutputStream(conn.getOutputStream());
+            //杈撳嚭琛ㄥご
+            out.write(sb.toString().getBytes("UTF-8"));
+            //鏂囦欢姝f枃閮ㄥ垎
+            //鎶婃枃浠朵互娴佺殑鏂瑰紡 鎺ㄩ�侀亾URL涓�
+            DataInputStream din=new DataInputStream(meidaConn.getInputStream());
+            int bytes=0;
+            byte[] buffer=new byte[1024];
+            while((bytes=din.read(buffer))!=-1){
+                out.write(buffer,0,bytes);
+            }
+            din.close();
+            //缁撳熬閮ㄥ垎
+            byte[] foot=("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");//瀹氫箟鏁版嵁鏈�鍚庡垎鍓茬嚎
+            out.write(foot);
+            out.flush();
+            out.close();
+            if(HttpsURLConnection.HTTP_OK==conn.getResponseCode()){
+                InputStream is = conn.getInputStream();
+                byte[] b = new byte[4096];
+                ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length);
+                int len;
+                while ((len = is.read(b)) != -1) {
+                    baos.write(b, 0, len);
+                }
+                is.close();
+                return baos.toString("utf-8");
+            }
+            return result;
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if(conn != null){
+                conn.disconnect();
+            }
+        }
+        return null;
+
+    }
     public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){
         HttpsURLConnection connection = null;
         try {
@@ -92,29 +169,36 @@
         try {
             URL _url = new URL(url);
             connection = (HttpURLConnection) _url.openConnection();
-            connection.setRequestMethod(method);
+            System.out.println(connection.getContentLength());
             connection.setDoOutput(true);
-            connection.setDoInput(true);
-            connection.setUseCaches(false);
-            if(contentType != null){
-                connection.setRequestProperty("Content-Type", contentType);
-            }
-            connection.connect();
-            if(data != null){
-                OutputStream outputStream = connection.getOutputStream();
-                outputStream.write(data.getBytes("utf-8"));
-                outputStream.close();
-            }
-            int responseCode = connection.getResponseCode();
-            if (responseCode == HttpsURLConnection.HTTP_OK) {
-               return  connection.getInputStream();
-            }
+            connection.setRequestMethod("GET");
+            return connection.getInputStream();
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            if(connection != null){
-                connection.disconnect();
+        }
+        return null;
+    }
+    public static Map<String,Object> connInputsteamReturnMap(String url, String method, String data, String contentType ){
+        HttpURLConnection connection = null;
+        try {
+            Map<String,Object> map = new HashMap<>();
+            URL _url = new URL(url);
+            connection = (HttpURLConnection) _url.openConnection();
+            connection.setDoOutput(true);
+            connection.setRequestMethod("GET");
+            int size =connection.getContentLength();
+            log.error("浼佷笟鍥剧墖涓嬭浇娴佸疄闄呭ぇ灏忥細=========================="+size);
+            InputStream in =connection.getInputStream();
+            if(in == null){
+                log.error("浼佷笟鍥剧墖涓嬭浇娴佸疄闄呮祦涓虹┖锛�==========================");
+                return null;
             }
+            log.error("浼佷笟鍥剧墖涓嬭浇娴佸ぇ灏忥細=========================="+in.available());
+            map.put("data",in);
+            map.put("size",size);
+            return map;
+        } catch (Exception e) {
+            e.printStackTrace();
         }
         return null;
     }
diff --git a/server/src/main/java/com/doumee/core/utils/azure/AzureBlobUtil.java b/server/src/main/java/com/doumee/core/utils/azure/AzureBlobUtil.java
index 4f1c383..566a07e 100644
--- a/server/src/main/java/com/doumee/core/utils/azure/AzureBlobUtil.java
+++ b/server/src/main/java/com/doumee/core/utils/azure/AzureBlobUtil.java
@@ -1,17 +1,29 @@
 package com.doumee.core.utils.azure;
 
+import com.alibaba.fastjson.JSONObject;
 import com.azure.core.http.rest.Response;
-import com.azure.storage.blob.BlobClient;
-import com.azure.storage.blob.BlobContainerClient;
-import com.azure.storage.blob.BlobServiceClient;
-import com.azure.storage.blob.BlobServiceClientBuilder;
-import com.azure.storage.blob.models.BlobRequestConditions;
-import com.azure.storage.blob.models.BlockBlobItem;
+import com.azure.core.http.rest.RestProxy;
+import com.azure.identity.DefaultAzureCredentialBuilder;
+import com.azure.storage.blob.*;
+import com.azure.storage.blob.models.*;
 import com.azure.storage.blob.options.BlobParallelUploadOptions;
+import com.azure.storage.blob.options.BlobUploadFromFileOptions;
+import com.azure.storage.blob.sas.BlobContainerSasPermission;
+import com.azure.storage.blob.specialized.BlobInputStream;
+import com.azure.storage.common.StorageSharedKeyCredential;
+import io.netty.handler.logging.ByteBufFormat;
+import io.netty.handler.logging.LogLevel;
+import reactor.util.context.ContextView;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
+import javax.servlet.ServletOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.nio.file.Path;
+import java.time.OffsetDateTime;
 
 @Data
 @Slf4j
@@ -28,55 +40,155 @@
 
     public AzureBlobUtil(String accountName, String accountKey, String endpoint, String container){
         try {
+
             this.accountKey = accountKey;
             this.accountName = accountName;
             this.endpoint = endpoint;
             this.container = container;
-            this.connectionString = "DefaultEndpointsProtocol=https;AccountName=" + this.accountName + ";AccountKey=" + this.accountKey + ";EndpointSuffix=" + endpoint;
-            this.blobServiceClient = new BlobServiceClientBuilder().connectionString(connectionString).buildClient();
-            this.blobContainerClient = this.blobServiceClient.getBlobContainerClient(this.container);
+//            this.connectionString = "DefaultEndpointsProtocol=https;AccountName=" + this.accountName + ";AccountKey=" + this.accountKey + ";EndpointSuffix=" + endpoint;
+//            this.blobServiceClient = new BlobServiceClientBuilder().connectionString(connectionString).buildClient();
+//            this.blobServiceClient = new BlobServiceClientBuilder()
+//                    .endpoint(endpoint)
+//                    .sasToken(accountKey)
+//                    .buildClient();
+           initClient();
         }catch (Exception e) {
             e.printStackTrace();
+            log.error("鍒濆鍖朆LOB瀹㈡埛绔紓甯�0=========="+e.getMessage());
         }
 
     }
 
     public   void initClient( )   {
+        if(this.blobServiceClient!=null){
+            log.error("鍒濆鍖朆LOB瀹㈡埛绔凡瀹屾垚锛屾棤闇�閲嶅鎺堟潈==========");
+            return;
+        }
         try {
-            this.blobServiceClient = new BlobServiceClientBuilder().connectionString(connectionString).buildClient();
-            this.blobContainerClient = this.blobServiceClient.getBlobContainerClient(this.container);
+            StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
+            // Azure SDK client builders accept the credential as a parameter
+            this.blobServiceClient  = new BlobServiceClientBuilder()
+                    .endpoint(endpoint)
+                    .credential(credential)
+                    .buildClient();
+            this.blobContainerClient = this.blobServiceClient.createBlobContainerIfNotExists(this.container);
+            this.blobContainerClient.setAccessPolicy(PublicAccessType.CONTAINER, null);
+//            this.blobContainerClient = this.blobServiceClient.getBlobContainerClient(this.container);
+//            String endpointString = String.format("https://%s.blob.core.windows.net/%s",
+//                    accountName, container);
+//
+//            this.blobContainerClient = new BlobContainerClientBuilder()
+//                    .endpoint(endpointString)
+//                    .credential(new DefaultAzureCredentialBuilder().build())
+//                    .buildClient();
         }catch (Exception e) {
             e.printStackTrace();
+            log.error("鍒濆鍖朆LOB瀹㈡埛绔紓甯�1=========="+e.getMessage());
         }
     }
-    public   void uploadFile(String fileName, InputStream data)   {
+
+    public void downloadBlobToStream(String  blob, ServletOutputStream outputStream) {
+        BlobClient blobClient =this.getBlobContainerClient().getBlobClient(blob);
+        blobClient.downloadStream(outputStream);
+    }
+    public BlobInputStream readBlobFromStream(String  blob) {
+        BlobClient blobClient =this.getBlobContainerClient().getBlobClient(blob);
+        // Opening a blob input stream allows you to read from a blob through a normal
+        // stream interface
+        try (BlobInputStream blobStream = blobClient.openInputStream()) {
+            blobStream.read();
+            return blobStream ;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return  null;
+    }
+    public BlobInputStream readBlobFromStream(BlobClient blobClient) {
+        // Opening a blob input stream allows you to read from a blob through a normal
+        // stream interface
+        try (BlobInputStream blobStream = blobClient.openInputStream()) {
+            blobStream.read();
+            return blobStream;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    public   boolean upload(String fileName, InputStream data)   {
         try {
             if(getBlobContainerClient() == null){
                 initClient();
             }
             BlobClient client = this.blobContainerClient.getBlobClient(fileName);
             client.upload(data, data.available(), true);
+            return true;
         }catch (Exception e) {
             e.printStackTrace();
         }
+
+        return false;
     }
-    public  boolean uploadFileWithResponse(String fileName, InputStream inputStream)   {
+
+    public void uploadBlockBlobWithTransferOptions(BlobContainerClient blobContainerClient, Path filePath) {
+        String fileName = filePath.getFileName().toString();
+        BlobClient blobClient = blobContainerClient.getBlobClient(fileName);
+
+        ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
+                .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
+                .setMaxConcurrency(2)
+                .setMaxSingleUploadSizeLong((long) 8 * 1024 * 1024); // 8 MiB max size for single request upload
+
+        BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString());
+        options.setParallelTransferOptions(parallelTransferOptions);
+
         try {
+            Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
+        } catch (UncheckedIOException ex) {
+            System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
+        }
+    }
+    /*public  boolean uploadFileWithResponse(String fileName, InputStream inputStream)   {
+        try {
+            log.error("BLOB涓婁紶寮�鍙戯細........"+fileName);
             if(getBlobContainerClient() == null){
+                log.error("BLOB涓婁紶寮�鍙戯細........鍒濆鍖栧鎴风");
                 initClient();
             }
             BlobParallelUploadOptions options = new BlobParallelUploadOptions(inputStream, inputStream.available());
             options.setRequestConditions(new BlobRequestConditions().setIfNoneMatch("*"));
             Response<BlockBlobItem> rsp = this.blobContainerClient.getBlobClient(fileName).uploadWithResponse(options, null, null);
-            if(rsp.getStatusCode()==201)  {
-                log.info("涓婁紶鎴愬姛锛�........"+fileName);
+            if(rsp!=null && rsp.getStatusCode()==201)  {
+                log.info("BLOB涓婁紶鎴愬姛锛�........"+fileName);
+                log.error("BLOB涓婁紶鎴愬姛锛�........"+fileName);
                 return true;
             }
+            log.error("BLOB涓婁紶澶辫触锛�........"+ JSONObject.toJSONString(rsp));
         }catch (Exception e) {
             e.printStackTrace();
-            log.info("涓婁紶澶辫触锛�........"+e.getMessage());
+            log.error("BLOB涓婁紶澶辫触锛�........"+e.getMessage());
+        }
+        return false;
+    }*/
+    public  boolean uploadFileWithResponseAndSize(String fileName, InputStream inputStream,Integer size)   {
+        try {
+            log.error("BLOB涓婁紶寮�鍙戯細........"+fileName+"===============size:"+size);
+            if(getBlobContainerClient() == null){
+                log.error("BLOB涓婁紶寮�鍙戯細........鍒濆鍖栧鎴风");
+                initClient();
+            }
+            BlobParallelUploadOptions options = new BlobParallelUploadOptions(inputStream,(size!=null && size>0)?size: inputStream.available());
+            options.setRequestConditions(new BlobRequestConditions().setIfNoneMatch("*"));
+            Response<BlockBlobItem> rsp = this.blobContainerClient.getBlobClient(fileName).uploadWithResponse(options, null, null);
+            if(rsp!=null && rsp.getStatusCode()==201)  {
+                log.info("BLOB涓婁紶鎴愬姛锛�........"+fileName);
+                log.error("BLOB涓婁紶鎴愬姛锛�........"+fileName);
+                return true;
+            }
+            log.error("BLOB涓婁紶澶辫触锛�........"+ JSONObject.toJSONString(rsp));
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error("BLOB涓婁紶澶辫触锛�........"+e.getMessage());
         }
         return false;
     }
-
 }
\ No newline at end of file
diff --git a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java
index b8ffc47..5fc44ea 100644
--- a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java
+++ b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxConstant.java
@@ -10,7 +10,7 @@
 	public final static String DMSECRET = "mfmGJpvqj1WNPTwo0Cue42uibhUd5W6_iSWpF39XZQ0";//瀹㈢瀹跺簲鐢� SECRET
 	public final static String CORPSECRET = "8gl5ndGr824OHZ90CkZdcIewUKHoyk13XN4hfxBS_io";
 	public final static String ACCESS_TOKEN = "aOpknXCW7KBBwgGAPuacwfhJRcT1PeIg-IroZicxWamj0JayKJ0rKw2sNXGzpQzK8AMDeDrEJC_kTvPPWTgtefDNLtfsdHS7IpXqBV1P8znLG1EmsYPNgvn78dsQd5bBomLl_qPpOob9hUUsSJJKcEmxXldCNEYVBhKmYnQ4yY8WE8i4xp7aLmm-hRql0AzhzaNhUA7nAzNN5BsgSgbXMA";
-	//鑾峰彇accesstoken,corpid=浼佷笟ID,corpsecret=搴旂敤鐨勫嚟璇佸瘑閽�
+	//鑾峰彇accesstoken,corpid=浼佷笟ID,corpsecret=搴旂敤鐨勫嚟璇佸瘑閽� https://wecom-qyapiqa.unilever-china.com/cgi-bin/gettoken?corpid=wwe02e8fd876f8add1&corpsecret=5e0272fabfcfcee79840f1cef24cb364
     public final static String[] GET_ACCESS_TOKEN = new String[]{"/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${secret}","鑾峰彇浼佷笟寰俊accesstoken"};
 	//鑾峰彇閮ㄩ棬淇℃伅,閮ㄩ棬id銆傝幏鍙栨寚瀹氶儴闂ㄥ強鍏朵笅鐨勫瓙閮ㄩ棬锛堜互鍙婂強瀛愰儴闂ㄧ殑瀛愰儴闂ㄧ瓑绛夛紝閫掑綊锛夈�� 濡傛灉涓嶅~锛岄粯璁よ幏鍙栧叏閲忕粍缁囨灦鏋�
     public final static String[]  GET_DEPARTMENT_LIST = new String[]{"/cgi-bin/department/list?access_token=${accesstoken}&id=${id}","鑾峰彇閮ㄩ棬淇℃伅"};
@@ -19,6 +19,8 @@
 	//鑾峰彇閮ㄩ棬鎴愬憳,access_token=璋冪敤鎺ュ彛鍑瘉,department_id=鑾峰彇鐨勯儴闂╥d,fetch_child=	鏄惁閫掑綊鑾峰彇瀛愰儴闂ㄤ笅闈㈢殑鎴愬憳锛�1-閫掑綊鑾峰彇锛�0-鍙幏鍙栨湰閮ㄩ棬
     public final static String[]  GET_DEPARTMENT_SIMPLE_LIST = new String[]{"/cgi-bin/user/simplelist?access_token=${accesstoken}&department_id=${departmentId}","鑾峰彇閮ㄩ棬鎴愬憳"};
     public final static String[]  GET_DEPARTMENT_USER_LIST = new String[]{"/cgi-bin/user/list?access_token=${accesstoken}&department_id=${departmentId}","鑾峰彇閮ㄩ棬鎴愬憳"};
+    public final static String[]  GET_MEDIA = new String[]{"/cgi-bin/media/get?access_token=${accesstoken}&media_id=${media_id}","鑾峰彇涓存椂绱犳潗"};
+    public final static String[]  UPLOAD_TEMP_MEDIA = new String[]{"/cgi-bin/media/upload?access_token=${accesstoken}&type=${type}","涓婁紶涓存椂绱犳潗"};
 	//鑾峰彇鎴愬憳璇︽儏,access_token=璋冪敤鎺ュ彛鍑瘉,userid=鎴愬憳UserID
     public final static String[]  GET_USER_DETAIL =new String[]{ "/cgi-bin/user/get?access_token=${accesstoken}&userid=${id}","鑾峰彇鎴愬憳璇︽儏"};
 	//鍙戦�佸簲鐢ㄦ秷鎭�,access_token=璋冪敤鎺ュ彛鍑瘉  POST璇锋眰锛�
diff --git a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
index 36325d6..c3faaed 100644
--- a/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
+++ b/server/src/main/java/com/doumee/core/utils/qiyeweixin/QywxUtil.java
@@ -6,6 +6,7 @@
 import com.doumee.core.utils.HttpsUtil;
 import com.doumee.core.utils.qiyeweixin.model.request.QywxSendMsgRequest;
 import com.doumee.core.utils.qiyeweixin.model.response.*;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,7 +14,9 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
+import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -21,6 +24,7 @@
 
 @Component
 @Slf4j
+@Data
 public class QywxUtil {
     private static JSONObject json = new JSONObject();
 
@@ -34,6 +38,8 @@
     @PostConstruct
     private void init() {
         qyUtil = this;
+        System.out.println(qyUtil.qiweiUrl);
+        System.out.println(qyUtil.getQiweiUrl());
 //        QywxUtil.qiweiUrl =  serviceurl;
     }
 
@@ -57,7 +63,7 @@
     public static String getAccessToken(String corpId, String corpSecret)  {
         String[] interfaceUrl = QywxConstant.GET_ACCESS_TOKEN;
         String url = interfaceUrl[0].replace("${corpid}",corpId).replace("${secret}",corpSecret);
-        QywxBaseResponse response = sendHttpRequest(url,interfaceUrl[1],"",new TypeReference<QywxBaseResponse<String>>(){});
+        QywxBaseResponse response = sendHttpGetRequest(url,interfaceUrl[1], new TypeReference<QywxBaseResponse<String>>(){});
         if(response.getErrcode()!=null && response.getErrcode() ==0){
             return response.getAccess_token();
         }
@@ -87,7 +93,7 @@
             String[] interfaceUrl = QywxConstant.SEND_MSG;
             String url = interfaceUrl[0].replace("${accesstoken}",token);
             QywxSendMsgResponse response = sendHttpRequestSingle(url,interfaceUrl[1],JSONObject.toJSONString(param)
-                    ,new TypeReference<QywxSendMsgResponse>(){});
+                    ,new TypeReference<QywxSendMsgResponse>(){},true);
             log.error("鎺ㄩ�佹秷鎭粨鏋渰}",JSONObject.toJSONString(response));
             if(response.getErrcode()!=null && response.getErrcode() ==0){
                 return response;
@@ -112,12 +118,57 @@
 
         return null;
     }
+    public static InputStream getMediaInputstream(String token, String media)   {
+        try {
+            String[] interfaceUrl = QywxConstant.GET_MEDIA;
+            String url = qyUtil.qiweiUrl+interfaceUrl[0].replace("${accesstoken}",token).replace("${media_id}",media);
+            log.info("浼佷笟寰俊涓存椂绱犳潗鑾峰彇url=========="+url);
+            return  HttpsUtil.connectionInputsteam(url,"GET",null,null);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("浼佷笟寰俊涓存椂绱犳潗鑾峰彇error=========="+e.getMessage());
+        }
+
+        return null;
+    }
+
+    public static   Map<String,Object> getMediaInputstreamMap(String token, String media)   {
+        try {
+            String[] interfaceUrl = QywxConstant.GET_MEDIA;
+            String url = qyUtil.qiweiUrl+interfaceUrl[0].replace("${accesstoken}",token).replace("${media_id}",media);
+            log.info("浼佷笟寰俊涓存椂绱犳潗鑾峰彇url=========="+url);
+            Map<String,Object> map =  HttpsUtil.connInputsteamReturnMap(url,"GET",null,null);
+            return map;
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("浼佷笟寰俊涓存椂绱犳潗鑾峰彇error=========="+e.getMessage());
+        }
+
+        return null;
+    }
     public static QywxUserInfoResponse getUserInfo(String token,String id)  {
         String[] interfaceUrl = QywxConstant.GET_USER_DETAIL;
         String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${id}",id);
         QywxUserInfoResponse response = sendHttpRequestSingle(url,interfaceUrl[1],""
-                ,new TypeReference<QywxUserInfoResponse>(){});
+                ,new TypeReference<QywxUserInfoResponse>(){},false);
         if(response.getErrcode()!=null && response.getErrcode() ==0){
+            return response;
+        }
+        return null;
+    }
+
+    /**
+     *
+     * @param token
+     * @param type 	濯掍綋鏂囦欢绫诲瀷锛屽垎鍒湁鍥剧墖锛坕mage锛夈�佽闊筹紙voice锛夈�佽棰戯紙video锛夛紝鏅�氭枃浠讹紙file锛�
+     * @return
+     */
+    public static QywxUploadMediaResponse uploadMedia(String token,String type,String imgurl)  {
+        String[] interfaceUrl = QywxConstant.UPLOAD_TEMP_MEDIA;
+        String url = interfaceUrl[0].replace("${accesstoken}",token).replace("${type}",type);
+        QywxUploadMediaResponse response = sendHttpRequestMultifile(url,interfaceUrl[1],imgurl
+                ,new TypeReference<QywxUploadMediaResponse>(){});
+        if(response !=null && response.getErrcode()!=null && response.getErrcode() ==0){
             return response;
         }
         return null;
@@ -156,12 +207,12 @@
      * @param <T>
      */
     public static   <T> QywxBaseResponse<T> sendHttpRequest(String url, String name, String param, TypeReference<QywxBaseResponse<T>> typeReference){
-        log.info("銆�"+name+"銆�================寮�濮�===="+ JSONObject.toJSONString(param));
+        log.info("銆�"+name+"銆�================寮�濮�===="+qyUtil.qiweiUrl+url+"\nparam==========================:"+ JSONObject.toJSONString(param));
         if ( StringUtils.isNotBlank(url)) {
             String res = null;
             try {
                 Map<String,String> headers = new HashMap<>();
-                res = HttpsUtil.postJson(qyUtil.qiweiUrl+url,param);
+                res = HttpsUtil.get(qyUtil.qiweiUrl+url,true);
                 QywxBaseResponse result = JSONObject.parseObject(res, typeReference.getType());
                 logResult(result,name);
                 return  result;
@@ -172,13 +223,51 @@
         }
         return  null;
     }
-    public static  <T extends QywxBaseSingleResponse>  T sendHttpRequestSingle(String url, String name, String param, TypeReference<T> typeReference){
-        log.info("銆�"+name+"銆�================寮�濮�===="+ JSONObject.toJSONString(param));
+    public static   <T> QywxBaseResponse<T> sendHttpGetRequest(String url, String name,  TypeReference<QywxBaseResponse<T>> typeReference){
+        log.info("銆�"+name+"銆�================寮�濮�===="+qyUtil.qiweiUrl+url+"\nparam==========================:"+ JSONObject.toJSONString(url));
         if ( StringUtils.isNotBlank(url)) {
             String res = null;
             try {
                 Map<String,String> headers = new HashMap<>();
-                res = HttpsUtil.postJson(qyUtil.qiweiUrl+url,param);
+                res = HttpsUtil.get(qyUtil.qiweiUrl+url,true);
+                QywxBaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+                logResult(result,name);
+                return  result;
+            }catch (Exception e){
+                e.printStackTrace();
+                log.error("銆�"+name+"銆�================澶辫触===="+ JSONObject.toJSONString(url));
+            }
+        }
+        return  null;
+    }
+    public static  <T extends QywxBaseSingleResponse>  T sendHttpRequestMultifile(String url, String name, String imgUrl  , TypeReference<T> typeReference){
+        log.info("銆�"+name+"銆�================寮�濮�===="+qyUtil.qiweiUrl+url+"\nparam==========================:"+ imgUrl);
+        if ( StringUtils.isNotBlank(url)) {
+            String res = null;
+            try {
+                 res = HttpsUtil.uploadTempMedia (qyUtil.qiweiUrl+url,imgUrl);
+                log.info("浠庝紒寰帴鍙�:{}----涓婁紶涓存椂绱犳潗缁撴灉:{}",url,res);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                T result = JSONObject.parseObject(res, typeReference.getType());
+                return  result;
+            }catch (Exception e){
+                e.printStackTrace();
+                log.error("銆�"+name+"銆�================澶辫触===="+ imgUrl);
+            }
+        }
+        return  null;
+    }
+    public static  <T extends QywxBaseSingleResponse>  T sendHttpRequestSingle(String url, String name, String param, TypeReference<T> typeReference,boolean isPost){
+        log.info("銆�"+name+"銆�================寮�濮�===="+qyUtil.qiweiUrl+url+"\nparam==========================:"+ JSONObject.toJSONString(param));
+        if ( StringUtils.isNotBlank(url)) {
+            String res = null;
+            try {
+                Map<String,String> headers = new HashMap<>();
+                if(isPost){
+                    res = HttpsUtil.postJson(qyUtil.qiweiUrl+url,param);
+                }else{
+                    res = HttpsUtil.get(qyUtil.qiweiUrl+url,true);
+                }
                 T result = JSONObject.parseObject(res, typeReference.getType());
 //                logResult(result,name);
                 return  result;
diff --git a/server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java b/server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java
new file mode 100644
index 0000000..42d01fb
--- /dev/null
+++ b/server/src/main/java/com/doumee/core/utils/qiyeweixin/model/response/QywxUploadMediaResponse.java
@@ -0,0 +1,22 @@
+package com.doumee.core.utils.qiyeweixin.model.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("浼佷笟寰俊涓婁紶绱犳潗杩斿洖鍙傛暟")
+public class QywxUploadMediaResponse extends QywxBaseSingleResponse {
+    @ApiModelProperty(value = "濯掍綋鏂囦欢绫诲瀷锛屽垎鍒湁鍥剧墖锛坕mage锛夈�佽闊筹紙voice锛夈�佽棰戯紙video锛夛紝鏅�氭枃浠�(file)")
+    private String type;//
+    @ApiModelProperty(value = "濯掍綋鏂囦欢涓婁紶鍚庤幏鍙栫殑鍞竴鏍囪瘑锛�3澶╁唴鏈夋晥")
+    private String media_id	;//
+    @ApiModelProperty(value = "濯掍綋鏂囦欢涓婁紶鏃堕棿鎴�")
+    private String created_at;//
+}
diff --git a/server/src/main/java/com/doumee/dao/business/CompanyMemberMapper.java b/server/src/main/java/com/doumee/dao/business/CompanyMemberMapper.java
index 4a669e7..2593b44 100644
--- a/server/src/main/java/com/doumee/dao/business/CompanyMemberMapper.java
+++ b/server/src/main/java/com/doumee/dao/business/CompanyMemberMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.CompanyMember;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @since 2025/04/03 16:30
  */
-public interface CompanyMemberMapper extends BaseMapper<CompanyMember> {
+public interface CompanyMemberMapper extends MPJBaseMapper<CompanyMember> {
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java b/server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java
new file mode 100644
index 0000000..58a5670
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/dto/WebQwUploadDto.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.business.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("浼佷笟寰俊绱犳潗涓婁紶鍏ュ弬")
+public class WebQwUploadDto {
+    @ApiModelProperty(value = "绱犳潗缂栫爜")
+    private List<String> mediaIds;
+    @ApiModelProperty(value = "绱犳潗瀛樻斁鐩綍瀛楀吀缂栫爜")
+    private  String folder;
+
+}
diff --git a/server/src/main/java/com/doumee/dao/business/model/Category.java b/server/src/main/java/com/doumee/dao/business/model/Category.java
index 9f9f611..b6547f5 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Category.java
@@ -71,6 +71,9 @@
     @ApiModelProperty(value = "涓婄骇鍚嶇О")
     @TableField(exist = false)
     private String parentName;
+    @ApiModelProperty(value = "涓婁笂绾у悕绉�")
+    @TableField(exist = false)
+    private String rootName;
     @ApiModelProperty(value = "鎿嶄綔浜哄悕瀛�")
     @TableField(exist = false)
     private String editorName;
@@ -83,4 +86,8 @@
     @ApiModelProperty(value = "瀛愰泦闆嗗悎")
     @TableField(exist = false)
     private List<Category> childList;
+
+    @ApiModelProperty(value = "瀛愰泦闆嗗悎(鎵归噺瀵煎叆瀵规瘮涓嬮泦锛�")
+    @TableField(exist = false)
+    private List<Category> childMatchList;
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Company.java b/server/src/main/java/com/doumee/dao/business/model/Company.java
index f5be827..10c6e54 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Company.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Company.java
@@ -93,5 +93,17 @@
     @ApiModelProperty(value = "鏄惁涓洪儴闂ㄨ礋璐d汉0-鍚︼紱1-鏄�", example = "1")
     @TableField(exist = false)
     private Integer isLeader;
+    @ApiModelProperty(value = "鏄惁鍖呭惈瀛愯彍鍗�")
+    @TableField(exist = false)
+    private Boolean hasChildren;
+    @ApiModelProperty(value = "瀵硅薄绫诲瀷 0閮ㄩ棬 1鍛樺伐")
+    @TableField(exist = false)
+    private int objType;
+    @ApiModelProperty(value = "浜哄憳缂栫爜锛堝叧鑱攎ember", example = "1")
+    @TableField(exist = false)
+    private Integer memberId;
+    @ApiModelProperty(value = "涓嬬骇閮ㄩ棬鏁伴噺", example = "1")
+    @TableField(exist = false)
+    private Integer childNum;
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java b/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java
index 8df1158..3b58529 100644
--- a/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java
+++ b/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -53,8 +54,11 @@
 
     @ApiModelProperty(value = "浜哄憳缂栫爜锛堝叧鑱攎ember", example = "1")
     private Integer memberId;
-
     @ApiModelProperty(value = "鏄惁涓洪儴闂ㄨ礋璐d汉0-鍚︼紱1-鏄�", example = "1")
     private Integer isLeader;
+    @ApiModelProperty(value = "浜哄憳濮撳悕", example = "1")
+    @TableField(exist = false)
+    private String memberName;
+
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Managers.java b/server/src/main/java/com/doumee/dao/business/model/Managers.java
index f257b97..f951e37 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Managers.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Managers.java
@@ -9,6 +9,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 璐d换浜轰俊鎭〃
@@ -84,4 +85,19 @@
     @ApiModelProperty(value = "鍛樺伐閭")
     @TableField(exist = false)
     private String memberEmail;
+    @ApiModelProperty(value = "鍛樺伐浼佸井ID")
+    @TableField(exist = false)
+    private String memberQwId;
+    @ApiModelProperty(value = "鍛樺伐缂栫爜闆嗗悎")
+    @TableField(exist = false)
+    private List<Integer> memberIds;
+    @ApiModelProperty(value = "缁勭粐缂栫爜ID")
+    @TableField(exist = false)
+    private Integer companyId;
+    @ApiModelProperty(value = "缁勭粐缂栫爜IDs")
+    @TableField(exist = false)
+    private List<String> companyIds;
+    @ApiModelProperty(value = "璁剧疆鑼冨洿 0鐩村睘閮ㄩ棬鍛樺伐 1閮ㄩ棬鍙婂叾涓嬬骇甯冩仼鍛樺伐 2鎸囧畾浜哄憳")
+    @TableField(exist = false)
+    private Integer isMember;
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Workorder.java b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
index 6067883..5de1b32 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Workorder.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -162,6 +162,9 @@
     @ApiModelProperty(value = "涓嬫鍌績鏃堕棿")
     private Date urgeDate;
 
+    @ApiModelProperty(value = "鍙鐞哠HE浜哄憳浼佸井涓婚敭")
+    private String sheDealUserQwIds;
+
     @ApiModelProperty("闄勪欢淇℃伅")
     @TableField(exist = false)
     private List<Multifile> multifileList;
@@ -218,6 +221,9 @@
     @ApiModelProperty(value = "瑙e喅鎯呭喌锛堟煡璇娇鐢級锛�0=鍚︼紱1=鏄紱",hidden = true)
     @TableField(exist = false)
     private Integer dealStatus;
+    @ApiModelProperty(value = "鐘舵�佹弿杩帮紱",hidden = true)
+    @TableField(exist = false)
+    private String statusName;
     @ApiModelProperty(value = "缁熻鏁帮紱",hidden = true)
     @TableField(exist = false)
     private Long num;
diff --git a/server/src/main/java/com/doumee/dao/business/vo/CategoryDcaProblemDto.java b/server/src/main/java/com/doumee/dao/business/vo/CategoryDcaProblemDto.java
new file mode 100644
index 0000000..1f2522f
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/vo/CategoryDcaProblemDto.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.business.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("DCA涓婚瑙傚療椤瑰鍑轰俊鎭�")
+public class CategoryDcaProblemDto {
+    @ApiModelProperty(value = "搴忓彿")
+    @ExcelColumn(name="搴忓彿",index =1  ,width = 4)
+    private Long index;
+    @ApiModelProperty(value = "涓�绾т富棰�")
+    @ExcelColumn(name="涓�绾ц瀵熶富棰�",index =2  ,width = 10)
+    private String parentName;
+    @ApiModelProperty("浜岀骇瑙傚療涓婚")
+    @ExcelColumn(name="浜岀骇瑙傚療涓婚",index =3,width = 10)
+    private String typeName;
+    @ApiModelProperty(value = "瑙傚療椤�"  )
+    @ExcelColumn(name="瑙傚療椤�",index =4,width = 40 )
+    private String problem;
+
+}
diff --git a/server/src/main/java/com/doumee/dao/business/vo/CompanyTree.java b/server/src/main/java/com/doumee/dao/business/vo/CompanyTree.java
index b961eb4..c7e59e1 100644
--- a/server/src/main/java/com/doumee/dao/business/vo/CompanyTree.java
+++ b/server/src/main/java/com/doumee/dao/business/vo/CompanyTree.java
@@ -1,9 +1,14 @@
 package com.doumee.dao.business.vo;
 
+import com.doumee.core.constants.Constants;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyMember;
+import com.doumee.dao.business.model.Member;
 import org.apache.commons.lang3.StringUtils;
+import org.yaml.snakeyaml.scanner.Constant;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 
@@ -17,6 +22,7 @@
 
     // 淇濆瓨鍙備笌鏋勫缓鏍戝舰鐨勬墍鏈夋暟鎹紙閫氬父鏁版嵁搴撴煡璇㈢粨鏋滐級
     public List<Company> nodeList = new ArrayList<>();
+    public List<CompanyMember> memberList = new ArrayList<>();
 
     public Integer origin = 0; //0鑷缓 1浼佸井
 
@@ -28,6 +34,11 @@
     public CompanyTree(List<Company> nodeList, Integer origin){
         this.nodeList = nodeList;
         this.origin = origin;
+    }
+    public CompanyTree(List<Company> nodeList, Integer origin, List<CompanyMember> memberList ){
+        this.nodeList = nodeList;
+        this.origin = origin;
+        this.memberList=memberList;
     }
 
 
@@ -42,6 +53,9 @@
         for (Company treeNode : nodeList){
             // 鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘牴鑺傜偣锛屾澶勬敞鎰忥細鑻arentId绫诲瀷鏄疭tring锛屽垯瑕侀噰鐢╡quals()鏂规硶鍒ゆ柇銆�
             if(origin== 1){
+                if( findParentIdFromList(treeNode.getQwParentId()) == null){
+                    treeNode.setQwParentId(null);//鍘婚櫎娌¤幏鍙栫殑鐖惰妭鐐圭殑浼佸井鐖剁骇鏍囪瘑锛屼綔涓洪《鑺傜偣
+                }
                 if (StringUtils.isBlank(treeNode.getQwParentId()) || StringUtils.equals(treeNode.getQwId(),"1")) {
                     // 鏄紝娣诲姞
                     rootNodeList.add(treeNode);
@@ -54,6 +68,15 @@
             }
         }
         return rootNodeList;
+    }
+
+    private Company findParentIdFromList(String qwParentId) {
+        for(Company c : nodeList){
+            if(StringUtils.equals(c.getQwId(),qwParentId)){
+                return  c;
+            }
+        }
+        return null;
     }
 
 
@@ -93,13 +116,43 @@
                 if (!Objects.isNull(treeNode.getParentId())&&treeNode.getParentId().equals(pNode.getId())) {
                     // 鍐嶉�掑綊杩涜鍒ゆ柇褰撳墠鑺傜偣鐨勬儏鍐碉紝璋冪敤鑷韩鏂规硶
                     childTree.add(buildChildTree(treeNode));
+
                 }
             }
         }
         // for寰幆缁撴潫锛屽嵆鑺傜偣涓嬫病鏈変换浣曡妭鐐癸紝鏍戝舰鏋勫缓缁撴潫锛岃缃爲缁撴灉
         pNode.setChildList(childTree);
+        List<Company> memberList = getMemberNode(pNode.getId());
+        if(memberList!=null && memberList.size()>0){
+            if(pNode.getChildList() == null){
+                pNode.setChildList(memberList);
+            }else{
+                pNode.getChildList().addAll(memberList);
+            }
+        }
+        if(  pNode.getChildList() == null ||   pNode.getChildList().size() ==0){
+            pNode.setHasChildren(Boolean.FALSE);
+        }else{
+            pNode.setHasChildren(Boolean.TRUE);
+        }
         return pNode;
     }
 
+    private   List<Company> getMemberNode(Integer id) {
+        List<Company> companyList = new ArrayList<>();
+        if(memberList!=null && memberList.size()>0){
+            for(CompanyMember member :memberList){
+                if(member.getCompanyId()!=null && Constants.equalsInteger(member.getCompanyId(),id)){
+                    Company com = new Company();
+                    com.setObjType(Constants.ONE);
+                    com.setName(member.getMemberName());
+                    com.setMemberId(member.getMemberId());
+                    companyList.add(com);
+                }
+            }
+        }
+        return companyList;
+    }
+
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java
index afd73f1..50eb1bb 100644
--- a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java
@@ -26,16 +26,19 @@
     @ExcelColumn(name="椋庨櫓绫诲瀷",index =3,width = 6)
     private String typeName;
     @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
-    @ExcelColumn(name="鐘舵��",index =4,width = 4, valueMapping = "0=寰呭鐞�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    @ExcelColumn(name="鐘舵��",index =4,width = 4, valueMapping = "0=澶勭悊涓�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
     private Integer status;
+    @ApiModelProperty(value = "鐘舵�佹弿杩�")
+    @ExcelColumn(name="鐘舵�佹弿杩�",index =5,width = 8)
+    private String statusName;
     @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
-    @ExcelColumn(name="涓婃姤鏃堕棿",index =5 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date submitDate;
     @ApiModelProperty(value = "鍙戠幇鏃堕棿", example = "1")
-    @ExcelColumn(name="鍙戠幇鏃堕棿",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    @ExcelColumn(name="鍙戠幇鏃堕棿",index =7 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date happenTime;
     @ApiModelProperty(value = "鍙戠敓鍦扮偣", example = "1")
-    @ExcelColumn(name="鍙戠敓鍦扮偣",index =7 ,width = 6)
+    @ExcelColumn(name="鍙戠敓鍦扮偣",index =8 ,width = 6)
     private String locationName;
     @ApiModelProperty(value = "椋庨櫓鎻忚堪", example = "1")
     @ExcelColumn(name="椋庨櫓鎻忚堪",index =11,width = 10)
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java
index 53ffd98..5571e59 100644
--- a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java
@@ -4,6 +4,8 @@
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.apache.ibatis.logging.nologging.NoLoggingImpl;
+import org.apache.ibatis.logging.slf4j.Slf4jImpl;
 
 import java.util.Date;
 
@@ -32,19 +34,23 @@
     @ExcelColumn(name="涓嶇鍚堥」",index =5,width = 10)
     private String problemTitle;
     @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
-    @ExcelColumn(name="鐘舵��",index =6,width = 4, valueMapping = "0=寰呭鐞�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    @ExcelColumn(name="鐘舵��",index =6,width = 4, valueMapping = "0=澶勭悊涓�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
     private Integer status;
+    @ApiModelProperty(value = "鐘舵�佹弿杩�")
+    @ExcelColumn(name="鐘舵�佹弿杩�",index =7,width = 8)
+    private String statusName;
     @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
-    @ExcelColumn(name="涓婃姤鏃堕棿",index =7 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date submitDate;
     @ApiModelProperty(value = "鍙戠幇鏃堕棿", example = "1")
-    @ExcelColumn(name="鍙戠幇鏃堕棿",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    @ExcelColumn(name="鍙戠幇鏃堕棿",index =9 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date happenTime;
     @ApiModelProperty(value = "浣嶇疆", example = "1")
-    @ExcelColumn(name="浣嶇疆",index =9 ,width = 6)
+    @ExcelColumn(name="浣嶇疆",index =10 ,width = 6)
     private String locationName;
+
     @ApiModelProperty(value = "涓嶇鍚堝師鍥�", example = "1")
-    @ExcelColumn(name="涓嶇鍚堝師鍥�",index =10,width = 10)
+    @ExcelColumn(name="涓嶇鍚堝師鍥�",index =11,width = 10)
     private String eventInfo;
     @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
     @ExcelColumn(name="涓婃姤鍛樺伐",index =12,width = 8)
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java
index 7fe4129..f647882 100644
--- a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java
@@ -43,6 +43,9 @@
     @ApiModelProperty("閫氱煡浜�")
     @ExcelColumn(name="閫氱煡浜�",index =10,width = 8)
     private String memberNames;
+    @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
+    @ExcelColumn(name="鐘舵��",index =11,width = 4, valueMapping = "0=澶勭悊涓�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    private Integer status;
     @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
     @ExcelColumn(name="涓婃姤鍛樺伐",index =12,width = 8)
     private String memberName;
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java
index 91168ed..6e7492f 100644
--- a/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java
@@ -38,7 +38,7 @@
     @ExcelColumn(name="涓婃姤鏃堕棿",index =4 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
     private Date submitDate;
     @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
-    @ExcelColumn(name="鐘舵��",index =5,width = 4, valueMapping = "0=寰呭鐞�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    @ExcelColumn(name="鐘舵��",index =5,width = 4, valueMapping = "0=澶勭悊涓�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
     private Integer status;
     @ApiModelProperty(value = "鍙戠敓鍦扮偣")
     @ExcelColumn(name="鍙戠敓鍦扮偣",index =6,width = 8)
diff --git a/server/src/main/java/com/doumee/dao/system/model/SystemDictData.java b/server/src/main/java/com/doumee/dao/system/model/SystemDictData.java
index 80a7813..f74c660 100644
--- a/server/src/main/java/com/doumee/dao/system/model/SystemDictData.java
+++ b/server/src/main/java/com/doumee/dao/system/model/SystemDictData.java
@@ -27,7 +27,7 @@
     private Integer id;
 
     @ApiModelProperty(value = "鎵�灞炲瓧鍏�", example = "1")
-    @NotNull(message = "鎵�灞炲瓧鍏镐笉鑳戒负绌�", groups = {Constants.OperaType.Create.class, Constants.OperaType.Update.class})
+    @NotNull(message = "鎵�灞炲瓧鍏镐笉鑳戒负绌�", groups = {Constants.OperaType.Create.class })
     private Integer dictId;
 
     @ApiModelProperty(value = "鏁版嵁鍊�")
diff --git a/server/src/main/java/com/doumee/dao/system/vo/SystemQrcodeListVO.java b/server/src/main/java/com/doumee/dao/system/vo/SystemQrcodeListVO.java
new file mode 100644
index 0000000..218cf26
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/system/vo/SystemQrcodeListVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.system.vo;
+
+import com.doumee.dao.system.model.SystemDict;
+import com.doumee.dao.system.model.SystemUser;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author  dm
+ * @since 2025/03/31 16:44
+ */
+@Data
+@ApiModel("浜岀淮鐮佺鐞嗗璞�")
+public class SystemQrcodeListVO   {
+
+    @ApiModelProperty(value = "缂栫爜")
+    private String id;
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+    @ApiModelProperty(value = "鍦板潃")
+    private String url;
+
+}
diff --git a/server/src/main/java/com/doumee/dao/web/vo/CategoryMapTree.java b/server/src/main/java/com/doumee/dao/web/vo/CategoryMapTree.java
new file mode 100644
index 0000000..2ae3fde
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/web/vo/CategoryMapTree.java
@@ -0,0 +1,88 @@
+package com.doumee.dao.web.vo;
+
+import com.doumee.core.constants.Constants;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/4/8 9:19
+ */
+public class CategoryMapTree {
+
+    // 淇濆瓨鍙備笌鏋勫缓鏍戝舰鐨勬墍鏈夋暟鎹紙閫氬父鏁版嵁搴撴煡璇㈢粨鏋滐級
+    public List<Map<String,Object>> nodeList = new ArrayList<>();
+
+    /**
+     *  鏋勯�犳柟娉�
+     *  @param nodeList 灏嗘暟鎹泦鍚堣祴鍊肩粰nodeList锛屽嵆鎵�鏈夋暟鎹綔涓烘墍鏈夎妭鐐广��
+     */
+    public CategoryMapTree(List<Map<String,Object>> nodeList){
+        this.nodeList = nodeList;
+    }
+
+
+    /**
+     *   鑾峰彇闇�鏋勫缓鐨勬墍鏈夋牴鑺傜偣锛堥《绾ц妭鐐癸級 "0"
+     *   @return 鎵�鏈夋牴鑺傜偣List闆嗗悎
+     */
+    public List<Map<String,Object>> getRootNode(){
+        // 淇濆瓨鎵�鏈夋牴鑺傜偣锛堟墍鏈夋牴鑺傜偣鐨勬暟鎹級
+        List<Map<String,Object>> rootNodeList = new ArrayList<>();
+        // treeNode锛氭煡璇㈠嚭鐨勬瘡涓�鏉℃暟鎹紙鑺傜偣锛�
+        for (Map<String,Object> treeNode : nodeList){
+            // 鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘牴鑺傜偣锛屾澶勬敞鎰忥細鑻arentId绫诲瀷鏄疭tring锛屽垯瑕侀噰鐢╡quals()鏂规硶鍒ゆ柇銆�
+            if(Integer.valueOf(treeNode.get("level").toString())==1){
+                rootNodeList.add(treeNode);
+            }
+        }
+        return rootNodeList;
+    }
+
+
+    /**
+     *  鏍规嵁姣忎竴涓《绾ц妭鐐癸紙鏍硅妭鐐癸級杩涜鏋勫缓鏍戝舰缁撴瀯
+     *  @return  鏋勫缓鏁存5鏍�
+     */
+    public List<Map<String,Object>> buildTree(){
+        // treeNodes锛氫繚瀛樹竴涓《绾ц妭鐐规墍鏋勫缓鍑烘潵鐨勫畬鏁存爲褰�
+        List<Map<String,Object>> treeNodes = new ArrayList<Map<String,Object>>();
+        // getRootNode()锛氳幏鍙栨墍鏈夌殑鏍硅妭鐐�
+        for (Map<String,Object> treeRootNode : getRootNode()) {
+            // 灏嗛《绾ц妭鐐硅繘琛屾瀯寤哄瓙鏍�
+            treeRootNode = buildChildTree(treeRootNode);
+            // 瀹屾垚涓�涓《绾ц妭鐐规墍鏋勫缓鐨勬爲褰紝澧炲姞杩涙潵
+            treeNodes.add(treeRootNode);
+        }
+        return treeNodes;
+    }
+
+    /**
+     *  閫掑綊-----鏋勫缓瀛愭爲褰㈢粨鏋�
+     *  @param  pNode 鏍硅妭鐐癸紙椤剁骇鑺傜偣锛�
+     *  @return 鏁存5鏍�
+     */
+    public Map<String,Object> buildChildTree(Map<String,Object> pNode){
+        List<Map<String,Object>> childTree = new ArrayList<Map<String,Object>>();
+        // nodeList锛氭墍鏈夎妭鐐归泦鍚堬紙鎵�鏈夋暟鎹級
+        for (Map<String,Object> treeNode : nodeList) {
+            // 鍒ゆ柇褰撳墠鑺傜偣鐨勭埗鑺傜偣ID鏄惁绛変簬鏍硅妭鐐圭殑ID锛屽嵆褰撳墠鑺傜偣涓哄叾涓嬬殑瀛愯妭鐐�
+            if ( treeNode.get("parentId").toString().equals(pNode.get("id").toString())) {
+                // 鍐嶉�掑綊杩涜鍒ゆ柇褰撳墠鑺傜偣鐨勬儏鍐碉紝璋冪敤鑷韩鏂规硶
+                childTree.add(buildChildTree(treeNode));
+            }
+        }
+        // for寰幆缁撴潫锛屽嵆鑺傜偣涓嬫病鏈変换浣曡妭鐐癸紝鏍戝舰鏋勫缓缁撴潫锛岃缃爲缁撴灉
+        pNode.put("childTree",childTree);
+        return pNode;
+    }
+
+
+
+
+}
diff --git a/server/src/main/java/com/doumee/service/business/CategoryService.java b/server/src/main/java/com/doumee/service/business/CategoryService.java
index d96ce32..22510bf 100644
--- a/server/src/main/java/com/doumee/service/business/CategoryService.java
+++ b/server/src/main/java/com/doumee/service/business/CategoryService.java
@@ -3,7 +3,9 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.vo.CategoryDcaProblemDto;
 import com.doumee.dao.web.vo.CategoryVO;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -103,10 +105,16 @@
      * @return
      */
     List<CategoryVO>  getCategoryVOTree(String categoryType,Integer categoryId);
+    List<CategoryDcaProblemDto>  findListForDca(Category category);
 
     List<CategoryVO>  getCategoryVOList(Integer categoryType,Integer isRoot);
 
     List<CategoryVO>  getCategoryVOForGCXTree(Integer categoryId);
 
     List<Category> treeList(Category param );
+
+    String importDcaBatch(MultipartFile file);
+    String initRedis();
+
+    void dealjson();
 }
diff --git a/server/src/main/java/com/doumee/service/business/CompanyService.java b/server/src/main/java/com/doumee/service/business/CompanyService.java
index 03b98e9..85b841d 100644
--- a/server/src/main/java/com/doumee/service/business/CompanyService.java
+++ b/server/src/main/java/com/doumee/service/business/CompanyService.java
@@ -98,4 +98,5 @@
     int syncAll(Company company);
 
     List<Company> companyTree();
+    List<Company> companyTreeWithMember();
 }
diff --git a/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index 8ba0af2..4269564 100644
--- a/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -1,6 +1,8 @@
 package com.doumee.service.business.impl;
 
-import com.doumee.core.constants.Constants;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -10,14 +12,13 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.CategoryMapper;
 import com.doumee.dao.business.model.Category;
-import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.vo.CategoryDcaProblemDto;
 import com.doumee.dao.business.vo.CompanyTree;
+import com.doumee.dao.web.vo.CategoryMapTree;
 import com.doumee.dao.web.vo.CategoryVO;
 import com.doumee.dao.web.vo.CategoryVOTree;
-import com.doumee.dao.business.model.Company;
-import com.doumee.dao.business.model.Managers;
 import com.doumee.dao.business.vo.CategoryTree;
-import com.doumee.dao.business.vo.CompanyTree;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.CategoryService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -25,17 +26,24 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.CellType;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +54,8 @@
 @Service
 public class CategoryServiceImpl implements CategoryService {
 
+    @Resource(name="sessionRedisTemplate")
+    private RedisTemplate<Object, Serializable> redisTemplate;
     @Autowired
     private CategoryMapper categoryMapper;
 
@@ -375,8 +385,492 @@
         }
         return categoryVOList;
     }
+    public   List<Category>  findAllListForDca() {
+        List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                .eq(Category::getIsdeleted, Constants.ZERO)
+                .in(Category::getType, Constants.FOUR, Constants.SIX)//涓婚鍜岃瀵熼」
+                .orderByAsc(Category::getSortnum)
+        );
+        return  categoryList;
+    }
+    public   List<Category>  findListForDcaTree(   List<Category> categoryList) {
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)) {
+            long index = 1;
+            List<Category> pList = new ArrayList<>();
+            for (Category category : categoryList) {
+                if (category.getParentId() == null) {
+                    category.setChildList(new ArrayList<>());
+                    for (Category cc : categoryList) {
+                        if (Constants.equalsInteger(cc.getParentId(), category.getId())) {
+                            cc.setChildList(new ArrayList<>());
+                            for (Category ccc : categoryList) {
+                                if (Constants.equalsInteger(ccc.getParentId(), cc.getId())) {
+                                    cc.getChildList().add(ccc);
+                                }
+                            }
+                            category.getChildList().add(cc);
+                        }
+                    }
+                    pList.add(category);
+                }
+            }
+            return pList;
+        }
+        return  null;
+    }
+    public   List<Category>  findImportTreeForDca (  List<CategoryDcaProblemDto> categoryList,LoginUserInfo user, Date date) {
+        List<Category> pList = new ArrayList<>();
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)) {
+            Integer index = 1;
+            for (CategoryDcaProblemDto categoryDcaProblemDto : categoryList) {
+                if(StringUtils.isBlank(categoryDcaProblemDto.getProblem())
+                        &&StringUtils.isBlank(categoryDcaProblemDto.getParentName())
+                        &&StringUtils.isBlank(categoryDcaProblemDto.getTypeName()) ){
+                    //鍘荤┖琛�
+                    continue;
+                }
+                if(StringUtils.isBlank(categoryDcaProblemDto.getParentName())){
+                    throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝琛ㄦ牸绗��"+(index + 1)+"銆戣涓�绾т富棰樹俊鎭笉鑳戒负绌猴紝璇疯繑鍥炴鏌ヨ〃鏍间俊鎭紒");
+                }
+                categoryDcaProblemDto.setProblem(StringUtils.defaultString(categoryDcaProblemDto.getProblem(),"").trim());
+                categoryDcaProblemDto.setTypeName(StringUtils.defaultString(categoryDcaProblemDto.getTypeName(),"").trim());
+                categoryDcaProblemDto.setParentName(StringUtils.defaultString(categoryDcaProblemDto.getParentName(),"").trim());
+                Category first = getNewCateFromListByName(categoryDcaProblemDto.getParentName(), pList);
+                if(first == null){
+                    first = new Category();
+                    first.setIsdeleted(Constants.ZERO);
+                    first.setCreateDate(date);
+                    first.setCreator(user.getId());
+                    first.setIsdeleted(Constants.ZERO);
+                    first.setStatus(Constants.ZERO);
+                    first.setEditDate(date);
+                    first.setEditor(user.getId());
+                    first.setName(categoryDcaProblemDto.getParentName());
+                    first.setType(Constants.FOUR);//涓婚
+                    first.setSortnum(index++);
+                    first.setChildList(new ArrayList<>());
+                    pList.add(first);
+                    List<Category> childList = getSecondListFromImport(first,0,categoryList);
+                    first.setChildList(childList);
+                }
+            }
+        }
+        return  pList;
+    }
+
+    private List<Category> getSecondListFromImport(Category parent,int type,   List<CategoryDcaProblemDto> categoryList) {
+        List<Category> pList = new ArrayList<>();
+        Integer index = 1;
+        for (CategoryDcaProblemDto categoryDcaProblemDto : categoryList) {
+            if(type ==0 && (StringUtils.isBlank(categoryDcaProblemDto.getTypeName()) || StringUtils.isBlank(categoryDcaProblemDto.getProblem()))){
+                //鍘荤┖琛�
+                continue;
+            }
+            if(type ==1 &&(StringUtils.isBlank(categoryDcaProblemDto.getProblem()))){
+                //鍘荤┖琛�
+                continue;
+            }
+            if(type ==0 && StringUtils.isBlank(categoryDcaProblemDto.getTypeName())){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝琛ㄦ牸绗��"+(index + 1)+"銆戣浜岀骇涓婚淇℃伅涓嶈兘涓虹┖锛岃杩斿洖妫�鏌ヨ〃鏍间俊鎭紒");
+            }
+            if(type == 0 && !StringUtils.equals(categoryDcaProblemDto.getParentName(),parent.getName())){
+                //鍙鐞嗗瓙绾�
+                continue;
+            }
+            if(type == 1 && !StringUtils.equals(categoryDcaProblemDto.getTypeName(),parent.getName())){
+                //鍙鐞嗗瓙绾�
+                continue;
+            }
+            Category model = getNewCateFromListByName(type == 0 ?categoryDcaProblemDto.getTypeName():categoryDcaProblemDto.getProblem(), pList);
+            if(model == null){
+                model = new Category();
+                model.setIsdeleted(Constants.ZERO);
+                model.setCreateDate(parent.getCreateDate());
+                model.setCreator(parent.getCreator());
+                model.setIsdeleted(Constants.ZERO);
+                model.setStatus(Constants.ZERO);
+                model.setEditDate(parent.getCreateDate());
+                model.setEditor(parent.getCreator());
+                model.setName(type == 0 ?categoryDcaProblemDto.getTypeName():categoryDcaProblemDto.getProblem());
+                model.setType(type == 0 ? Constants.FOUR:Constants.SIX);//
+                model.setSortnum(index++);
+                model.setChildList(new ArrayList<>());
+                pList.add(model);
+            }
+            if(type == 0){
+                //濡傛灉鏄簩绾т富棰樺鐞嗚幏鍙栧瓙闆嗛儴闂�
+                List<Category> childList = getSecondListFromImport(model,1,categoryList);
+                model.setChildList(childList);
+            }
+        }
+        return  pList;
+    }
+
+    private Category getNewCateFromListByName(String parentName, List<Category> pList) {
+        if(pList ==null){
+            return  null;
+        }
+        for(Category cate : pList){
+            if(StringUtils.equals(parentName,cate.getName())){
+                    return cate;
+            }
+        }
+        return null;
+    }
+    private Category getNewCateFromListByNameAndParent(String parentName,int type,boolean isRoot, List<Category> pList) {
+        for(Category cate : pList){
+            if(StringUtils.equals(parentName,cate.getName()) && Constants.equalsInteger(cate.getType(),type)){
+                if(isRoot && cate.getParentId()==null){
+                    return cate;
+                }else  if(isRoot && cate.getParentId()==null){
+                    return cate;
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public   List<CategoryDcaProblemDto>  findListForDca(Category param){
+        long index =1;
+        List<CategoryDcaProblemDto>  categoryVOList = new ArrayList<>();
+        List<Category> pList = findListForDcaTree( findAllListForDca());
+        for (Category category:pList) {
+            if(category.getChildList().size() ==0){
+                CategoryDcaProblemDto categoryVO = new CategoryDcaProblemDto();
+                categoryVO.setIndex(index);
+                categoryVO.setParentName(category.getName());
+                index++;
+                categoryVOList.add(categoryVO);
+            }else{
+                for (Category cc:category.getChildList()) {
+                    if(cc.getChildList().size() ==0){
+                        CategoryDcaProblemDto categoryVO = new CategoryDcaProblemDto();
+                        categoryVO.setIndex(index);
+                        categoryVO.setParentName(category.getName());
+                        categoryVO.setTypeName(cc.getName());
+                        index++;
+                        categoryVOList.add(categoryVO);
+                    }else{
+                        for (Category ccc:cc.getChildList()) {
+                            CategoryDcaProblemDto categoryVO = new CategoryDcaProblemDto();
+                            categoryVO.setIndex(index);
+                            categoryVO.setParentName(category.getName());
+                            categoryVO.setTypeName(cc.getName());
+                            categoryVO.setProblem(ccc.getName());
+                            index++;
+                            categoryVOList.add(categoryVO);
+
+                        }
+                    }
+                }
+            }
+        }
+        return categoryVOList;
+    }
+
+
+    @Override
+    @PostConstruct
+    public String initRedis(){
+        redisTemplate.delete(Constants.RedisKeys.IMPORTING_CATEGORY);
+        return  "";
+    }
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public String importDcaBatch(MultipartFile file){
+        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_CATEGORY);
+        if(importing!=null && importing){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ憳宸ュ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
+        }
+        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_CATEGORY,true);
+        try {
+            ExcelImporter ie = null;
+            List<CategoryDcaProblemDto> dataList =null;
+            try {
+                ie = new ExcelImporter(file,0,0, CellType.STRING); // 纭繚鍗曞厓鏍肩被鍨嬩负瀛楃涓�);
+                dataList = ie.getDataList(CategoryDcaProblemDto.class,null);
+            }  catch (Exception e) {
+                e.printStackTrace();
+            }
+            if(dataList == null || dataList.size() ==0){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+            }
+            Date date = new Date();
+            LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+            List<Category> treeImportList =   findImportTreeForDca(dataList,user,date);//鏌ヨ鐜版湁鐨勫叏閮ㄤ富棰樿瀵熼」鏁版嵁
+            if(treeImportList == null || treeImportList.size() ==0){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鐨勬湁鏁堟暟鎹负绌猴紒");
+            }
+            //鏌ヨ鐜版湁鐨勫叏閮ㄤ富棰樿瀵熼」鏁版嵁
+            List<Category> list = categoryMapper.selectJoinList(Category.class,new MPJLambdaWrapper<Category>()
+                             .selectAll(Category.class)
+//                             .select("t1.name",Category::getParentName)
+//                             .select("t2.name",Category::getRootName)
+//                             .leftJoin(Category.class,Category::getId,Category::getParentId)
+//                             .leftJoin( "category t2 on t1.parent_id=t2.id")
+                            .eq(Category::getIsdeleted, Constants.ZERO)
+                            .in(Category::getType, Constants.FOUR, Constants.SIX)//涓婚鍜岃瀵熼」
+                            .orderByAsc(Category::getSortnum)
+            ) ;
+            List<Category> treeList =   findListForDcaTree(list);//鏌ヨ鐜版湁鐨勫叏閮ㄤ富棰樿瀵熼」鏁版嵁
+            List<Integer> allUpdateIds = new ArrayList<>();
+            dealImportNewOrUpdateBiz(treeList,treeImportList,allUpdateIds);
+            dealDeletedList(list,allUpdateIds,user,date);//澶勭悊鍒犻櫎鐨勬暟鎹俊鎭�
+            dealTreePathInfo(treeImportList);
+            return "瀵煎叆鎴愬姛";
+        }catch (BusinessException e){
+            throw e;
+        }catch (Exception e){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"鍛樺伐淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯");
+        }finally {
+            redisTemplate.delete(Constants.RedisKeys.IMPORTING_CATEGORY);
+        }
+    }
+
+    private void dealImportNewOrUpdateBiz(List<Category> treeList, List<Category> treeImportList, List<Integer> allUpdateIds) {
+        List<Category> newList = new ArrayList<>();
+        List<Category> updateList = new ArrayList<>();
+        for(Category tmodel :treeImportList){
+
+            //澶勭悊涓�绾т富棰樺鏀归�昏緫
+            //鏌ヨ鏄惁瀛樺湪鍚嶇О鐩稿悓鐨勪竴绾т富棰橈紝瀛樺湪鍒欐洿鏂帮紝涓嶅瓨鍦ㄥ垯鏂板
+            Category first = getNewCateFromListByName(tmodel.getName(),treeList);
+            if(first!=null){
+                tmodel.setId(first.getId());
+                tmodel.setChildMatchList(first.getChildList());
+                allUpdateIds.add(first.getId());
+                updateList.add(tmodel);
+            }else{
+                newList.add(tmodel);
+            }
+        }
+
+        //鍏堟壒閲忓鐞嗕竴绾т富棰樼殑澧炴敼鏁版嵁锛屽埛鏂颁竴绾т富棰樺璞$殑缂栫爜
+        if(newList.size() >0){
+            categoryMapper.insert(newList);
+        }
+        if( updateList.size() >0){
+            for(Category update :updateList){
+                categoryMapper.updateById(update);
+            }
+        }
+        dealSecChildList(newList,updateList,allUpdateIds,1);//澶勭悊浜岀骇鏁版嵁
+    }
+
+    private void dealDeletedList(List<Category> list, List<Integer> allUpdateIds, LoginUserInfo user, Date date) {
+        List<Integer> deleteList = new ArrayList<>();
+        for(Category cate : list){
+            for(Integer nowId : allUpdateIds){
+                if(Constants.equalsInteger(cate.getId(),nowId)){
+                    continue;
+                }
+                deleteList.add(cate.getId());
+            }
+        }
+        if(deleteList.size() >0){
+            //鍒犻櫎涓嶅瓨鍦ㄧ殑
+            categoryMapper.update(null,new UpdateWrapper<Category>().lambda()
+                    .set(Category::getIsdeleted,Constants.ONE)
+                    .set(Category::getEditor,user.getId())
+                    .set(Category::getEditDate,date)
+                    .in(Category::getId,deleteList));
+        }
+    }
+
+    private void dealSecChildList(List<Category> newList, List<Category> updateList,List<Integer> allUpdateIds,int level) {
+        List<Category> childNewList = new ArrayList<>();
+        List<Category> childUpdateList = new ArrayList<>();
+        if(newList.size() >0 || updateList.size()>0) {
+            for(Category c : newList){
+                if(c.getChildList()!=null && c.getChildList().size()>0){
+                    for(Category sec : c.getChildList()){
+                        sec.setParentId(c.getId());
+                    }
+                    childNewList.addAll(c.getChildList());
+                }
+            }
+            for(Category c : updateList){
+                if(c.getChildList()!=null && c.getChildList().size()>0){
+                    List<Category> tList = c.getChildMatchList();
+                    for(Category sec : c.getChildList()){
+                        sec.setParentId(c.getId());
+                        Category mmodel = getNewCateFromListByName(sec.getName(),tList);
+                        if(mmodel!=null){
+                            sec.setId(mmodel.getId());
+                            sec.setChildMatchList(mmodel.getChildList());
+                            allUpdateIds.add(mmodel.getId());
+                            childUpdateList.add(sec);
+                        }else{
+                            childNewList.add(sec);
+                        }
+                    }
+                }
+            }
+        }
+        if(childNewList.size() >0){
+            categoryMapper.insert(childNewList);
+        }
+        if( childUpdateList.size() >0){
+            for(Category update :childUpdateList){
+                categoryMapper.updateById(update);
+            }
+        }
+        if(level == 1){
+            dealSecChildList(childNewList,childUpdateList,allUpdateIds,2);//澶勭悊涓夌骇绾ф暟鎹�
+        }
+    }
+    private void dealTreePathInfo(List<Category> tree) {
+        if(tree!=null || tree.size()>0){
+            for(Category t : tree){
+                t.setIdPath(t.getId()+"/");
+                t.setNamePath(t.getName());
+                categoryMapper.updateById(t);
+                dealChildParentId(t,t.getChildList());
+            }
+        }
+    }
+
+    private void dealChildParentId(Category t, List<Category> childList) {
+        if(childList ==null || childList.size()==0){
+            return;
+        }
+        for(Category c : childList){
+            c.setParentId(t.getId());
+            c.setIdPath(t.getIdPath()+c.getId()+"/");
+            c.setNamePath(t.getNamePath()+"/"+c.getName());
+            categoryMapper.updateById(c);
+            if(t.getChildList()!=null || t.getChildList().size()==0){
+                //閫掑綊澶勭悊瀛愰泦
+                dealChildParentId(c,c.getChildList());
+            }
+        }
+    }
 
 
 
+    @Override
+    public void dealjson(){
+        String json = "";
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new FileReader("d://file.txt"));
+            String line;
+            while ((line = reader.readLine()) != null) {
+                json = json + line;
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (reader != null){
+                    reader.close();
+                };
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        JSONArray jsonArray = jsonObject.getJSONArray("data");
+
+        List<Map<String,Object>> mapList = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsons = jsonArray.getJSONObject(i);
+            Map<String,Object> map = new HashMap<>();
+            map.put("id",jsons.getString("id"));
+            map.put("level",jsons.getInteger("level"));
+            map.put("name",jsons.getString("name"));
+            map.put("parentId",jsons.getString("parentId"));
+            mapList.add(map);
+        }
+        CategoryMapTree categoryMapTree = new CategoryMapTree(mapList);
+        mapList = categoryMapTree.buildTree();
+
+        for (Map<String,Object> map:mapList) {
+            Category category = new Category();
+            category.setCreateDate(new Date());
+            category.setIsdeleted(Constants.ZERO);
+            category.setStatus(Constants.ZERO);
+            category.setType(Constants.SIX);
+            category.setName(map.get("name").toString());
+            category.setNamePath(map.get("name").toString());
+            categoryMapper.insert(category);
+            if(Objects.nonNull(map.get("childTree"))){
+                List<Map<String,Object>> childOneMap = (List<Map<String, Object>>) map.get("childTree");
+                for (Map<String,Object> oneMap:childOneMap) {
+                    Category oneCategory = new Category();
+                    oneCategory.setCreateDate(new Date());
+                    oneCategory.setIsdeleted(Constants.ZERO);
+                    oneCategory.setStatus(Constants.ZERO);
+                    oneCategory.setType(Constants.SIX);
+                    oneCategory.setName(oneMap.get("name").toString());
+                    oneCategory.setNamePath(category.getNamePath()+"/"+oneCategory.getName());
+                    oneCategory.setParentId(category.getId());
+                    categoryMapper.insert(oneCategory);
+
+                    if(Objects.nonNull(oneMap.get("childTree"))){
+                        List<Map<String,Object>> childTwoMap = (List<Map<String, Object>>) oneMap.get("childTree");
+                        for (Map<String,Object> twoMap:childTwoMap) {
+                            Category twoCategory = new Category();
+                            twoCategory.setCreateDate(new Date());
+                            twoCategory.setIsdeleted(Constants.ZERO);
+                            twoCategory.setStatus(Constants.ZERO);
+                            twoCategory.setType(Constants.SIX);
+                            twoCategory.setName(twoMap.get("name").toString());
+                            twoCategory.setNamePath(oneCategory.getNamePath() + "/" + twoCategory.getName());
+                            twoCategory.setParentId(oneCategory.getId());
+                            categoryMapper.insert(twoCategory);
+                        }
+                    }
+                }
+
+
+
+
+
+
+            }
+
+        }
+
+
+
+
+//        for (int i = 0; i < jsonArray.size(); i++) {
+//            JSONObject  jsonObject1 = jsonArray.getJSONObject(i);
+//            if(Constants.equalsInteger(jsonObject1.getInteger("level"),Constants.ONE)){
+//                Boolean iHavaChild = false;
+//                for (int k = 0; i < jsonArray.size(); i++) {
+//                    JSONObject  jsonObject2 = jsonArray.getJSONObject(k);
+//
+//                    Boolean kHavaChild = false;
+//                    if(Constants.equalsInteger(jsonObject2.getInteger("level"),Constants.TWO)
+//                            &&jsonObject2.getString("parentId").equals(jsonObject1.getString("id"))){
+//                        iHavaChild = true;
+//
+//                        for (int g = 0; i < jsonArray.size(); i++) {
+//                            JSONObject jsonObject3 = jsonArray.getJSONObject(g);
+//                            if(Constants.equalsInteger(jsonObject3.getInteger("level"),Constants.THREE)
+//                                    &&jsonObject3.getString("parentId").equals(jsonObject2.getString("id"))) {
+//                                kHavaChild = true;
+//
+//                                System.out.println(j.getString("id")+"---"+j.getString("name").replace("\n","")+"---"+j.getInteger("level")+"---"+j.getString("parentId"));
+//                            }
+//                        }
+//
+//                    }
+//                }
+//                if(!iHavaChild){
+//
+//                }
+//            }
+//
+//
+////            System.out.println(j.getString("id")+"---"+j.getString("name").replace("\n","")+"---"+j.getInteger("level")+"---"+j.getString("parentId"));
+//        }
+
+
+
+    }
 
 }
diff --git a/server/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index fe36d4b..031718b 100644
--- a/server/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -15,7 +16,9 @@
 import com.doumee.core.utils.qiyeweixin.QywxUtil;
 import com.doumee.core.utils.qiyeweixin.model.response.QywxDepartInfoResponse;
 import com.doumee.dao.business.CompanyMapper;
+import com.doumee.dao.business.CompanyMemberMapper;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyMember;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.vo.CompanyTree;
 import com.doumee.dao.system.model.SystemUser;
@@ -24,9 +27,12 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -40,8 +46,12 @@
 @Service
 public class CompanyServiceImpl implements CompanyService {
 
+    @Resource(name="sessionRedisTemplate")
+    private RedisTemplate<Object, Serializable> redisTemplate;
     @Autowired
     private CompanyMapper companyMapper;
+    @Autowired
+    private CompanyMemberMapper companyMemberMapper;
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
@@ -98,8 +108,21 @@
 
     @Override
     public List<Company> findList(Company company) {
-        QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
-        return companyMapper.selectList(wrapper);
+        MPJLambdaWrapper<Company> wrapper = new MPJLambdaWrapper<Company>();
+        wrapper.selectAll(Company.class )
+                .select(" (select count(1) from company t1 where t1.isdeleted=0 and t1.parent_id = t.id )",Company::getChildNum)
+                .isNull(company.getParentId()==null,Company::getParentId)
+                .eq(company.getParentId()!=null,Company::getParentId,company.getParentId())
+                .eq(Company::getIsdeleted,Constants.ZERO)
+                .orderByAsc(Company::getName);
+        List<Company> companyList = companyMapper.selectJoinList(Company.class,wrapper);
+
+        if(companyList.size()>0){
+            for (Company c : companyList){
+                c.setHasChildren(Constants.formatIntegerNum(c.getChildNum())>0);
+            }
+        }
+        return  companyList;
     }
   
     @Override
@@ -146,6 +169,9 @@
 
     @Override
     public List<Company> companyTree( ) {
+        return companyTreeBiz(0);
+    }
+    public List<Company> companyTreeBiz(int type ) {
         MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper.selectAll(Company.class);
         queryWrapper.selectAs(SystemUser::getUsername,Company::getEditorName);
@@ -154,12 +180,26 @@
         queryWrapper.leftJoin(Company.class,Company::getId,Company::getParentId);
         queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Company::getEditor);
         queryWrapper.eq(Company::getIsdeleted,Constants.ZERO);
-        queryWrapper.orderByAsc( "t.code");
+        queryWrapper.orderByAsc( "t.name");
         List<Company> companyList = companyMapper.selectJoinList(Company.class,queryWrapper);
-        CompanyTree treeBuild = new CompanyTree(companyList, 0);
+        List<CompanyMember> memberList = null;
+        if(type == 1){
+            memberList = companyMemberMapper.selectJoinList(CompanyMember.class,new MPJLambdaWrapper<CompanyMember>()
+                    .selectAll(CompanyMember.class)
+                    .selectAs(Member::getName,CompanyMember::getMemberName)
+                    .leftJoin(Member.class,Member::getId,CompanyMember::getMemberId)
+                    .eq(Member::getIsdeleted,Constants.ZERO )
+                    .eq(CompanyMember::getIsdeleted,Constants.ZERO )
+                    .orderByAsc(Member::getName));
+        }
+        CompanyTree treeBuild = new CompanyTree(companyList, 0,memberList);
         companyList = treeBuild.buildTree();
         return companyList;
     }
+    @Override
+    public List<Company> companyTreeWithMember() {
+        return companyTreeBiz(1);
+    }
 
     @Override
     public int syncAll(Company company) {
diff --git a/server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java
index 5e57bfb..112f4c5 100644
--- a/server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java
@@ -8,8 +8,10 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CompanyMapper;
 import com.doumee.dao.business.ManagersMapper;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.Managers;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.model.SystemUser;
@@ -23,8 +25,10 @@
 import org.apache.shiro.SecurityUtils;
 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.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -40,29 +44,76 @@
     private ManagersMapper managersMapper;
     @Autowired
     private MemberMapper memberMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
 
     @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(Managers managers) {
-        Member member =memberMapper.selectById(managers.getMemberId());
-        if(member == null || Constants.equalsInteger(member.getIsdeleted(),Constants.ONE)){
-            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ヨ礋璐d汉淇℃伅涓嶅瓨鍦紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
+
+        List<Managers> newList = new ArrayList<>();
+        if(  managers.getIsMember() == null || managers.getType() == null){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        Managers model =managersMapper.selectOne(new LambdaQueryWrapper<Managers>().eq(Managers::getMemberId,managers.getMemberId())
-                .eq(Managers::getType,managers.getType())
-                .eq(Managers::getIsdeleted,Constants.ZERO)
-        );
-        if(model !=null){
-            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇ヤ汉鍛樹俊鎭凡璁剧疆锛屾棤闇�閲嶆柊娣诲姞");
+        List<Member> memberList = new ArrayList<>();
+        List<Integer> memberIdList = new ArrayList<>();
+
+        //璁剧疆鑼冨洿 0鐩村睘閮ㄩ棬鍛樺伐 1閮ㄩ棬鍙婂叾涓嬬骇甯冩仼鍛樺伐 2鎸囧畾浜哄憳
+        if(Constants.equalsInteger(managers.getIsMember(),Constants.ZERO) || Constants.equalsInteger(managers.getIsMember(),Constants.ONE)){
+            //鐩村睘閮ㄩ棬 鎴� 閮ㄩ棬鍙婂叾瀛愰儴闂�
+          /*  if(managers.getCompanyId() ==null ){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+            Company company = companyMapper.selectById(managers.getCompanyId());
+            if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝閮ㄩ棬淇℃伅涓嶅瓨鍦紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
+            }*/
+            if(managers.getCompanyIds() ==null  || managers.getCompanyIds().size() ==0 ){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+            memberList  =memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
+                    .selectAll(Member.class)
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .exists(Constants.equalsInteger(managers.getIsMember(),Constants.ZERO),"select (cm.id) from company_member cm where cm.company_id in ("+String.join(",",managers.getCompanyIds())+" ) and cm.member_id=t.id")
+//                    .exists(Constants.equalsInteger(managers.getIsMember(),Constants.ONE),"select (cm.id) from company_member cm where cm.company_id_path like '"+company.getIdPath()+"%'  and cm.member_id=t.id")
+            );
+        }else{
+            if(managers.getMemberIds()==null || managers.getMemberIds().size()==0){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜瑕佹眰閫夋嫨鎸囧畾鍛樺伐淇℃伅锛�");
+            }
+            memberList  =memberMapper.selectList(new LambdaQueryWrapper<Member>()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .in(Member::getId,managers.getMemberIds()));
+        }
+        if(memberList.size() ==0){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝閫夋嫨鑼冨洿鏈煡璇㈠埌鐩稿叧鍛樺伐淇℃伅锛屾娆¤缃棤鏁堬紒");
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        managers.setCreator(user.getId());
-        managers.setCreateDate(new Date());
-        managers.setIsdeleted(Constants.ZERO);
-        managers.setEditor(managers.getCreator());
-        managers.setEditDate(managers.getCreateDate());
-        managers.setStatus(Constants.ZERO);
-        managersMapper.insert(managers);
-        return managers.getId();
+
+        Date date = new Date();
+        for(Member m :memberList){
+            Managers mm = new Managers();
+            mm.setCreator(user.getId());
+            mm.setCreateDate(date);
+            mm.setIsdeleted(Constants.ZERO);
+            mm.setEditor(mm.getCreator());
+            mm.setEditDate(mm.getCreateDate());
+            mm.setStatus(Constants.ZERO);
+            mm.setType(managers.getType());
+            mm.setMemberId(m.getId());
+            mm.setIsQw(managers.getIsQw());
+            mm.setIsEmail(managers.getIsEmail());
+            mm.setRemark(managers.getRemark());
+            memberIdList.add(m.getId());
+            newList.add(mm);
+        }
+        //娓呯┖鍘熸湁鐨勮缃俊鎭�
+        managersMapper.delete(new UpdateWrapper<Managers>().lambda()
+                .eq(Managers::getType,managers.getType())
+                .in(Managers::getMemberId,memberIdList)
+        );
+        managersMapper.insert(newList);
+        return newList.size();
     }
 
     @Override
@@ -166,6 +217,7 @@
         queryWrapper.selectAll(Managers.class )
                 .selectAs(Member::getPhone,Managers::getMemberPhone)
                 .selectAs(Member::getName,Managers::getMemberName)
+                .selectAs(Member::getQwId,Managers::getMemberQwId)
                 .selectAs(Member::getEmail,Managers::getMemberEmail)
                 .selectAs(Member::getCompanyName,Managers::getCompanyName)
                 .selectAs(SystemUser::getUsername,Managers::getEditorName)
diff --git a/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index d81bb83..adde7de 100644
--- a/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -26,14 +26,19 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestHeader;
 
+import javax.annotation.Resource;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -45,8 +50,11 @@
  * @since 2025/04/02 17:49
  */
 @Service
+@Slf4j
 public class MemberServiceImpl implements MemberService {
 
+    @Resource(name="sessionRedisTemplate")
+    private RedisTemplate<Object, Serializable> redisTemplate;
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
     @Autowired
@@ -244,6 +252,7 @@
     }
 
     @Override
+    @Transactional
     public  void syncQwAll(){
         if(Constants.DEALING_MEMBER_SYNC){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍚屾浠诲姟姝e湪杩涜锛岃绋嶅悗鍒锋柊椤甸潰閲嶈瘯锛�");
@@ -261,15 +270,20 @@
             LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
             Date date = new Date();
             List<QywxUserListResponse>  list = new ArrayList<>();
+            int index =0;
             for(Company c : companyList){
                 List<QywxUserListResponse> tList =   QywxUtil.getUserList(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),c.getQwId());
                 if(tList!=null){
+                    log.error((index++)+"==============="+c.getName()+"============浜哄憳鏁伴噺锛�"+tList.size());
                     list.addAll(tList);
+                }else{
+                    log.error((index++)+"==============="+c.getName()+"============浜哄憳鏁伴噺锛�0");
                 }
             }
             if(list == null || list.size() ==0){
                 throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍缁勭粐淇℃伅锛�");
             }
+            log.error( "###################=================浜哄憳鎬绘暟閲忥細"+list.size());
             List<Member>  memberList = memberMapper.selectList(new LambdaQueryWrapper<Member>().eq(Member::getIsdeleted,Constants.ZERO));
             List<Member>  newList = new ArrayList<>();
             List<Member>  updateList = new ArrayList<>();
@@ -304,7 +318,7 @@
                         if(StringUtils.isNotBlank(comNames)){
                             comNames += ",";
                         }
-                        comNames += c.getNamePath();
+                        comNames += StringUtils.defaultString(c.getNamePath(),c.getName());
                     }
                 }
                 cm.setCompanyList(qycom);
diff --git a/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
index 1b6ba87..5ddb640 100644
--- a/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -94,6 +94,7 @@
         //澶勭悊SHE浜嬩欢鐘舵��
         Constants.WorkOrderStatus  workOrderStatus = Constants.equalsInteger(workorder.getType(),Constants.ZERO)?Constants.WorkOrderStatus.close:Constants.WorkOrderStatus.waitConfirm;
         workorder.setStatus(workOrderStatus.getKey());
+        workorder.setSheDealUserQwIds(workorder.getQwnoticeMemberIds());
         workorderMapper.insert(workorder);
 
         //瀛樺偍DCA 闂璁板綍琛�
@@ -185,8 +186,11 @@
         }else{
             textCard.setTitle(Constants.equalsInteger(workorder.getType(),Constants.ONE)?"銆怐CA涓婃姤銆�":"銆愯穼缁婃粦椋庨櫓涓婃姤銆�");
             if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
-                message = message + " <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"绯荤粺") + (Constants.equalsInteger(contentType,Constants.ZERO)?"浠诲姟鍒嗛厤缁欎綘":(Constants.equalsInteger(contentType,Constants.ONE)?"瀵硅宸ュ崟杩涜浜嗗偓淇冿紝璇峰敖蹇鐞�":"浠诲姟宸插鐞�")) +"</div>";
+                message = message + " <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"绯荤粺") + (Constants.equalsInteger(contentType,Constants.ZERO)?"浠诲姟鍒嗛厤缁欎綘":(Constants.equalsInteger(contentType,Constants.ONE)?"瀵硅宸ュ崟杩涜浜嗗偓淇冿紝璇峰敖蹇鐞�":((Constants.equalsInteger(contentType,Constants.TWO)?"鎶勯�佺粰浣�":"浠诲姟宸插鐞�")))) +"</div>";//:"浠诲姟宸插鐞�")) +"</div>";
                 message = message + " <div class=\"normal\">"+  DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") +"/"+ workorder.getLocationName() +"/"+  categoryName+"</div>";
+                if(Constants.equalsInteger(contentType,Constants.TWO)){
+                    message = message + "  <div class=\"normal\">璇存槑    "+ csInfo +"</div>";
+                }
             }else{
                 message = message + "  <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"绯荤粺") + (Constants.equalsInteger(contentType,Constants.ZERO)?"浠诲姟鍒嗛厤缁欎綘":(Constants.equalsInteger(contentType,Constants.ONE)?"瀵硅宸ュ崟杩涜浜嗗偓淇冿紝璇峰敖蹇鐞�":((Constants.equalsInteger(contentType,Constants.TWO)?"鎶勯�佺粰浣�":"宸插鐞嗕竴椤�")))) +"</div>";
                 message = message + "  <div class=\"normal\">瑙傚療涓婚  "+ categoryName +"</div>";
@@ -269,6 +273,7 @@
                     dcaWorkOrder.setEventInfo(dcaNoProblemDTO.getEventInfo());
                     dcaWorkOrder.setQwnoticeMemberIds(workorder.getQwnoticeMemberIds());
                     dcaWorkOrder.setMemberNames(workorder.getMemberNames());
+                    dcaWorkOrder.setSheDealUserQwIds(dcaWorkOrder.getQwnoticeMemberIds());
                     workorderMapper.insert(dcaWorkOrder);
                     //瀛樺偍鏃ュ織
                     this.dealLogData(dcaWorkOrder,workOrderStatus);
@@ -443,7 +448,7 @@
             if(Objects.isNull(workorder.getMemberType())
                     || Objects.isNull(workorder.getOutJiuyi())
                     || (Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ZERO) && Objects.isNull(workorder.getIsYiwushi()))
-                    || (Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ZERO) && Objects.isNull(workorder.getIsHurted()))
+                    || (Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ZERO) && Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ZERO) && Objects.isNull(workorder.getIsHurted()))
                     || Objects.isNull(workorder.getWorkRelated())
                     || (Constants.equalsInteger(workorder.getMemberType(),Constants.TWO) && StringUtils.isEmpty(workorder.getMemberNames()))
                     || (Constants.equalsInteger(workorder.getMemberType(),Constants.ONE) && StringUtils.isEmpty(workorder.getMemberQwids()))
@@ -502,10 +507,12 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
 
+        workorder.setStatusName(Constants.WorkOrderStatus.getStatusName(workorder.getStatus()));
         this.dealButton(workorder,member);
         //鏌ヨ闄勪欢淇℃伅
         List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
-                .eq(Multifile::getObjId,workorder.getId()).orderByAsc(Multifile::getId));
+                .eq(Multifile::getObjType,Constants.multiFileType.upload)
+                .eq(Multifile::getObjId,workorder.getId().toString()).orderByAsc(Multifile::getId));
         String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                 +systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
 
@@ -527,6 +534,7 @@
             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dcaChildList)){
                 for (Workorder dcaChild:dcaChildList) {
                     this.dealButton(dcaChild,member);
+                    dcaChild.setStatusName(Constants.WorkOrderStatus.getStatusName(dcaChild.getStatus()));
                 }
                 workorder.setManagerId(dcaChildList.stream().filter(i->Objects.nonNull(i.getManagerId())).map(i->i.getManagerId()).collect(Collectors.joining(",")));
             }
@@ -543,7 +551,7 @@
             if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getQwnoticeMemberIds())&&
                     (Constants.equalsInteger(workorder.getStatus(),Constants.ZERO)||
                             Constants.equalsInteger(workorder.getStatus(),Constants.ONE)||Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
-                closeUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
+                closeUserList.addAll(Arrays.asList(workorder.getSheDealUserQwIds().split(",")));
             }
             if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getManagerId())&&
                     (Constants.equalsInteger(workorder.getStatus(),Constants.ONE)||Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
@@ -560,7 +568,7 @@
             //寰呭垎閰嶇姸鎬� 澶勭悊杞氦鎸夐挳
             if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())
             ){
-                passOnUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
+                passOnUserList.addAll(Arrays.asList(workorder.getSheDealUserQwIds().split(",")));
             }
             if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())
                 || Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey())
@@ -777,7 +785,13 @@
         Utils.MP.blankToNull(pageWrap.getModel());
         pageWrap.getModel().setIsdeleted(Constants.ZERO);
         MPJLambdaWrapper<Workorder> queryWrapper = getJoinQueryMapper(pageWrap.getModel());
-        return PageData.from(workorderMapper.selectJoinPage(page,Workorder.class, queryWrapper));
+        PageData<Workorder> result = PageData.from(workorderMapper.selectJoinPage(page,Workorder.class, queryWrapper));
+        if(result!=null && result.getRecords()!=null){
+            for(Workorder w : result.getRecords()){
+                w.setStatusName(Constants.WorkOrderStatus.getStatusName(w.getStatus()));
+            }
+        }
+        return result;
     }
 
     @Override
@@ -839,7 +853,7 @@
         //鎻愪氦鍚庣殑 寰呯‘璁�/寰呭垵瀹$姸鎬� 濡傛灉鍘诲叧闂� 鍙湁宸ュ崟閲岀粦瀹氱殑SHE浜哄憳鍙互鍏抽棴
         if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
             //鍒ゆ柇SHE浜哄憳鍐呮槸鍚︽湁褰撳墠鐧诲綍璐﹀彿
-            if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO){
+            if(workorder.getSheDealUserQwIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝褰撳墠宸ュ崟闈炴偍鐨勫伐鍗曪紝鏃犳硶杩涜澶勭悊");
             }
             workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey());
@@ -847,12 +861,12 @@
             qwIds.remove(closeDTO.getMember().getQwId());
         }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
             //鍒ゆ柇SHE浜哄憳鍐呮槸鍚︽湁褰撳墠鐧诲綍璐﹀彿
-            if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO &&  !workorder.getManagerId().equals(closeDTO.getMember().getQwId())){
+            if(workorder.getSheDealUserQwIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO &&  !workorder.getManagerId().equals(closeDTO.getMember().getQwId())){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝褰撳墠宸ュ崟闈炴偍鐨勫伐鍗曪紝鏃犳硶杩涜澶勭悊");
             }
             if(workorder.getManagerId().equals(closeDTO.getMember().getQwId())){
                 workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey());
-            }else if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())>Constants.ZERO){
+            }else if(workorder.getSheDealUserQwIds().indexOf(closeDTO.getMember().getQwId())>Constants.ZERO){
                 workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey());
             }else{
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝褰撳墠宸ュ崟闈炴偍鐨勫伐鍗曪紝鏃犳硶杩涜澶勭悊");
@@ -862,7 +876,7 @@
             qwIds.remove(closeDTO.getMember().getQwId());
         }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey())){
             //鍒ゆ柇SHE浜哄憳鍐呮槸鍚︽湁褰撳墠鐧诲綍璐﹀彿
-            if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO &&  !workorder.getManagerId().equals(closeDTO.getMember().getQwId())
+            if(workorder.getSheDealUserQwIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO &&  !workorder.getManagerId().equals(closeDTO.getMember().getQwId())
                     &&  !workorder.getDealerId().equals(closeDTO.getMember().getQwId()) ){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝褰撳墠宸ュ崟闈炴偍鐨勫伐鍗曪紝鏃犳硶杩涜澶勭悊");
             }
@@ -870,7 +884,7 @@
                 workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey());
             }else if(workorder.getDealerId().equals(closeDTO.getMember().getQwId())){
                 workorder.setStatus(Constants.WorkOrderStatus.close.getKey());
-            }else if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())>Constants.ZERO){
+            }else if(workorder.getSheDealUserQwIds().indexOf(closeDTO.getMember().getQwId())>Constants.ZERO){
                 workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey());
             }else{
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝褰撳墠宸ュ崟闈炴偍鐨勫伐鍗曪紝鏃犳硶杩涜澶勭悊");
@@ -947,12 +961,20 @@
             if(!Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"宸ュ崟鐘舵�佸凡娴佽浆");
             }
+            if(workorder.getSheDealUserQwIds().indexOf(passOnDTO.getMember().getQwId())<Constants.ZERO){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝闈炲甫鎮ㄥ鐞嗙殑宸ュ崟锛屾棤娉曡繘琛岃鎿嶄綔");
+            }
             workorder.setManagerId(member.getQwId());
             workorder.setStatus(Constants.WorkOrderStatus.waitAllocation.getKey());
+            workorder.setSheDealUserQwIds(passOnDTO.getMember().getQwId());
+            
         }else{
             if(!(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())
                 || Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey()))){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"宸ュ崟鐘舵�佸凡娴佽浆");
+            }
+            if(!workorder.getManagerId().equals(passOnDTO.getMember().getQwId())){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝闈炲甫鎮ㄥ鐞嗙殑宸ュ崟锛屾棤娉曡繘琛岃鎿嶄綔");
             }
             workorder.setDealerId(member.getQwId());
             workorder.setStatus(Constants.WorkOrderStatus.waitDeal.getKey());
@@ -1064,6 +1086,7 @@
               status = 2;
               info ="鏃犳晥鍛樺伐淇℃伅锛屾棤娉曞彂閫侀偖绠�";
         }else{
+            //閭宸插彂閫侊細鎴愬姛锛歔"姹熻悕閭jp@doumee.com"]澶辫触锛歔"姹熻悕/鏃犻偖绠�","鎴村己寮�/閭null","閮檯鏂囨/閭null"]
             List<String>    successInfo = new ArrayList<>();
             List<String> errorInfo = new ArrayList<>();
             Map<String,String> contentForm = getEmailContentFormByModel(workorder);
diff --git a/server/src/main/java/com/doumee/service/common/EmailService.java b/server/src/main/java/com/doumee/service/common/EmailService.java
index e511c37..ef2916c 100644
--- a/server/src/main/java/com/doumee/service/common/EmailService.java
+++ b/server/src/main/java/com/doumee/service/common/EmailService.java
@@ -1,5 +1,6 @@
 package com.doumee.service.common;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -14,6 +15,7 @@
 import java.util.Map;
 
 @Service
+@Slf4j
 public class EmailService {
     @Autowired
     private JavaMailSender javaMailSender;//娉ㄥ叆JavaMailSender
@@ -44,6 +46,7 @@
                 }
             }
     public boolean sendEmailWithImages(String toEmail, String title, Map<String,String> contentForm, List<String> imgList) {
+        log.error("閭欢寮�濮嬪彂閫�============"+toEmail);
         try {
                 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
                 context.refresh();
@@ -66,13 +69,15 @@
                         content += "<a href='"+f+"' target='blank'><img style='width:200px;margin:5px' src='"+f+"'/></a>";
                     }
                 }
-            content += "</div></body><html>";
-            helper.setText(content,true);
-            javaMailSender.send(message);
-                    System.out.println("閭欢鍙戦�佹垚鍔燂紒");
-                    return true;
+                content += "</div></body><html>";
+                helper.setText(content,true);
+                log.error("閭欢鍐呭============"+content);
+                javaMailSender.send(message);
+                log.error("閭欢鍙戠敓鎴愬姛============");
+                return true;
             } catch (Exception e) {
             e.printStackTrace();
+            log.error("閭欢鍙戠敓鎴愬姛============"+e.getMessage());
                     return false;
                 }
             }
diff --git a/server/src/main/java/com/doumee/service/system/SystemDictService.java b/server/src/main/java/com/doumee/service/system/SystemDictService.java
index e8091a9..5910dcd 100644
--- a/server/src/main/java/com/doumee/service/system/SystemDictService.java
+++ b/server/src/main/java/com/doumee/service/system/SystemDictService.java
@@ -5,6 +5,7 @@
 import com.doumee.dao.system.dto.QuerySystemDictDTO;
 import com.doumee.dao.system.model.SystemDict;
 import com.doumee.dao.system.vo.SystemDictListVO;
+import com.doumee.dao.system.vo.SystemQrcodeListVO;
 
 import java.util.List;
 
@@ -90,4 +91,6 @@
      * @return long
      */
     long count(SystemDict systemDict);
+
+    List<SystemQrcodeListVO> qrcodeList(QuerySystemDictDTO pageWrap);
 }
diff --git a/server/src/main/java/com/doumee/service/system/impl/SystemDictServiceImpl.java b/server/src/main/java/com/doumee/service/system/impl/SystemDictServiceImpl.java
index d0e044f..6f46c50 100644
--- a/server/src/main/java/com/doumee/service/system/impl/SystemDictServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/system/impl/SystemDictServiceImpl.java
@@ -1,5 +1,10 @@
 package com.doumee.service.system.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.doumee.core.constants.Constants;
+import com.doumee.dao.system.SystemDictDataMapper;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.vo.SystemQrcodeListVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.doumee.core.model.PageData;
@@ -11,11 +16,13 @@
 import com.doumee.service.system.SystemDictService;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.commons.lang3.StringUtils;
 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.ArrayList;
 import java.util.List;
 
 /**
@@ -28,6 +35,8 @@
 
     @Autowired
     private SystemDictMapper systemDictMapper;
+    @Autowired
+    private SystemDictDataMapper systemDictDataMapper;
 
     @Override
     public Integer create(SystemDict systemDict) {
@@ -88,6 +97,31 @@
         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
         return PageData.from(new PageInfo<>(systemDictMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause())));
     }
+    @Override
+    public List<SystemQrcodeListVO> qrcodeList(QuerySystemDictDTO pageWrap) {
+        List<SystemQrcodeListVO> list = new ArrayList<>();
+        SystemDict dict =systemDictMapper.selectOne(new LambdaQueryWrapper<SystemDict>().
+                eq(SystemDict::getCode,Constants.QRCODE_URLS)
+                .last("limit 1")) ;
+        if(dict!=null){
+            List<SystemDictData> dataList = systemDictDataMapper.selectList(new LambdaQueryWrapper<SystemDictData>().
+                    eq(SystemDictData::getDictId,dict.getId()))   ;
+            if(dataList!=null && dataList.size()>0){
+                for(SystemDictData data :dataList){
+                    SystemQrcodeListVO t = new SystemQrcodeListVO();
+                    t.setId(data.getId()+"");
+                    t.setName(data.getRemark());
+                    t.setUrl(data.getCode());
+                    if(StringUtils.equals(data.getLabel(),Constants.SHE_QRCODES_URL)
+                            ||StringUtils.equals(data.getLabel(),Constants.DCA_QRCODES_URL)
+                            ||StringUtils.equals(data.getLabel(),Constants.DBH_QRCODES_URL)){
+                        list.add(t);
+                    }
+                }
+            }
+        }
+        return list;
+    }
 
     @Override
     public long count(SystemDict systemDict) {
diff --git a/server/src/main/resources/application-dev.yml b/server/src/main/resources/application-dev.yml
index a478110..6d7ebf6 100644
--- a/server/src/main/resources/application-dev.yml
+++ b/server/src/main/resources/application-dev.yml
@@ -1,4 +1,9 @@
-# WEB鏈嶅姟鍣ㄩ厤缃�
+project:
+  # 鐜锛岀敓浜х幆澧僷roduction锛屽紑鍙戠幆澧僤evelopment
+  env: development
+  # 妯″紡锛宼esting娴嬭瘯妯″紡
+  mode: testing
+
 server:
   port: 10010
 spring:
@@ -37,9 +42,13 @@
 #            enable: true
 #            required: true
   mail:
-    host: smtp.exmail.qq.com
-    username: jp@doumee.com
-    password: 2Jz9HFW2U7vRnCRu
+#    host: smtp.exmail.qq.com
+#    username: jp@doumee.com
+#    password: 2Jz9HFW2U7vRnCRu
+    host: smtp.aliyun.com
+    port: 80
+    username: lkshereport@mail.unilever-china.com
+    password: f2fLk384RChX
     default-encoding: UTF-8
     properties:
       mail:
diff --git a/server/src/main/resources/application-pro.yml b/server/src/main/resources/application-pro.yml
index 4648eb0..03db8dd 100644
--- a/server/src/main/resources/application-pro.yml
+++ b/server/src/main/resources/application-pro.yml
@@ -1,13 +1,17 @@
-# WEB鏈嶅姟鍣ㄩ厤缃�
+project:
+  # 鐜锛岀敓浜х幆澧僷roduction锛屽紑鍙戠幆澧僤evelopment
+  env: production
+  # 妯″紡锛宼esting娴嬭瘯妯″紡
+  mode: production
 server:
-  port: 10010
+  port: 10040
 
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/lianhelihua_sh?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: doumee
-    password: rtjgfEr@&0c0m
+    url: jdbc:mysql://solution-cnn3-p-shereport-db-mysql01.mysql.database.chinacloudapi.cn:3306/lianhelihua?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    username: service_account
+    password: vW3&QbcdMSyF
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
   redis:
@@ -19,44 +23,64 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
+  #  mail:
+  #    username: jiangping0849@outlook.com
+  #    password: mwzaislgioyhxnig
+  #    host: smtp-mail.outlook.com
+  #    port: 587
+  #    default-encoding: UTF-8
+  #    properties:
+  #      mail:
+  #        debug: true
+  #        smtp:
+  #          ssl:
+  #            socketFactory:
+  #              class: com.sun.mail.util.MailSSLSocketFactory
+  #              fallback: false
+  #          auth: true
+  #          starttls:
+  #            enable: true
+  #            required: true
   mail:
-    host: smtp.aliyun.com
-    port: 465
-    username: your_email@aliyun.com
-    password: your_password
+    host: smtpdm.aliyun.com
+    username: lkshereport@mail.unilever-china.com
+    password: f2fLk384RChX
+    default-encoding: UTF-8
+    port: 80
     properties:
       mail:
         smtp:
           auth: true
-          starttls:
-            enable: true
-            required: true
-          ssl:
-            enable: true
+        starttls:
+          enable: true
+          required: true
 
 debug_model: true
 
 # Swagger閰嶇疆
 swagger:
-  host: 127.0.0.1
+  host:
   title: ${project.name}鎺ュ彛鏂囨。
   description: ${project.name}鎺ュ彛鏂囨。
+  # 鍚敤Swagger锛岀敓浜х幆澧冨缓璁叧闂�
   enabled: true
-  context-path: 
+  # 鍚敤swagger鍔犲瘑
+  enable-encrypt: true
   # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
   redirect-uri: /
 
-des_pwd: 123456SDFKDJF
 
+des_pwd: 123456SDFKDJF
 knife4j:
   enable: true
   basic:
     enable: true
     username: admin
-    password:
+    password: Doumee@168
+
 
 upload:
   type: blob
 
 qiwei:
-  serviceurl: https://wecom-qyapi.unilever-china.com/
\ No newline at end of file
+  serviceurl: https://wecom-qyapi.unilever-china.com
\ No newline at end of file
diff --git a/server/src/main/resources/application-test.yml b/server/src/main/resources/application-test.yml
index 33ca68c..a8452a4 100644
--- a/server/src/main/resources/application-test.yml
+++ b/server/src/main/resources/application-test.yml
@@ -1,13 +1,17 @@
-# WEB鏈嶅姟鍣ㄩ厤缃�
+project:
+  # 鐜锛岀敓浜х幆澧僷roduction锛屽紑鍙戠幆澧僤evelopment
+  env: production
+  # 妯″紡锛宼esting娴嬭瘯妯″紡
+  mode: production
 server:
   port: 10040
 
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://112.26.66.25:3306/lianhelihua_sh?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: root
-    password: Doumee@168&QWERT
+    url: jdbc:mysql://solution-cnn3-d-shereport-db-mysql01.mysql.database.chinacloudapi.cn:3306/lianhelihua?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    username: service_account
+    password: yP5@jJzqME63
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
   redis:
@@ -38,10 +42,11 @@
 #            enable: true
 #            required: true
   mail:
-    host: smtp.exmail.qq.com
-    username: jp@doumee.com
-    password: 2Jz9HFW2U7vRnCRu
+    host: smtpdm.aliyun.com
+    username: lkshereport@mail.unilever-china.com
+    password: f2fLk384RChX
     default-encoding: UTF-8
+    port: 80
     properties:
       mail:
         smtp:
@@ -78,4 +83,4 @@
   type: blob
 
 qiwei:
-  serviceurl: https://qyapi.weixin.qq.com
\ No newline at end of file
+  serviceurl: https://wecom-qyapiqa.unilever-china.com
\ No newline at end of file
diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml
index d119626..56828b2 100644
--- a/server/src/main/resources/application.yml
+++ b/server/src/main/resources/application.yml
@@ -2,14 +2,10 @@
 project:
   name: 鑱斿悎鍒╁崕浜嬩欢涓婃姤绯荤粺
   version: 1.0.0
-  # 鐜锛岀敓浜х幆澧僷roduction锛屽紑鍙戠幆澧僤evelopment
-  env: development
-  # 妯″紡锛宼esting娴嬭瘯妯″紡
-  mode: testing
 
 spring:
   profiles:
-    active: test
+    active: pro
   # JSON杩斿洖閰嶇疆
   jackson:
     # 榛樿鏃跺尯
@@ -33,6 +29,8 @@
   configuration:
     map-underscore-to-camel-case: true
     log-impl: com.doumee.config.mybatis.DmStdOutImpl
+#    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+#    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
 
 
 # 缂撳瓨鍐呭璁剧疆
@@ -60,7 +58,7 @@
 
 # 鏃ュ織閰嶇疆
 logback:
-  level: INFO
+  level: ERROR
   appender: ${project.env}
 # dao灞傜殑鏃ュ織璁剧疆涓篸ebug锛屾柟渚挎煡鐪媠ql
 logging:
@@ -70,7 +68,7 @@
     com.doumee.dao.system.SystemJobListMapper: ERROR
     com.doumee.dao.system.SystemJobSnippetMapper: ERROR
     com.doumee.dao.system.SystemJobLogMapper: ERROR
-    com.doumee.dao.business: DEBUG
+    com.doumee.dao.business: ERROR
 auth:
   jwt:
     enabled: true   #鏄惁寮�鍚疛WT鐧诲綍璁よ瘉鍔熻兘
diff --git a/server/src/main/resources/logback-spring.xml b/server/src/main/resources/logback-spring.xml
index edf1ef5..d1fb653 100644
--- a/server/src/main/resources/logback-spring.xml
+++ b/server/src/main/resources/logback-spring.xml
@@ -5,7 +5,7 @@
             <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
         </layout>
     </appender>
-    <property name="log.path" value="/usr/local/jars/lianhelihua_sh/logs"></property>
+    <property name="log.path" value="/data/jars/lianhelihua/logs"></property>
     <property name="log.fileSize" value="100MB"></property>
     <property name="log.historyDays" value="7"></property>
     <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
diff --git a/startsh/admin_start.sh b/startsh/admin_start.sh
index 298bc5c..f7a6ab3 100644
--- a/startsh/admin_start.sh
+++ b/startsh/admin_start.sh
@@ -4,4 +4,17 @@
 
 /usr/local/nacos/nacos/bin/startup.sh -m standalone
 
-nohup java -jar /usr/local/jars/lianhelihua_sh/lianhelihua.jar > /dev/null 2>&1 &
\ No newline at end of file
+nohup java -jar /usr/local/jars/lianhelihua_sh/lianhelihua.jar > /dev/null 2>&1 &
+
+
+
+
+//UAT鐜鎵ц鍛戒护
+sudo chown root:root lianhelihua.jar
+sudo chmod 777  lianhelihua.jar
+mv /home/service_account/lianhelihua.jar /data/jars/lianhelihua/
+sudo   java -jar /data/jars/lianhelihua/lianhelihua.jar
+nohup java -jar /data/jars/lianhelihua/lianhelihua.jar > /dev/null 2>&1 &
+
+cd  /data/jars/lianhelihua/logs
+tail -f /data/jars/lianhelihua/logs/info.2025-05-19.1.log
\ No newline at end of file

--
Gitblit v1.9.3