From 49ecdc73115d94e343cbe271c154fe32e8888c7d Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 23 五月 2024 14:42:09 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java                       |   13 
 admin/src/api/system/role.js                                                                                      |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java                   |   18 
 server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java                                      |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java                       |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java         |   97 ++
 admin/package-lock.json                                                                                           |  182 ++--
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java                             |   32 
 server/visits/dmvisit_service/pom.xml                                                                             |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java           |   59 +
 server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml                                   |   27 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java                     |    4 
 admin/src/components/system/role/OperaSystemRoleDataWindow.vue                                                    |  198 +++++
 server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java                           |   12 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java            |    6 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java                |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java                       |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java    |    1 
 server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java                             |   18 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java                            |   40 +
 admin/src/api/timer/timer.js                                                                                      |   31 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java               |   55 +
 server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java                                   |    4 
 server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java                        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java                         |    9 
 server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java                         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                        |    6 
 admin/src/views/timer/timer.vue                                                                                   |  168 ++++
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java           |  159 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java                       |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java         |   11 
 server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java                                 |   79 ++
 admin/src/views/system/role.vue                                                                                   |   25 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                          |  146 ++++
 server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java                         |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java                    |    3 
 server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java                         |    2 
 server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java                    |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java                       |    3 
 admin/.env.production                                                                                             |    2 
 admin/src/views/timer/components/OperaTimerWindow.vue                                                             |  106 +++
 server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java                                    |    2 
 server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java                                |   36 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java              |  238 ++++++
 server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java                                      |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java                 |   14 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java                    |   14 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java                   |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java         |   72 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java                       |    6 
 server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java                           |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java |   15 
 server/pom.xml                                                                                                    |    4 
 server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java                 |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java          |    2 
 server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java                                 |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java                  |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java               |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java                    |   29 
 admin/src/components/base/BaseTable.vue                                                                           |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java                       |   10 
 62 files changed, 1,862 insertions(+), 207 deletions(-)

diff --git a/admin/.env.production b/admin/.env.production
index 091b660..5e90ea5 100644
--- a/admin/.env.production
+++ b/admin/.env.production
@@ -1,4 +1,4 @@
 # 鐢熶骇鐜閰嶇疆
 NODE_ENV = 'production'
 
-VUE_APP_API_URL  = 'http://192.168.0.109:10010'
+VUE_APP_API_URL  = 'http://localhost:10010'
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 38c5cd6..b5dd877 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -1876,6 +1876,63 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "ssri": {
           "version": "8.0.1",
           "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1883,6 +1940,28 @@
           "dev": true,
           "requires": {
             "minipass": "^3.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
           }
         }
       }
@@ -1979,7 +2058,7 @@
     },
     "@wangeditor/basic-modules": {
       "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz",
       "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==",
       "requires": {
         "is-url": "^1.2.4"
@@ -1987,7 +2066,7 @@
     },
     "@wangeditor/code-highlight": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz",
       "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==",
       "requires": {
         "prismjs": "^1.23.0"
@@ -1995,7 +2074,7 @@
     },
     "@wangeditor/core": {
       "version": "1.1.19",
-      "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.19.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz",
       "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==",
       "requires": {
         "@types/event-emitter": "^0.3.3",
@@ -2008,7 +2087,7 @@
     },
     "@wangeditor/editor": {
       "version": "5.1.23",
-      "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.23.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz",
       "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==",
       "requires": {
         "@uppy/core": "^2.1.1",
@@ -2041,22 +2120,22 @@
     },
     "@wangeditor/list-module": {
       "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.5.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz",
       "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ=="
     },
     "@wangeditor/table-module": {
       "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.4.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz",
       "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w=="
     },
     "@wangeditor/upload-image-module": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz",
       "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA=="
     },
     "@wangeditor/video-module": {
       "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.4.tgz",
+      "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz",
       "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg=="
     },
     "@webassemblyjs/ast": {
@@ -3302,9 +3381,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001228",
-      "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001228.tgz?cache=0&sync_timestamp=1620658693631&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001228.tgz",
-      "integrity": "sha1-v9xZQs0zJvpR7gtC++9NqdSSp/o=",
+      "version": "1.0.30001621",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
+      "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==",
       "dev": true
     },
     "case-sensitive-paths-webpack-plugin": {
@@ -13868,87 +13947,6 @@
           "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
           "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
           "dev": true
-        }
-      }
-    },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.8.3",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
-      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
         }
       }
     },
diff --git a/admin/src/api/system/role.js b/admin/src/api/system/role.js
index ba65ae8..ccd0152 100644
--- a/admin/src/api/system/role.js
+++ b/admin/src/api/system/role.js
@@ -16,6 +16,10 @@
     trim: true
   })
 }
+// 鑾峰彇瑙掕壊鏁版嵁鏉冮檺
+export function findByRoleId (data) {
+  return request.post('visitsAdmin/cloudService/system/dataPermission/findByRoleId', data)
+}
 
 // 淇敼
 export function updateById (data) {
@@ -42,6 +46,9 @@
 export function createRolePermission (data) {
   return request.post('/visitsAdmin/cloudService/system/role/createRolePermission', data)
 }
+export function createRoleDataPermission (data) {
+  return request.post('/visitsAdmin/cloudService/system/role/createRoleDataPermission', data)
+}
 
 // 閰嶇疆鑿滃崟
 export function createRoleMenu (data) {
diff --git a/admin/src/api/timer/timer.js b/admin/src/api/timer/timer.js
new file mode 100644
index 0000000..def401d
--- /dev/null
+++ b/admin/src/api/timer/timer.js
@@ -0,0 +1,31 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/systemTimer/cloudService/business/quartz/page', data, {
+    trim: true
+  })
+}
+export function create (data) {
+  return request.post('/systemTimer/cloudService/business/quartz/create', data, {
+    trim: true
+  })
+}
+export function updateById (data) {
+  return request.post('/systemTimer/cloudService/business/quartz/updateById', data, {
+    trim: true
+  })
+}
+// 鏍规嵁ID鏌ヨ
+export function queryById (id) {
+  return request.get(`/systemTimer/cloudService/business/quartz/${id}`)
+}
+export function pauseById (id) {
+  return request.get(`/systemTimer/cloudService/business/quartz/pause/${id}`)
+}
+export function resumeById (id) {
+  return request.get(`/systemTimer/cloudService/business/quartz/resume/${id}`)
+}
+export function runOnceById (id) {
+  return request.get(`/systemTimer/cloudService/business/quartz/runOnce/${id}`)
+}
diff --git a/admin/src/components/base/BaseTable.vue b/admin/src/components/base/BaseTable.vue
index 6ddfb22..6df292f 100644
--- a/admin/src/components/base/BaseTable.vue
+++ b/admin/src/components/base/BaseTable.vue
@@ -156,7 +156,7 @@
               this.__afterDelete()
             })
             .catch(e => {
-              this.$tip.apiFailed(e)
+              // this.$tip.apiFailed(e)
             })
             .finally(() => {
               this.isWorking.delete = false
@@ -195,7 +195,7 @@
               this.__afterDelete(this.tableData.selectedRows.length)
             })
             .catch(e => {
-              this.$tip.apiFailed(e)
+              // this.$tip.apiFailed(e)
             })
             .finally(() => {
               this.isWorking.delete = false
diff --git a/admin/src/components/system/role/OperaSystemRoleDataWindow.vue b/admin/src/components/system/role/OperaSystemRoleDataWindow.vue
new file mode 100644
index 0000000..9528a0b
--- /dev/null
+++ b/admin/src/components/system/role/OperaSystemRoleDataWindow.vue
@@ -0,0 +1,198 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    width="60%"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <p class="tip">姝e湪涓鸿鑹层�� <em>{{role.name || '-'}}</em>銆� 閰嶇疆鏁版嵁鏉冮檺</p>
+    <p class="tip-warn"><i class="el-icon-warning"></i>鎻愰啋锛氭潈闄愰厤缃悗闇�閲嶆柊鐧诲綍鍚庣敓鏁�</p>
+    <el-form :model="form" ref="form" style="margin-top:15px">
+      <el-form-item label="鏉冮檺绫诲瀷锛�" prop="type">
+        <el-select v-model="form.type" clearable filterable placeholder="璇烽�夋嫨鏉冮檺绫诲瀷">
+          <el-option
+            v-for="(item, index) in options"
+            :key="index"
+            :label="item.name"
+            :value="item.id"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.type == 4" label="鑷畾涔夐儴闂細" prop="customData">
+        <el-cascader
+          :options="departments"
+          v-model="form.customData"
+          :props=defaultProps
+          clearable
+        ></el-cascader>
+      </el-form-item>
+
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { createRoleDataPermission } from '@/api/system/role'
+import { fetchList } from '@/api/business/company'
+  // import the styles
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+export default {
+  name: 'OperaSystemRoleWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      options: [
+        { name: '鍏ㄩ儴', id: 0 },
+        { name: '鎵�灞為儴闂ㄥ強涓嬪睘閮ㄩ棬', id: 1 },
+        { name: '鎵�灞為儴闂ㄥ強鍏跺瓙瀛欓儴闂�', id: 2 },
+        { name: '浠呮墍灞為儴闂�', id: 3 },
+        { name: '鑷畾涔夐儴闂�', id: 4 }
+      ],
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        businessCode: null,
+        createTime: null,
+        createUser: null,
+        customData: [],
+        id: null,
+        roleId: null,
+        type: 0
+      },
+      defaultProps: {
+        multiple: true,
+        checkStrictly: true,
+        // children: 'children',
+        label: 'name',
+        value: 'id',
+        emitPath: false
+      },
+      role:{},
+      departments: []
+    }
+  },
+  created () {
+    this.config({
+      api: '/system/role',
+      'field.id': 'id'
+    })
+    this.treeComList()
+  },
+  methods: {
+    // 閮ㄩ棬鏍戠姸缁撴瀯鏁版嵁
+    treeComList () {
+      fetchList()
+        .then(res => {
+          // this.departments = this.tree([res])
+          this.departments =this.newTree(res)
+        })
+    },
+    open (title, target,role) {
+      // console.log(title, target)
+      this.title = title
+      this.visible = true
+      this.role=role
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        console.log(target);
+        if (target.customData === undefined ||target.customData === null || target.customData === '') {
+          this.form.customData = []
+        } else {
+          const customD  = this.form.customData.split(',')
+          this.form.customData = customD.map((item) => { return parseInt(item) })
+        }
+      })
+    },
+    newTree(tree) {
+      if(tree ==null){
+        return []
+      }
+      return tree.map(item => {
+        let newItem = {...item}
+        if(newItem){
+          newItem.children=newItem.childList
+        }
+        if (item.children && item.children.length == 0) {
+          this.$delete( newItem, 'children' )
+        } else {
+          newItem.children = this.newTree(newItem.children)
+        }
+        return newItem
+      });
+    },
+    __confirmCreate () {
+      // console.log(JSON.stringify(this.form.customData));
+      // return
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+
+        this.isWorking = true
+        let data = JSON.parse(JSON.stringify(this.form))
+        if (this.form.type === 4) {
+          data.customData = this.form.customData.join(',')
+        } else {
+          data.customData = ''
+        }
+        createRoleDataPermission(data)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('鏂板缓鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
+    __confirmEdit () {
+      // console.log(JSON.stringify(this.form.customData));
+      // return
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏇存柊鎺ュ彛
+        this.isWorking = true
+        let data = JSON.parse(JSON.stringify(this.form))
+        if (this.form.type === 4) {
+          data.customData = this.form.customData.join(',')
+        } else {
+          data.customData = ''
+        }
+        createRoleDataPermission(data)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('淇敼鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/system/role.vue b/admin/src/views/system/role.vue
index 91cf09e..cfb8d9d 100644
--- a/admin/src/views/system/role.vue
+++ b/admin/src/views/system/role.vue
@@ -40,13 +40,14 @@
         </el-table-column>
         <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" min-width="140px"></el-table-column>
         <el-table-column
-          v-if="containPermissions(['system:role:update', 'system:role:createRolePermission', 'system:role:createRoleMenu', 'system:role:delete'])"
+          v-if="containPermissions(['system:role:update', 'system:role:createRolePermission','system:datapermission:create', 'system:role:createRoleMenu', 'system:role:delete'])"
           label="鎿嶄綔"
           min-width="270"
           fixed="right"
         >
           <template v-if="isAdmin || (row.code !== adminCode && userInfo.roles.findIndex(code => code === row.code) === -1)" slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaRoleWindow.open('缂栬緫瑙掕壊', row)" icon="el-icon-edit" v-permissions="['system:role:update']">缂栬緫</el-button>
+            <el-button type="text" @click="$refs.operaRoleWindow.open('缂栬緫瑙掕壊', row)"   v-permissions="['system:role:update']">缂栬緫</el-button>
+            <el-button type="text" @click="setData(row)" v-permissions="['system:datapermission:create']">鏁版嵁鏉冮檺</el-button>
             <el-button type="text" @click="$refs.permissionConfigWindow.open(row)" v-permissions="['system:role:createRolePermission']">閰嶇疆鏉冮檺</el-button>
             <el-button type="text" @click="$refs.menuConfigWindow.open(row)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">鎺堟潈鑿滃崟</el-button>
             <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['system:role:delete']">鍒犻櫎</el-button>
@@ -65,6 +66,7 @@
     <PermissionConfigWindow ref="permissionConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
     <!-- 鎺堟潈鑿滃崟 -->
     <MenuConfigWindow ref="menuConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
+    <OperaSystemRoleDataWindow  ref="OperaSystemRoleDataWindow"  @success="handlePageChange(tableData.pagination.pageIndex)"    />
   </TableLayout>
 </template>
 
@@ -75,10 +77,12 @@
 import OperaRoleWindow from '@/components/system/role/OperaRoleWindow'
 import PermissionConfigWindow from '@/components/system/role/PermissionConfigWindow'
 import MenuConfigWindow from '@/components/system/role/MenuConfigWindow'
+import OperaSystemRoleDataWindow from '@/components/system/role/OperaSystemRoleDataWindow'
+import { findByRoleId } from '@/api/system/role'
 export default {
   name: 'SystemRole',
   extends: BaseTable,
-  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, Pagination },
+  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, OperaSystemRoleDataWindow, Pagination },
   data () {
     return {
       // 鎼滅储
@@ -99,6 +103,21 @@
       }]
     })
     this.search()
+  },
+  methods: {
+    setData (row) {
+      findByRoleId({ roleId: row.id })
+        .then(res => {
+          if (!res) {
+            this.$refs.OperaSystemRoleDataWindow.open('鏁版嵁鏉冮檺', { roleId: row.id },row)
+          } else {
+            this.$refs.OperaSystemRoleDataWindow.open('鏁版嵁鏉冮檺', res,row)
+          }
+        })
+        .catch(err => {
+          this.$tip.error(err)
+        })
+    }
   }
 }
 </script>
diff --git a/admin/src/views/timer/components/OperaTimerWindow.vue b/admin/src/views/timer/components/OperaTimerWindow.vue
new file mode 100644
index 0000000..f3e8b6d
--- /dev/null
+++ b/admin/src/views/timer/components/OperaTimerWindow.vue
@@ -0,0 +1,106 @@
+<template>
+  <GlobalAlertWindow
+    v-loading="isUploading"
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�">
+      <el-form-item label="Bean鍚嶇О" prop="beanName">
+        <el-input v-model="form.beanName" placeholder="璇疯緭鍏ean鍚嶇О" :maxlength="10" v-trim/>
+      </el-form-item>
+      <el-form-item label="妯″潡鍚嶇О" prop="module">
+        <el-input v-model="form.module" placeholder="璇疯緭鍏ユā鍧楀悕绉�" :maxlength="10" v-trim/>
+      </el-form-item>
+      <el-form-item label="Cron琛ㄨ揪寮�" prop="cronExpres">
+        <el-input v-model="form.cronExpres" placeholder="璇疯緭鍏ron琛ㄨ揪寮�" :maxlength="10" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" :maxlength="10" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎵ц鍙傛暟" prop="params">
+        <el-input v-model="form.params" type="textarea" placeholder="璇疯緭鍏ユ墽琛屽弬鏁�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalAlertWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+export default {
+  name: 'OperaTimerWindow',
+  extends: BaseOpera,
+  components: { GlobalAlertWindow },
+  data () {
+
+    return {
+      isUploading: false,
+      uploadData: {
+        folder: 'projects'
+      },
+      timeRange: ['', ''],
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        beanName: null,
+        params: null,
+        createTime: null,
+        module: '',
+        remark: '' ,
+        cronExpres: ''
+
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        beanName: [
+          { required: true, message: '璇疯緭鍏ean鍚嶇О', tigger: 'blur' }
+        ],
+        module: [
+          { required: true, message: '璇疯緭鍏ユā鍧楀悕绉�', tigger: 'blur' }
+        ],
+        cronExpres: [
+          { required: true, message: '璇疯緭鍏ron琛ㄨ揪寮�', tigger: 'blur' }
+        ]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/timer/timer',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+     open (title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/style/alertstyle.scss";
+
+</style>
diff --git a/admin/src/views/timer/timer.vue b/admin/src/views/timer/timer.vue
new file mode 100644
index 0000000..9dccf33
--- /dev/null
+++ b/admin/src/views/timer/timer.vue
@@ -0,0 +1,168 @@
+<template>
+  <TableLayout :permissions="['business:devices:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="Bean鍚嶇О" prop="beanName">
+        <el-input v-model="searchForm.beanName" placeholder="璇疯緭鍏ュ彂甯冧汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="妯″潡鍚嶇О" prop="module">
+        <el-input v-model="searchForm.module" placeholder="璇疯緭鍏ュ彂甯冧汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:devices:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> -->
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:quartz:create']">
+        <li><el-button type="primary" @click="$refs.OperaTimerWindow.open('鏂板缓浠诲姟')" icon="el-icon-plus" v-permissions="['business:devices:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        border
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="index" prop="index" label="搴忓彿" align="center" min-width="50px"></el-table-column>
+        <el-table-column prop="beanName" label="BEAN鍚嶇О" align="center" min-width="150px"></el-table-column>
+        <el-table-column prop="module" label="妯″潡鍚嶇О" align="center" min-width="180px"></el-table-column>
+        <el-table-column prop="params" label="鎵ц鍙傛暟" align="center" min-width="180px"></el-table-column>
+        <el-table-column prop="state" label="鐘舵��" align="center" min-width="100px">
+          <template slot-scope="{row}">
+              <span v-if="row.state ==1" style="color:green">姝e父</span>
+              <span v-if="row.state ==2" style="color: red">鏆傚仠</span>
+              <span v-if="row.state ==3" style="color: red">宸插垹闄�</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="cronExpres" label="琛ㄨ揪寮�" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" align="center" min-width="180px"></el-table-column>
+        <el-table-column prop="remark" label="澶囨敞" align="center" min-width="180px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:quartz:update'])"
+          label="鎿嶄綔"
+          fixed="right"
+          min-width="220"
+          align="center"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.OperaTimerWindow.open('缂栬緫浠诲姟', row)" v-permissions="['business:quartz:update']">缂栬緫</el-button>
+            <el-button type="text"  @click="runById(row)"  v-permissions="['business:quartz:update']">鎵ц涓�娆�</el-button>
+            <el-button type="text"   v-if="row.state == 1" style="color: red" @click="pauseById(row)"  v-permissions="['business:quartz:update']">鏆傚仠</el-button>
+            <el-button type="text"  v-if="row.state == 2" style="color: green" @click="resumeById(row)"   v-permissions="['business:quartz:update']">鎭㈠</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      ></pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaTimerWindow ref="OperaTimerWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaTimerWindow from '@/views/timer/components/OperaTimerWindow'
+import {runOnceById} from "@/api/timer/timer";
+export default {
+  name: 'Devices',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaTimerWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        beanName: '',
+        module: ''
+      },
+      pausing:false,
+      running:false,
+      resuming:false,
+      room: []
+    }
+  },
+  provide() {
+    return {
+      room: () => this.room
+    }
+  },
+  created () {
+    this.config({
+      module: '璁惧绠$悊淇℃伅琛�',
+      api: '/timer/timer',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    pauseById (row) {
+      this.__checkApi()
+      this.$dialog.actionConfirm('纭鏆傚仠璇ヤ换鍔″悧?')
+          .then(() => {
+            this.pausing = true
+            this.api.paustById(row.id)
+                .then(() => {
+                  this.$message.info('鏆傚仠鎴愬姛')
+                  this.search()
+                })
+                .catch(e => {
+                  // this.$tip.apiFailed(e)
+                })
+                .finally(() => {
+                  this.pausing = false
+                })
+          })
+          .catch(() => {})
+    },
+    resumeById (row) {
+      this.__checkApi()
+      this.$dialog.actionConfirm('纭鎭㈠璇ヤ换鍔″悧?')
+          .then(() => {
+            this.resuming = true
+            this.api.resumeById(row.id)
+                .then(() => {
+                  this.$message.info('鎭㈠鎴愬姛')
+                  this.search()
+                })
+                .catch(e => {
+                  // this.$tip.apiFailed(e)
+                })
+                .finally(() => {
+                  this.resuming = false
+                })
+          })
+          .catch(() => {})
+    },
+    runById (row) {
+      this.__checkApi()
+      this.$dialog.actionConfirm('纭鎵ц涓�娆¤浠诲姟鍚�?')
+          .then(() => {
+            this.running = true
+            this.api.runOnceById(row.id)
+                .then(() => {
+                  this.$message.info('鎵ц鎴愬姛')
+                  this.search()
+                })
+                .catch(e => {
+                  // this.$tip.apiFailed(e)
+                })
+                .finally(() => {
+                  this.running = false
+                })
+          })
+          .catch(() => {})
+    }
+  },
+}
+
+</script>
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
index 9b74ed1..5c5873f 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -487,7 +487,7 @@
             List<Multifile> filelist = multifileJoinMapper.selectList(bookquery);
             filelist.stream().forEach(a -> {
                 if (StringUtils.isNotBlank(a.getFileurl())) {
-                    a.setFileFullUrl(path + a.getFileurl());
+                    a.setFileurlFull(path + a.getFileurl());
                 }
             });
             s.setFileList(filelist);
@@ -557,7 +557,7 @@
             List<Multifile> filelist = multifileJoinMapper.selectList(bookquery);
             filelist.stream().forEach(a -> {
                 if (StringUtils.isNotBlank(a.getFileurl())) {
-                    a.setFileFullUrl(path + a.getFileurl());
+                    a.setFileurlFull(path + a.getFileurl());
                 }
             });
             result.setFileList(filelist);
@@ -836,7 +836,7 @@
                 .eq("OBJ_TYPE", MeetConstants.ZERO)
         );
         multiFileList.forEach(i -> {
-            i.setFileFullUrl(projectsPath);
+            i.setFileurlFull(projectsPath);
         });
         //闄勪欢淇℃伅
         meetingDetailResponse.setMultiFileList(multiFileList);
diff --git a/server/pom.xml b/server/pom.xml
index badf30a..dd100ed 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -12,9 +12,11 @@
   <description></description>
   <modules>
       <module>meeting</module>
-      <module>system_service</module>
       <module>visits</module>
+      <module>system_service</module>
       <module>system_timer</module>
+      <module>system_gateway</module>
+      <module>emaysms</module>
   </modules>
   <parent>
     <groupId>org.springframework.boot</groupId>
diff --git a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
index 7d06475..d2e5097 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -66,6 +66,7 @@
         }catch (BusinessException e){
             return ApiResponse.failed(e.getCode(),e.getMessage());
         }catch (Exception e){
+            e.printStackTrace();
             return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
         }
     }
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
index 866141a..6166fcb 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemDataPermissionCloudController.java
@@ -2,6 +2,7 @@
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDataPermissionBiz;
+import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.constants.DataPermissionConstants;
@@ -15,7 +16,6 @@
 import com.doumee.service.system.SystemDataPermissionService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -38,11 +38,16 @@
 
     @Autowired
     private SystemDataPermissionBiz systemDataPermissionBiz;
-
+    @ApiOperation("鏍规嵁roleId鏌ヨ浼佷笟鏁版嵁鏉冮檺")
+    @PostMapping("/findByRoleId")
+    @CloudRequiredPermission("system:datapermission:query")
+    public ApiResponse<SystemDataPermission> findByRoleId (@RequestBody  SystemDataPermission  pageWrap) {
+        return ApiResponse.success(systemDataPermissionService.findByRoleId(pageWrap));
+    }
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
-    @RequiresPermissions("system:datapermission:create")
+    @CloudRequiredPermission("system:datapermission:create")
     public ApiResponse create(@RequestHeader(Constants.HEADER_USER_TOKEN) String token, @Validated(OperaType.Create.class) @RequestBody SystemDataPermission systemDataPermission) {
         systemDataPermission.setCreateUser(this.getLoginUser(token).getId());
         return ApiResponse.success(systemDataPermissionBiz.create(systemDataPermission));
@@ -50,7 +55,7 @@
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
-    @RequiresPermissions("system:datapermission:delete")
+    @CloudRequiredPermission("system:datapermission:delete")
     public ApiResponse deleteById(@PathVariable Integer id) {
         systemDataPermissionService.deleteById(id);
         return ApiResponse.success(null);
@@ -58,7 +63,7 @@
 
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
-    @RequiresPermissions("system:datapermission:delete")
+    @CloudRequiredPermission("system:datapermission:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
@@ -71,7 +76,7 @@
 
     @ApiOperation("淇敼")
     @PostMapping("/updateById")
-    @RequiresPermissions("system:datapermission:update")
+    @CloudRequiredPermission("system:datapermission:update")
     public ApiResponse updateById(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@Validated(OperaType.Update.class) @RequestBody SystemDataPermission systemDataPermission) {
         systemDataPermission.setUpdateUser(this.getLoginUser(token).getId());
         systemDataPermissionBiz.update(systemDataPermission);
@@ -80,16 +85,16 @@
 
     @ApiOperation("淇敼鐘舵��")
     @PostMapping("/updateStatus")
-    @RequiresPermissions("system:datapermission:update")
+    @CloudRequiredPermission("system:datapermission:update")
     public ApiResponse updateStatus(@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@Validated(OperaType.UpdateStatus.class) @RequestBody SystemDataPermission systemDataPermission) {
-        systemDataPermission.setCreateUser(this.getLoginUser(token).getId());
+        systemDataPermission.setLoginUserInfo(this.getLoginUser(token));
         systemDataPermissionBiz.updateStatus(systemDataPermission);
         return ApiResponse.success(null);
     }
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
-    @RequiresPermissions("system:datapermission:query")
+    @CloudRequiredPermission("system:datapermission:query")
     public ApiResponse<PageData<SystemDataPermissionListVO>> findPage (@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@RequestBody PageWrap<SystemDataPermission> pageWrap) {
         return ApiResponse.success(systemDataPermissionService.findPage(pageWrap));
     }
diff --git a/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java b/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
index fa6c59d..f5d0896 100644
--- a/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
+++ b/server/system_service/src/main/java/com/doumee/api/cloud/SystemRoleCloudController.java
@@ -12,11 +12,13 @@
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
 import com.doumee.dao.system.dto.QuerySystemRoleDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.vo.SystemRoleListVO;
 import com.doumee.service.system.SystemRoleService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -59,6 +61,16 @@
     }
 
     @PreventRepeat
+    @ApiOperation("閰嶇疆瑙掕壊鏁版嵁鏉冮檺")
+    @PostMapping("/createRoleDataPermission")
+    @CloudRequiredPermission("system:datapermission:create")
+    public ApiResponse createRoleDataPermission (@RequestHeader(Constants.HEADER_USER_TOKEN) String token,@Validated @RequestBody SystemDataPermission dto) {
+        dto.setLoginUserInfo(this.getLoginUser(token));
+        systemRoleBiz.createRoleDataPermission(dto);
+        return ApiResponse.success(null);
+    }
+
+    @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
     @CloudRequiredPermission("system:role:create")
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java b/server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
index 3784377..8159684 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
@@ -2,6 +2,7 @@
 
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 
 import java.util.List;
@@ -54,4 +55,6 @@
      * @date 2023/03/21 14:49
      */
     void createRoleMenu(CreateRoleMenuDTO dto);
+
+    void createRoleDataPermission(SystemDataPermission dto);
 }
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
index d44d643..33b987b 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
@@ -3,14 +3,20 @@
 import com.doumee.biz.system.SystemRoleBiz;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemRoleMenu;
 import com.doumee.dao.system.model.SystemRolePermission;
+import com.doumee.service.system.SystemDataPermissionService;
 import com.doumee.service.system.SystemRoleMenuService;
 import com.doumee.service.system.SystemRolePermissionService;
 import com.doumee.service.system.SystemRoleService;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -29,6 +35,8 @@
 
     @Autowired
     private SystemRoleMenuService systemRoleMenuService;
+    @Autowired
+    private SystemDataPermissionService systemDataPermissionService;
 
     @Override
     public Integer create(SystemRole systemRole) {
@@ -112,4 +120,28 @@
             systemRoleMenuService.create(newRoleMenu);
         }
     }
+
+    @Override
+    @Transactional
+    public void createRoleDataPermission(SystemDataPermission dto) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(user ==null){
+            user = dto.getLoginUserInfo();
+        }
+        if(dto.getRoleId()==null || dto.getType()==null ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇锋眰鍙傛暟涓嶆纭紒");
+        }
+        // 鍒犻櫎鍏宠仈鏉冮檺
+        SystemDataPermission deleteDto = new SystemDataPermission();
+        deleteDto.setRoleId(dto.getRoleId());
+
+        systemDataPermissionService.delete(deleteDto);
+        // 鏂板鏂扮殑鏉冮檺
+        dto.setDeleted(Boolean.FALSE);
+        dto.setBusinessCode("DEPARTMENT");
+        dto.setCreateTime(DateUtil.getCurrentDate());
+        dto.setCreateUser(user.getId());
+        dto.setDisabled(Boolean.FALSE);
+        systemDataPermissionService.create(dto);
+    }
 }
diff --git a/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java b/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
index 832854b..c8cf472 100644
--- a/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
+++ b/server/system_service/src/main/java/com/doumee/config/cloudfilter/CloudWebConfig.java
@@ -21,13 +21,13 @@
                 .addPathPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
     }
 
-    @Bean
-    public FilterRegistrationBean addRequestWrapperFilter() {
-        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
-        registration.setFilter(new RequestWrapperFilter());
-        registration.setName("RequestWrapperFilter");
-        registration.addUrlPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
-        registration.setOrder(1);
-        return registration;
-    }
+//    @Bean
+//    public FilterRegistrationBean addRequestWrapperFilter() {
+//        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
+//        registration.setFilter(new RequestWrapperFilter());
+//        registration.setName("RequestWrapperFilter");
+//        registration.addUrlPatterns(Constants.CLOUD_SERVICE_URL_INDEX+"/**");
+//        registration.setOrder(1);
+//        return registration;
+//    }
 }
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java b/server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java
index 08f7789..8bf4831 100644
--- a/server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java
+++ b/server/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java
@@ -43,7 +43,7 @@
 //                return this.defaultData(loginUserInfo.getId());
 //            }
             SystemDataPermission systemDataPermission = new SystemDataPermission();
-            systemDataPermission.setType((short)0);
+            systemDataPermission.setType(0);
             List<SystemDataPermission> dataPermissions = new ArrayList<>();
             dataPermissions.add(systemDataPermission);
             // 鎸夎鑹茬殑鏁版嵁鏉冮檺浼樺厛绾ц繑鍥炴暟鎹�
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 228100f..bdfaecf 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -5,6 +5,7 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.IOException;
@@ -16,6 +17,8 @@
 import  java.util.Date;
 import java.util.List;
 import java.util.Random;
+import java.util.*;
+import java.util.Date;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -96,6 +99,10 @@
     public static final String CLOUD_SERVICE_URL_INDEX = "/cloudService";
     public static final String VISIT_TIPS = "VISIT_TIPS";
     public static final String VISIT_GUIDEMAP = "VISIT_GUIDEMAP";
+    public static final String HIDDEN_DANGER_FILE = "HIDDEN_DANGER_FILE";
+    public static final String LOG_DEL_DAYS_LIMIT ="LOG_DEL_DAYS_LIMIT" ;
+    public static final String HK_LOG_DEL_DAYS_LIMIT ="HK_LOG_DEL_DAYS_LIMIT" ;
+
     public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
     public static  boolean DEALING_HK_SYNCDEVICE = false;
     public static  boolean DEALING_HK_SYNCDEVICE_STATUS = false;
@@ -143,6 +150,14 @@
         return sb.toString();
     }
 
+    public interface DATAPERMISSION_TYPE{
+        public static final  int all = 0;
+        public static final  int departAndChild = 1;
+        public static final  int departAndLeaf = 2;
+        public static final  int depart = 3;
+        public static final  int custom = 4;
+        public static final  int self = -1;
+    }
     public static  Date  getBirthdyByCardNo(String idCard){
     if(idCard ==null || idCard.length()<14){
         return null;
@@ -723,7 +738,138 @@
             this.info = info;
         }
     }
+    /**
+     * 鍏宠仈瀵硅薄绫诲瀷
+     鍏宠仈瀵硅薄绫诲瀷 0浼佷笟钀ヤ笟鎵х収 1鐞嗚禂鎶ユ浜嬫晠瑙嗛鎴栧浘鐗� 2鐞嗚禂鍛樺伐鍏崇郴璇佹槑鏉愭枡 3鐞嗚禂闂ㄨ瘖璧勬枡 4鐞嗚禂浣忛櫌璧勬枡 5鐞嗚禂浼ゆ畫璧勬枡 6鐞嗚禂璧斾粯缁撴鏉愭枡 7浼佷笟韬唤璇佸彿 8淇濆崟鐢宠琛≒DF 9绛剧讲鍚庝繚鍗曠敵璇疯〃PDF 10浼佷笟绛剧珷 11鏈�缁堟姤鍗�
+     */
+    public  enum MultiFile{
+        HIDDEN_DANGER_SUBMIT(0, "闅愭偅闅忔墜鎷嶆彁鎶�", "闅愭偅闅忔墜鎷嶆彁鎶�"),
+        HIDDEN_DANGER_DEAL_BEFORE(1, "闅愭偅闅忔墜鎷嶅鐞嗗墠", "闅愭偅闅忔墜鎷嶅鐞嗗墠"),
+        HIDDEN_DANGER_DEAL_AFTER(2, "闅愭偅闅忔墜鎷嶅鐞嗗悗 ", "闅愭偅闅忔墜鎷嶅鐞嗗悗 "),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
 
+        // 鏋勯�犳柟娉�
+        MultiFile(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+
+
+    }
+    /**
+     * 瀹℃壒妯℃嫙绫诲瀷 0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害
+     */
+    public  enum ApproveTmplType{
+        NOT_SG_VISIT(0, "闈炴柦宸ヤ汉鍛樿瀹㈢敵璇�", "闈炴柦宸ヤ汉鍛樿瀹㈢敵璇�"),
+        SG_VISIT(1, "鏂藉伐浜哄憳璁垮鐢宠", "鏂藉伐浜哄憳璁垮鐢宠"),
+        CAR_VISIT(2, "璁垮鎶ュ ", "璁垮鎶ュ "),
+        IN_CITY_CAR_USE(3, "鍏溅甯傚唴鐢ㄨ溅 ", "鍏溅甯傚唴鐢ㄨ溅 "),
+        OUT_CITY_CAR_USE(4, "鍏溅瀹ゅ鐢ㄨ溅 ", "鍏溅瀹ゅ鐢ㄨ溅 "),
+        CITY_WLC_BOOK(5, "甯傚叕鍙哥墿娴佽溅棰勭害 ", "5甯傚叕鍙哥墿娴佽溅棰勭害 "),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        ApproveTmplType(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (ApproveTmplType c : ApproveTmplType.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (ApproveTmplType c : ApproveTmplType.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+
+
+    }
     public  enum NoticeObjectType {
         MEETING_BOOK_SUCCESS(0, "浼氫笌棰勫畾鎴愬姛","浼氫笌棰勫畾鎴愬姛"),
         MEETING_CACEL(1, "浼氳鍙栨秷","浼氳鍙栨秷"),
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java b/server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
index b972789..403d3c5 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.system.model.SystemDataPermission;
+import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.vo.SystemDataPermissionListVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,4 +22,6 @@
      * @return List<SystemDataPermissionListVO>
      */
     List<SystemDataPermissionListVO> selectManageList(@Param("dto") SystemDataPermission dto, @Param("orderByClause") String orderByClause);
+
+    List<SystemDataPermissionListVO> selectUserList(@Param("dto") SystemDataPermission dto, @Param("role") SystemRole role, @Param("userId") Integer userId);
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java b/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
index 2c274ae..3efbe3b 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -79,6 +79,6 @@
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
     @TableField(exist = false)
-    private String fileFullUrl;
+    private String fileurlFull;
 
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
index 7f82b15..028c6d1 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -40,7 +40,7 @@
 
     @ApiModelProperty(value = "鏉冮檺绫诲瀷锛�0鍏ㄩ儴锛�1鑷畾涔夛紝2浠呯敤鎴锋墍灞烇紝3鐢ㄦ埛鎵�灞炲強鍏跺瓙鏁版嵁锛�", example = "1")
     @NotNull(message = "鏉冮檺绫诲瀷涓嶈兘涓虹┖", groups = {OperaType.Create.class, OperaType.Update.class})
-    private Short type;
+    private Integer type;
 
     @ApiModelProperty(value = "鑷畾涔夋暟鎹�")
     private String customData;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
index 7b8d088..5ebe99e 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -17,6 +17,7 @@
 import javax.validation.constraints.Pattern;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 绯荤粺鐢ㄦ埛
@@ -107,5 +108,8 @@
     @ApiModelProperty(value = "0 鍚敤 1 绂佺敤")
     @TableField(exist = false)
     private String companyName;
+    @ApiModelProperty(value = "鏁版嵁鏉冮檺鍐呴儴闂ㄧ紪鐮侀泦鍚�")
+    @TableField(exist = false)
+    private List<Integer> companyIdList;
 
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java b/server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
index d05ec2a..8dfd607 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.system.model.SystemDataPermission;
+import com.doumee.dao.system.model.SystemRole;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.system.vo.SystemDataPermissionListVO;
 
 import java.util.List;
@@ -105,4 +107,8 @@
      * @return long
      */
     long count(SystemDataPermission systemDataPermission);
+
+    List<Integer> selectHighRole(SystemDataPermission systemDataPermission, SystemRole rt, SystemUser user);
+
+    SystemDataPermission findByRoleId(SystemDataPermission pageWrap);
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
index 6eaf6f6..67cbee2 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
@@ -95,7 +95,6 @@
         Utils.MP.blankToNull(pageWrap.getModel());
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
 
-
         queryWrapper.selectAll(Notices.class);
         if (pageWrap.getModel().getIsdeleted() != null) {
             queryWrapper.eq(Notices::getIsdeleted, pageWrap.getModel().getIsdeleted());
@@ -130,7 +129,6 @@
         }else{
             queryWrapper.orderByDesc(Notices::getCreateDate);
         }
-
         PageData<Notices> pageData = PageData.from(noticesMapper.selectJoinPage(page,Notices.class, queryWrapper));
 
         return pageData;
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
index 6c62016..a62e6f6 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
@@ -1,25 +1,32 @@
 package com.doumee.service.system.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.system.SystemDataPermissionMapper;
 import com.doumee.dao.system.SystemRoleMapper;
 import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.system.vo.SystemDataPermissionListVO;
 import com.doumee.service.system.SystemDataPermissionService;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 鏁版嵁鏉冮檺閰嶇疆Service瀹炵幇
@@ -34,6 +41,8 @@
 
     @Autowired
     private SystemRoleMapper systemRoleMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
 
     @Override
     public Integer create(SystemDataPermission systemDataPermission) {
@@ -132,4 +141,148 @@
         Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission);
         return systemDataPermissionMapper.selectCount(wrapper);
     }
+    @Override
+    public SystemDataPermission findByRoleId(SystemDataPermission pageWrap){
+        if ( pageWrap.getRoleId() == null) {
+            return null;
+        }
+
+        // 鏌ヨ鏁版嵁鏉冮檺
+        QueryWrapper<SystemDataPermission> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(SystemDataPermission::getBusinessCode, "DEPARTMENT")
+                .eq(SystemDataPermission::getRoleId, pageWrap.getRoleId())
+                .eq(SystemDataPermission::getDeleted, Boolean.FALSE)
+                .eq(SystemDataPermission::getDisabled, Boolean.FALSE);
+        List<SystemDataPermission> result = systemDataPermissionMapper.selectList(queryWrapper);
+        if(result!=null && result.size()>0){
+            return result.get(0);
+        }
+        return  null;
+    }
+
+
+    @Override
+    public List<Integer> selectHighRole(SystemDataPermission model, SystemRole role, SystemUser user) {
+        List<SystemDataPermissionListVO>list =   systemDataPermissionMapper.selectUserList(model,role,user.getId()) ;
+        if(list !=null){
+            boolean all = false;
+            boolean departAndChild=false;
+            boolean depart=false;
+            boolean departAndLeaf=false;
+            boolean custom=false;
+            String c = "";
+            for(SystemDataPermissionListVO d : list){
+                if(!all && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.all)){
+                    all =true;
+                }
+                if(!depart && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.depart)){
+                    depart =true;
+                }
+                if(!departAndChild && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndChild)){
+                    departAndChild =true;
+                }
+                if(!departAndLeaf && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndLeaf)){
+                    departAndLeaf =true;
+                }
+                if(  Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.custom)){
+                    custom =true;
+                    c += StringUtils.defaultString(d.getCustomData(),"");
+                }
+            }
+            Company department = new Company();
+            department.setId(user.getCompanyId());
+
+            if(all){
+                return  null;
+            }else{
+                List<Integer> dList = new ArrayList<>();
+                dList.add(-1);//铏氭嫙閮ㄩ棬锛屾帓鏌ョ┖闆嗗悎
+                if(custom) {
+                    //濡傛灉鏈夎嚜瀹氫箟閮ㄩ棬
+                    String[] idStrs = c.split(",");
+                    for(String s :idStrs){
+                        try {
+                            Integer si = Integer.parseInt(s);
+                            if(!isExists(si,dList)){
+                                dList.add(si);
+                            }
+                        }catch (Exception e){
+                        }
+                    }
+                }
+                if(departAndLeaf){
+                    if(department!= null){
+                        dList.addAll(userDataPermissonList(department,true));
+                    }
+                }else if(departAndChild){
+                    if(department!= null) {
+                        dList.addAll(userDataPermissonList(department, false));
+                    }
+                }else if(depart){
+                    if(department!= null && !isExists(department.getId(), dList)){
+                        dList.add(department.getId());
+                    }
+                }
+                return  dList;
+            }
+        }
+        return new ArrayList<>();
+    }
+
+    public List<Integer> userDataPermissonList(Company depart ,boolean isleaf) {
+        List<Integer> pool = new ArrayList<>();
+        List<Company> departList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+                .eq(Company::getIsdeleted,Constants.ZERO ) );
+        pool.add(depart.getId());
+        this.fillDepartChildren(pool, Arrays.asList(depart.getId()),isleaf,departList);
+        return pool;
+    }
+
+    private void fillDepartChildren(List<Integer> pool, List<Integer> asList, boolean isleaf, List<Company> departList) {
+        List<Company> departments = getDepartListByParentIds(asList,departList);
+        List<Integer> ids = departments.stream().map(Company::getId).collect(Collectors.toList());
+        if(isleaf){
+            if (ids.size() > 0) {
+                pool.addAll(ids);
+                this.fillDepartChildren(pool, ids,isleaf,departList);
+            }
+        }else{
+            pool.addAll(ids);
+        }
+
+    }
+
+    private List<Company> getDepartListByParentIds(List<Integer> asList, List<Company> departList) {
+        List<Company> list = new ArrayList<>();
+        if(asList.size()>0){
+            for(Integer id : asList){
+                list.addAll(getDepartListByParentId(id,departList));
+            }
+        }
+        return list;
+    }
+
+
+    private List<Company> getDepartListByParentId(Integer pId, List<Company> departList) {
+        List<Company> list = new ArrayList<>();
+        if(departList!= null){
+            for(Company d :departList){
+                if(Constants.equalsInteger(d.getParentId(),pId)){
+                    list.add(d);
+                }
+            }
+        }
+        return  list;
+    }
+    private boolean isExists(Integer s, List<Integer> dList) {
+        if(dList!=null){
+            for(Integer t : dList){
+                if(Constants.equalsInteger(s,t)){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index eeeea19..3cd3c00 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -5,10 +5,7 @@
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.system.dto.LoginDTO;
-import com.doumee.dao.system.model.SystemLoginLog;
-import com.doumee.dao.system.model.SystemPermission;
-import com.doumee.dao.system.model.SystemRole;
-import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.system.model.*;
 import com.doumee.service.common.CaptchaService;
 import com.doumee.service.system.*;
 import lombok.extern.slf4j.Slf4j;
@@ -39,6 +36,9 @@
     @Autowired
     private SystemUserService systemUserService;
 
+    @Lazy
+    @Autowired
+    private SystemDataPermissionService systemDataPermissionService;
     @Lazy
     @Autowired
     private SystemRoleService systemRoleService;
@@ -138,6 +138,12 @@
         // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
         List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
         List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
+
+        SystemRole rt = new SystemRole();
+        rt.setDeleted(Boolean.FALSE);
+        //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
+        user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
+
         LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,null);
         return  userInfo;
     }
diff --git a/server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java b/server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
index 0f894b1..bfe0442 100644
--- a/server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
+++ b/server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
@@ -1,6 +1,14 @@
 package com.doumee.service.timer;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
 import com.doumee.dao.timer.entity.JobState;
 import com.doumee.dao.timer.entity.QuartzJob;
 import com.doumee.dao.timer.mapper.QuartzJobMapper;
@@ -90,4 +98,32 @@
             quartzManage.run(quartzJob);
         }
     }
+
+    public PageData<QuartzJob> findPage(PageWrap<QuartzJob> pageWrap) {
+        IPage<QuartzJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<QuartzJob> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.lambda()
+                .eq(pageWrap.getModel().getId() != null, QuartzJob::getId, pageWrap.getModel().getId())
+                .eq(pageWrap.getModel().getParams() != null, QuartzJob::getParams, pageWrap.getModel().getParams())
+                .like(pageWrap.getModel().getBeanName() != null, QuartzJob::getBeanName, pageWrap.getModel().getBeanName())
+                .eq(pageWrap.getModel().getState() != null, QuartzJob::getState, pageWrap.getModel().getState())
+                .eq(pageWrap.getModel().getRemark() != null, QuartzJob::getRemark, pageWrap.getModel().getRemark())
+                .like(pageWrap.getModel().getModule() != null, QuartzJob::getModule, pageWrap.getModel().getModule())
+        ;
+        return PageData.from(quartzJobMapper.selectPage(page, queryWrapper));
+    }
+
+
+    public void updateById(QuartzJob model) {
+        QuartzJob quartzJob = quartzJobMapper.selectById(model.getId()) ;
+        if (Objects.isNull(quartzJob)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        pause(model.getId());//鏆傚仠
+        //鍏堝垹闄ゅ氨浠诲姟
+        quartzManage.deleteJob(model.getId());
+        quartzJob.setState(JobState.JOB_STOP.getStatus());
+        quartzJobMapper.updateById(quartzJob) ;
+    }
 }
\ No newline at end of file
diff --git a/server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml b/server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
index 13f821f..3e84dba 100644
--- a/server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
+++ b/server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
@@ -43,5 +43,30 @@
     </where>
     ${orderByClause}
   </select>
-
+  <select id="selectUserList" resultMap="SystemDataPermissionListVO">
+    SELECT
+    sdp.`ID`, sdp.`BUSINESS_CODE`, sdp.`ROLE_ID`, sdp.`TYPE`, sdp.`CUSTOM_DATA`, sdp.`DISABLED`, sdp.`REMARK`, sdp.DISABLED, sdp.`CREATE_TIME`, sdp.`UPDATE_TIME`,
+    role.`ID` AS ROLE_ID, role.`CODE` AS ROLE_CODE, role.`NAME` AS ROLE_NAME,
+    create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
+    update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
+    FROM SYSTEM_DATA_PERMISSION sdp
+    INNER JOIN `SYSTEM_ROLE` role ON role.ID = sdp.ROLE_ID
+    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = sdp.CREATE_USER
+    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = sdp.UPDATE_USER
+    <where>
+      sdp.DELETED = 0
+      <if test="dto.businessCode != null and dto.businessCode != ''">
+        AND sdp.`BUSINESS_CODE` = #{dto.businessCode}
+      </if>
+      <if test="dto.roleId != null">
+        AND role.`ID` =  #{dto.roleId}
+      </if>
+      <if test="dto.type != null">
+        AND sdp.`TYPE` =  #{dto.type}
+      </if>
+      <if test="userId != null">
+        AND exists (select sr.id from system_user_role sr where sr.role_id=sdp.role_id and sr.user_id=#{userId} and sr.deleted=0)
+      </if>
+    </where>
+  </select>
 </mapper>
diff --git a/server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java b/server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java
new file mode 100644
index 0000000..2c355e0
--- /dev/null
+++ b/server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java
@@ -0,0 +1,79 @@
+package com.doumee.api.timer;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.timer.entity.QuartzJob;
+import com.doumee.service.timer.QuartzJobService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2024/04/28 16:06
+ */
+@Api(tags = "浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/quartz")
+public class QuartzCloudController extends BaseController {
+
+    @Autowired
+    private QuartzJobService quartzJobService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:quartz:create")
+    public ApiResponse  create(@RequestBody QuartzJob quartzJob ,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+          quartzJobService.insert(quartzJob) ;
+          return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:quartz:update")
+    public ApiResponse updateById(@RequestBody QuartzJob quartzJob,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        quartzJobService.update(quartzJob);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation( "鍋滄浠诲姟")
+    @GetMapping("/pause/{id}")
+    @CloudRequiredPermission("business:quartz:update")
+    public ApiResponse pause(@PathVariable("id") Integer id) {
+        quartzJobService.pause(id); return ApiResponse.success(null);
+    }
+
+    @ApiOperation( "鎭㈠浠诲姟")
+    @GetMapping("/resume/{id}")
+    @CloudRequiredPermission("business:quartz:update")
+    public ApiResponse resume(@PathVariable("id") Integer id) {
+        quartzJobService.resume(id) ; return ApiResponse.success(null);
+    }
+
+    @ApiOperation( "鎵ц涓�娆�")
+    @GetMapping("/runOnce/{id}")
+    @CloudRequiredPermission("business:quartz:update")
+    public ApiResponse runOnce(@PathVariable("id") Integer id) {
+        quartzJobService.runOnce(id) ; return ApiResponse.success(null);
+    }
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:quartz:query")
+    public ApiResponse<PageData<QuartzJob>> findPage (@RequestBody PageWrap<QuartzJob> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(quartzJobService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:quartz:query")
+    public ApiResponse<QuartzJob> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success( quartzJobService.getById(id));
+    }
+}
diff --git a/server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java b/server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java
index 0535e68..4695267 100644
--- a/server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java
+++ b/server/system_timer/src/main/java/com/doumee/api/timer/QuartzController.java
@@ -10,7 +10,7 @@
 import javax.annotation.Resource;
 
 @RestController
-@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/quartz")
+@RequestMapping( "/business/quartz")
 @Api(tags = "瀹氭椂浠诲姟鎺ュ彛")
 public class QuartzController {
 
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/HkLogTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java
similarity index 74%
rename from server/visits/admin_timer/src/main/java/com/doumee/api/HkLogTimerController.java
rename to server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java
index 6a04b5e..e963898 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/HkLogTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java
@@ -1,19 +1,14 @@
 package com.doumee.api;
 
-import com.doumee.api.BaseController;
 import com.doumee.core.model.ApiResponse;
-import com.doumee.core.utils.Constants;
 import com.doumee.service.business.InterfaceLogService;
-import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
-import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
+import com.doumee.service.business.PlatformInterfaceLogService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Date;
 
 /**
  * @author 姹熻箘韫�
@@ -22,14 +17,17 @@
 @Api(tags = "鏃ュ織瀹氭椂鍣ㄦ帴鍙�")
 @RestController
 @RequestMapping("/timer/log")
-public class HkLogTimerController extends BaseController {
+public class InterfaceLogTimerController extends BaseController {
 
     @Autowired
     private InterfaceLogService interfaceLogService;
+    @Autowired
+    private PlatformInterfaceLogService platformInterfaceLogService;
     @ApiOperation("寮�鍚畾鏃舵帴鍙f棩蹇楁竻鐞�")
     @GetMapping("/clearThreeMonthLog")
     public ApiResponse clearThreeMonthLog() {
         interfaceLogService.clearThreeMonthLog();
+        platformInterfaceLogService.clearThreeMonthLog();
         return ApiResponse.success("寮�鍚畾鏃舵帴鍙f棩蹇楁竻鐞嗘垚鍔�");
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java
index cc3e9f8..cd76650 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveTemplController.java
@@ -39,7 +39,7 @@
     @GetMapping("/delete/{id}")
     @RequiresPermissions("business:approvetempl:delete")
     public ApiResponse deleteById(@PathVariable Integer id) {
-        approveTemplService.deleteById(id);
+        approveTemplService.deleteById(id,this.getLoginUser(null));
         return ApiResponse.success(null);
     }
 
@@ -47,7 +47,7 @@
     @GetMapping("/delete/batch")
     @RequiresPermissions("business:approvetempl:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
-        approveTemplService.deleteByIdInBatch(this.getIdList(ids));
+        approveTemplService.deleteByIdInBatch(this.getIdList(ids),this.getLoginUser(null));
         return ApiResponse.success(null);
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java
index eb57694..d0f1c31 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/HiddenDangerParamController.java
@@ -39,7 +39,7 @@
     @GetMapping("/delete/{id}")
     @RequiresPermissions("business:hiddendangerparam:delete")
     public ApiResponse deleteById(@PathVariable Integer id) {
-        hiddenDangerParamService.deleteById(id);
+        hiddenDangerParamService.deleteById(id,this.getLoginUser(null));
         return ApiResponse.success(null);
     }
 
@@ -47,7 +47,7 @@
     @GetMapping("/delete/batch")
     @RequiresPermissions("business:hiddendangerparam:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
-        hiddenDangerParamService.deleteByIdInBatch(this.getIdList(ids));
+        hiddenDangerParamService.deleteByIdInBatch(this.getIdList(ids),this.getLoginUser(null));
         return ApiResponse.success(null);
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
index 040c6f8..7d82a68 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
@@ -34,14 +34,23 @@
     @PostMapping("/create")
     @CloudRequiredPermission("business:approvetempl:create")
     public ApiResponse create(@RequestBody ApproveTempl approveTempl,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        approveTempl.setLoginUserInfo(this.getLoginUser(token));
         return ApiResponse.success(approveTemplService.create(approveTempl));
+    }
+    @PreventRepeat
+    @ApiOperation("鍙戝竷妯$増")
+    @PostMapping("/save")
+    @CloudRequiredPermission("business:approvetempl:create")
+    public ApiResponse save(@RequestBody ApproveTempl approveTempl,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        approveTempl.setLoginUserInfo(this.getLoginUser(token));
+        return ApiResponse.success(approveTemplService.save(approveTempl));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
     @CloudRequiredPermission("business:approvetempl:delete")
     public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        approveTemplService.deleteById(id);
+        approveTemplService.deleteById(id,this.getLoginUser(token));
         return ApiResponse.success(null);
     }
 
@@ -49,7 +58,7 @@
     @GetMapping("/delete/batch")
     @CloudRequiredPermission("business:approvetempl:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        approveTemplService.deleteByIdInBatch(this.getIdList(ids));
+        approveTemplService.deleteByIdInBatch(this.getIdList(ids),this.getLoginUser(token));
         return ApiResponse.success(null);
     }
 
@@ -57,6 +66,7 @@
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:approvetempl:update")
     public ApiResponse updateById(@RequestBody ApproveTempl approveTempl,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        approveTempl.setLoginUserInfo(this.getLoginUser(token));
         approveTemplService.updateById(approveTempl);
         return ApiResponse.success(null);
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
index 7657b26..0c6e2df 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -100,4 +100,11 @@
         return ApiResponse.success(carUseBookService.checkDateUse(carId,dateDay));
     }
 
+    @ApiOperation("鐢宠鎾ら攢")
+    @GetMapping("/revoke")
+    public ApiResponse  revoke (@RequestParam Integer id, @RequestParam String info, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        carUseBookService.revoke(id,info,getLoginUser(token));
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index 69592d7..31c8ac8 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -13,6 +13,7 @@
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.request.MemberImport;
 import com.doumee.dao.admin.request.MemberQuery;
+import com.doumee.dao.business.dto.RegisterDriverDTO;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberRole;
@@ -327,4 +328,16 @@
         return ApiResponse.success(null);
     }
 
+
+    @LoginNoRequired
+    @ApiOperation("鍙告満娉ㄥ唽")
+    @PostMapping("/registerDriver")
+    public ApiResponse registerDriver(@RequestBody RegisterDriverDTO registerDriverDTO ){
+        memberService.registerDriver(registerDriverDTO);
+        return ApiResponse.success("娉ㄥ唽鎴愬姛");
+    }
+
+
+
+
 }
diff --git a/server/visits/dmvisit_service/pom.xml b/server/visits/dmvisit_service/pom.xml
index 7b13c12..7bacbec 100644
--- a/server/visits/dmvisit_service/pom.xml
+++ b/server/visits/dmvisit_service/pom.xml
@@ -22,5 +22,10 @@
             <artifactId>system_service</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.doumee</groupId>
+            <artifactId>emaysms</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
index a7f0618..0dfa3e2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
@@ -3,10 +3,13 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.ApproveParam;
 
+import java.util.List;
+
 /**
  * @author 姹熻箘韫�
  * @date 2023/12/28 11:46
  */
 public interface ApproveParamMapper extends BaseMapper<ApproveParam> {
 
+    void insertBatchSomeColumn(List<ApproveParam> paramList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java
index 91715e6..6a22252 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/HiddenDangerMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.HiddenDanger;
+import com.github.yulichang.base.MPJBaseMapper;
 
 /**
  * @author 姹熻箘韫�
  * @since 2024/04/28 16:06
  */
-public interface HiddenDangerMapper extends BaseMapper<HiddenDanger> {
+public interface HiddenDangerMapper extends MPJBaseMapper<HiddenDanger> {
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java
new file mode 100644
index 0000000..3af8b5c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/5/20 14:54
+ */
+@Data
+public class RegisterDriverDTO {
+
+    @ApiModelProperty(value = "濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "楠岃瘉鐮�")
+    private String validCode;
+
+    @ApiModelProperty(value = "瀵嗙爜")
+    private String password;
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
new file mode 100644
index 0000000..86d86d7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
@@ -0,0 +1,18 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Approve;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 14:09
+ */
+public interface ApproveJoinMapper extends MPJJoinMapper<Approve> {
+
+    void insertBatchSomeColumn(List<Approve> list);
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
index 3ae9442..46c455d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -68,8 +69,8 @@
     @ExcelColumn(name="ERP瀹℃壒缂栫爜")
     private String erpId;
 
-    @ApiModelProperty(value = "瀹℃壒鐘舵�� 0寰呭鎵� 1瀹℃壒涓� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃 4浠栦汉宸插鐞�", example = "1")
-    @ExcelColumn(name="瀹℃壒鐘舵�� 0寰呭鎵� 1瀹℃壒涓� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃 4浠栦汉宸插鐞�")
+    @ApiModelProperty(value = "瀹℃壒鐘舵�� 0寰呰嚜宸卞鎵瑰鎵� 1寰呰嚜宸卞鎵� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃 4浠栦汉宸插鐞� ", example = "1")
+    @ExcelColumn(name="瀹℃壒鐘舵�� 0寰呰嚜宸卞鎵瑰鎵� 1寰呰嚜宸卞鎵� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃 4浠栦汉宸插鐞�")
     private Integer status;
 
     @ApiModelProperty(value = "鐘舵�佷俊鎭�")
@@ -96,9 +97,6 @@
     @ExcelColumn(name="鍏宠仈涓氬姟涓婚敭")
     private Integer objId;
 
-    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0=璁垮鐢宠锛�1=鐢ㄨ溅鐢宠", example = "1")
-    @ExcelColumn(name="鍏宠仈涓氬姟绫诲瀷锛�0=璁垮鐢宠锛�1=鐢ㄨ溅鐢宠")
-    private Integer objType;
 
     @ApiModelProperty(value = "瀹℃壒绛夌骇", example = "1")
     @ExcelColumn(name="瀹℃壒绛夌骇")
@@ -108,7 +106,39 @@
     @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱")
     private Integer approveType;
 
+
+    @ApiModelProperty(value = "鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾", example = "1")
+    @ExcelColumn(name="鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾")
+    private Integer driverParam;
+
+    @ApiModelProperty(value = "鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�")
+    private Integer addrParam;
+
+    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害", example = "1")
+    @ExcelColumn(name="鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害")
+    private Integer objType;
+
     @ApiModelProperty(value = "绫诲瀷 0瀹℃壒 1鎶勯��", example = "1")
     @ExcelColumn(name="绫诲瀷 0瀹℃壒 1鎶勯��")
     private Integer type;
+
+
+
+
+    @ApiModelProperty(value = "濮撳悕", example = "1")
+    @ExcelColumn(name="濮撳悕")
+    @TableField(exist = false)
+    private String memberName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�", example = "1")
+    @ExcelColumn(name="鎵嬫満鍙�")
+    @TableField(exist = false)
+    private String memberPhone;
+
+    @ApiModelProperty(value = "閮ㄩ棬", example = "1")
+    @ExcelColumn(name="閮ㄩ棬")
+    @TableField(exist = false)
+    private String companyName;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
index fa3de7e..8147a87 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
@@ -71,6 +71,15 @@
     @ApiModelProperty(value = "瀹℃壒浜虹紪鐮侊紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
     @ExcelColumn(name="瀹℃壒浜虹紪鐮侊紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
     private String objIds;
+    @ApiModelProperty(value = "妯$増Id")
+    @ExcelColumn(name="妯$増Id")
+    private Integer templId;
+    @ApiModelProperty(value = "鏄惁鎸囧畾鍙告満椤� 0鍚� 1鏄�")
+    @ExcelColumn(name="鏄惁鎸囧畾鍙告満椤� 0鍚� 1鏄�")
+    private Integer driverParam;
+    @ApiModelProperty(value = "鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�")
+    @ExcelColumn(name="鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�")
+    private Integer addrParam;
 
     @ApiModelProperty(value = "瀹℃壒涓荤绛夌骇 0鐩存帴涓荤 1浜岀骇涓荤 2涓夌骇涓荤 4鍥涚骇涓荤", example = "1")
     @ExcelColumn(name="瀹℃壒涓荤绛夌骇 0鐩存帴涓荤 1浜岀骇涓荤 2涓夌骇涓荤 4鍥涚骇涓荤")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
index 43980aa..3735f00 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveTempl.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -10,6 +11,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 瀹℃壒妯$増淇℃伅琛�
@@ -60,4 +62,8 @@
     @ExcelColumn(name="鍚嶇О")
     private String name;
 
+    @ApiModelProperty(value = "瀹℃壒妯$増閰嶇疆鏄庣粏闆嗗悎")
+    @TableField(exist = false)
+    private List<ApproveParam> paramList;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
index 218f678..b9b1d62 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -93,13 +93,11 @@
 
     @ApiModelProperty(value = "鍙栨秷绫诲瀷 0鐢宠浜哄彇娑� 1娲捐溅鍛樻挙閿�")
     @ExcelColumn(name="鍙栨秷绫诲瀷 0鐢宠浜哄彇娑� 1娲捐溅鍛樻挙閿�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date cancelType;
+    private Integer cancelType;
 
     @ApiModelProperty(value = "鏄惁宸插彇娑� 0鏈彇娑� 1宸插彇娑�")
     @ExcelColumn(name="鏄惁宸插彇娑� 0鏈彇娑� 1宸插彇娑�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date cancelStatus;
+    private Integer cancelStatus;
 
     @ApiModelProperty(value = "鍙栨秷鏃堕棿")
     @ExcelColumn(name="鍙栨秷鏃堕棿")
@@ -172,4 +170,7 @@
     @ApiModelProperty(value = "鐢宠浜虹數璇�")
     @TableField(exist = false)
     private String memberMobile;
+    @ApiModelProperty(value = "瀹℃壒璁板綍")
+    @TableField(exist = false)
+    private List<Approve> approveList;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
index 2f13912..610f93d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
@@ -4,6 +4,7 @@
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.dao.system.model.Multifile;
 import com.doumee.core.model.LoginUserModel;
+import com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -122,6 +123,15 @@
     @ApiModelProperty(value = "鏌ヨ鎴濮嬫椂闂达紙鍩轰簬鎻愭姤鏃堕棿锛�", example = "2024-05-20 11:48:46")
     @TableField(exist = false)
     private Date queryEndTime;
+    @ApiModelProperty(value = "鐜板満鎯呭喌鎻愭姤闄勪欢闆嗗悎")
+    @TableField(exist = false)
+    private List<Multifile> submitFileList;
+    @ApiModelProperty(value = "澶勭悊鍓嶉檮浠堕泦鍚�")
+    @TableField(exist = false)
+    private List<Multifile> dealBeforeFileList;
+    @ApiModelProperty(value = "澶勭悊鍚庨檮浠堕泦鍚�")
+    @TableField(exist = false)
+    private List<Multifile> dealAfterFileList;
 
     @ApiModelProperty(value = "鎻愭姤鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index 4f0e839..31dd657 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -76,7 +76,7 @@
     private String imgurl;
 
     @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳", example = "1")
-    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳")
+    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
     private Integer type;
 
     @ApiModelProperty(value = "璁垮鍚嶇О/鍐呴儴浜哄憳")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
index d773779..1259862 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -104,4 +104,6 @@
      * @return
      */
     InternalHomeVO getHomeData(Integer memberId);
+
+    void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java
index 47b8bcb..662e9c0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveTemplService.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.ApproveTempl;
@@ -25,7 +26,7 @@
      *
      * @param id 涓婚敭
      */
-    void deleteById(Integer id);
+    void deleteById(Integer id, LoginUserInfo user);
 
     /**
      * 鍒犻櫎
@@ -39,7 +40,7 @@
      *
      * @param ids 涓婚敭闆�
      */
-    void deleteByIdInBatch(List<Integer> ids);
+    void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user);
 
     /**
      * 涓婚敭鏇存柊
@@ -94,4 +95,6 @@
      * @return long
      */
     long count(ApproveTempl approveTempl);
+
+    int save(ApproveTempl approveTempl);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
index 5652f03..9754f62 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.CarUseBook;
@@ -101,4 +102,6 @@
     List<CarUseBook> carUseBookList(CarUseBook carUseBook);
 
     List<DateIntervalVO> checkDateUse(Integer cars, String dateDay);
+
+    void revoke(Integer id, String info, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 2fabbd8..883b71d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -7,6 +7,7 @@
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.request.MemberQuery;
 import com.doumee.dao.admin.response.StagingDataVO;
+import com.doumee.dao.business.dto.RegisterDriverDTO;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberRole;
@@ -161,6 +162,11 @@
     void memberFreeze();
     /********************************************鍏紬鍙锋帴鍙�***********************************************************************/
 
+    /**
+     * 鍙告満娉ㄥ唽
+     * @param registerDriverDTO
+     */
+    void registerDriver(RegisterDriverDTO registerDriverDTO);
 
     /**
      * 寰俊鎺堟潈鎺ュ彛
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
index 4f4a6eb..1dd001d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
@@ -94,4 +94,6 @@
      * @return long
      */
     long count(PlatformInterfaceLog platformInterfaceLog);
+
+    void clearThreeMonthLog();
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 08320d3..289c28d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1,23 +1,31 @@
 package com.doumee.service.business.impl;
 
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.ApproveMapper;
-import com.doumee.dao.business.model.Approve;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.response.InternalHomeVO;
 import com.doumee.service.business.ApproveService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 瀹℃壒淇℃伅璁板綍琛⊿ervice瀹炵幇
@@ -32,6 +40,24 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private ApproveTemplMapper approveTemplMapper;
+
+    @Autowired
+    private ApproveParamMapper approveParamMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private CarUseBookMapper carUseBookMapper;
+
+    @Autowired
+    private CarDriverMapper carDriverMapper;
 
     @Override
     public Integer create(Approve approve) {
@@ -189,10 +215,214 @@
     }
 
 
+    /**
+     * 鍒涘缓瀹℃壒娴佺▼
+     * @param tempType 妯℃澘绫诲瀷  0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害
+     * @param businessId 涓氬姟涓婚敭 鏍规嵁 tempType
+     * @param createMemberId 鎻愪氦娴佺▼浜哄憳
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId){
+        //鏌ヨ澶勭悊妯℃澘
+        ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
+                .eq(ApproveTempl::getType,tempType)
+                .eq(ApproveTempl::getIsdeleted,Constants.ZERO)
+                .last(" limit 1 ")
+        );
+        if(Objects.isNull(approveTempl)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌閰嶇疆妯℃澘");
+        }
+        //鏌ヨ閰嶇疆娴佺▼
+        List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>()
+                .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .eq(ApproveParam::getTemplId,approveTempl.getId())
+                .orderByAsc(ApproveParam::getType)
+                .orderByAsc(ApproveParam::getLevel)
+        );
+        if(Objects.isNull(approveParamAllList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈厤缃鎵规祦绋�");
+        }
+        //瀹℃壒閰嶇疆
+        List<ApproveParam> approveParamList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList());
+        if(Objects.isNull(approveParamList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈厤缃鎵规祦绋�");
+        }
+        List<ApproveParam> approveCopyList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList());
+
+        Member createMember = memberMapper.selectById(createMemberId);
+        if(Objects.isNull(createMember)|| Objects.isNull(createMember.getCompanyId())){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鐢宠浜虹粍缁囦俊鎭紓甯�");
+        }
+        List<Approve> approveList = new ArrayList<>();
+
+        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(approveList)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇�");
+        }
+
+        //澶勭悊鎶勯�佹暟鎹�
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(approveCopyList)){
+            this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList);
+        }
+        approveMapper.insertBatchSomeColumn(approveList);
+
+    }
+
+
+    /**
+     * 缁勭粐瀹℃壒娴佹暟鎹�
+     * @param approveTempl
+     * @param approveParamList
+     * @param createMember
+     * @param businessId
+     * @param approveList
+     */
+    public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Integer businessId,List<Approve> approveList){
+        //瀹℃壒涓氬姟鏁版嵁
+        for (int i = 0; i < approveParamList.size(); i++) {
+            ApproveParam approveParam = approveParamList.get(i);
+            List<Integer> ids = this.getApproveUserIds(approveParam,createMember);
+            for (Integer memberId:ids) {
+                Approve approve = new Approve();
+                approve.setCreateDate(new Date());
+                approve.setIsdeleted(Constants.ZERO);
+                approve.setTemplatId(approveTempl.getId());
+                approve.setChekorId(memberId);
+                approve.setStatus(Constants.ZERO);
+                approve.setStatusInfo("寰呭鎵�");
+                approve.setIsEndCheck((i+1) == approveParamList.size()?Constants.ONE:Constants.ZERO);
+                approve.setObjId(businessId);
+                approve.setLevel(i+1);
+                approve.setApproveType(approveParam.getApproveType());
+                approve.setDriverParam(approveParam.getDriverParam());
+                approve.setAddrParam(approveParam.getAddrParam());
+                approve.setType(Constants.ZERO);
+                approveList.add(approve);
+            }
+        }
+    }
+
+
+    public void organizeApproveCopyData(ApproveTempl approveTempl,List<ApproveParam> approveCopyList,Integer businessId,List<Approve> approveList){
+        for (ApproveParam approveParam:approveCopyList) {
+            if(StringUtils.isBlank(approveParam.getObjIds())){
+                return;
+            }
+            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .eq(Member::getWorkStatus,Constants.ZERO)
+                    .in(Member::getId,approveParam.getObjIds().split(",")));
+            List<Integer> userIds = new ArrayList<>();
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+                userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
+            }
+            //鍏姟鐢ㄨ溅 榛樿鍔犲叆 鍙告満鎶勯��
+            if(approveTempl.getType()==Constants.THREE||approveTempl.getType()==Constants.FOUR){
+                CarUseBook carUseBook = carUseBookMapper.selectById(businessId);
+                if(Objects.isNull(carUseBook)){
+                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
+                }
+                CarDriver carDriver = carDriverMapper.selectById(carUseBook.getDriverId());
+                if(Objects.isNull(carDriver)){
+                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鍙告満淇℃伅");
+                }
+                userIds.add(carDriver.getMemberId());
+            }
+
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(userIds)){
+                for (Integer memberId:userIds) {
+                    Approve approve = new Approve();
+                    approve.setCreateDate(new Date());
+                    approve.setIsdeleted(Constants.ZERO);
+                    approve.setTemplatId(approveTempl.getId());
+                    approve.setChekorId(memberId);
+                    approve.setObjId(businessId);
+                    approve.setType(Constants.ONE);
+                    approveList.add(approve);
+                }
+            }
+        }
+    }
+
+
+    public List<Integer> getApproveUserIds(ApproveParam approveParam,Member createMember){
+        List<Integer> userIds = new ArrayList<>();
+        if(approveParam.getMemberType().equals(Constants.ZERO)){
+            //鐢宠浜�
+            userIds.add(createMember.getId());
+        }else if(approveParam.getMemberType().equals(Constants.ONE)){
+            //鎸囧畾浜哄憳
+            if(StringUtils.isBlank(approveParam.getObjIds())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀹℃壒娴侀厤缃敊璇痆鏈厤缃寚瀹氬鎵逛汉鍛榏");
+            }
+            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .in(Member::getId,approveParam.getObjIds().split(",")));
+            if(memberList.size()!=approveParam.getObjIds().split(",").length){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒浜哄憳淇℃伅寮傚父]");
+            }
+            userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
+        }else if(approveParam.getMemberType().equals(Constants.TWO)){
+            //閮ㄩ棬涓荤瀹℃壒
+            //瀹℃壒閮ㄩ棬
+            Company memberCompany = companyMapper.selectById(createMember.getCompanyId());
+            if(Objects.isNull(memberCompany)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
+            }
+            Company auditCompany = this.getAuditCompanyHead(memberCompany.getParentId(),approveParam.getObjLevel());
+            if(Objects.isNull(auditCompany)){
+                //瀹℃壒閮ㄩ棬涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
+            }else{
+                //鏌ヨ閮ㄩ棬璐熻矗浜�
+                Member headMember = memberMapper.selectById(auditCompany.getHeadId());
+                if(Objects.isNull(headMember)){
+                    //鏈煡璇㈠埌閮ㄩ棬璐熻矗浜�  鏍规嵁閰嶇疆澶勭悊   鐢变笂绾т富绠′唬鏇垮鏍�/鐩存帴缁撴潫娴佺▼
+                    if(approveParam.getNoleaderOpt().equals(Constants.ONE)&&!Objects.isNull(auditCompany.getParentId())){
+                        auditCompany = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getId,auditCompany.getParentId()));
+                        //鏃犵埗绾� 鐩存帴娴佷紶涓嬩竴绾у鎵�
+                        if(Objects.isNull(auditCompany)){
+                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
+                        }
+                        headMember = memberMapper.selectById(auditCompany.getHeadId());
+                        if(Objects.isNull(headMember)){
+                            //鏌ヨ閮ㄩ棬璐熻矗浜� 涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈缃礋璐d汉]");
+                        }else{
+                            //娣诲姞瀹℃壒浜�
+                            userIds.add(headMember.getId());
+                        }
+                    }else{
+                        //娣诲姞瀹℃壒浜�
+                        userIds.add(headMember.getId());
+                    }
+                }
+            }
+        }
+        return userIds;
+    }
 
 
 
-
+    /**
+     * 鏍规嵁閰嶇疆鏌ヨ涓婄骇鏁版嵁
+     * @param companyId 鐖剁骇閮ㄩ棬涓婚敭
+     * @param objLevel  鏌ヨ绾у埆
+     */
+    public Company getAuditCompanyHead(Integer companyId, Integer objLevel){
+        Integer queryLevel = Constants.ZERO;
+        Company auditCompany =  companyMapper.selectById(companyId);
+        while(queryLevel.equals(objLevel)){
+            auditCompany = companyMapper.selectById(auditCompany.getParentId());
+            if(Objects.isNull(auditCompany)){
+                return null;
+            }
+            queryLevel = queryLevel + 1;
+        }
+        return auditCompany;
+    }
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
index 1271993..b940e2e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
@@ -7,11 +7,10 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.ApproveParamMapper;
 import com.doumee.dao.business.ApproveTemplMapper;
 import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.model.ApproveTempl;
-import com.doumee.dao.business.model.CarDriver;
-import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.ApproveTemplService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -20,6 +19,7 @@
 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.Date;
@@ -36,7 +36,58 @@
     @Autowired
     private ApproveTemplMapper approveTemplMapper;
     @Autowired
+    private ApproveParamMapper approveParamMapper;
+    @Autowired
     private MemberMapper memberMapper;
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public int save(ApproveTempl model) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(loginUserInfo == null){
+            loginUserInfo = model.getLoginUserInfo();
+        }
+        if(model.getType() == null || Constants.ApproveTmplType.getName(model.getType()) == null){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        ApproveTempl template = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
+                .eq(ApproveTempl::getType,model.getType() )
+                .eq(ApproveTempl::getIsdeleted,Constants.ZERO)
+                .last("limit 1"));
+        Date date =new Date();
+        if(template == null){
+            //濡傛灉妯$増娌℃湁锛屽垯鏂板
+            template = new ApproveTempl();
+            template.setType(model.getType());
+            template.setCreateDate(date);
+            template.setCreator(loginUserInfo.getId());
+            template.setEditDate(date);
+            template.setIsdeleted(Constants.ZERO);
+            template.setEditor(loginUserInfo.getId());
+            template.setName(Constants.ApproveTmplType.getName(model.getType()));
+            approveTemplMapper.insert(template);
+        }
+        if(model.getParamList()!=null && model.getParamList().size()>0){
+            for(ApproveParam param : model.getParamList()){
+                param.setCreateDate(date);
+                param.setCreator(loginUserInfo.getId());
+                param.setEditDate(date);
+                param.setEditor(loginUserInfo.getId());
+                param.setIsdeleted(Constants.ZERO);
+                param.setTemplId(template.getId());
+                param.setType(Constants.formatIntegerNum(param.getType()));
+                param.setAddrParam(Constants.formatIntegerNum(param.getAddrParam()));
+                param.setDriverParam(Constants.formatIntegerNum(param.getDriverParam()));
+                param.setApproveType(Constants.formatIntegerNum(param.getApproveType()));
+            }
+            //鍏堟竻闄ゅ師鏉ユ墍鏈夌殑灏遍櫔閰嶇疆
+            approveParamMapper.delete(new UpdateWrapper<ApproveParam>().lambda()
+                    .eq(ApproveParam::getTemplId,template.getId()));
+            //鎵归噺鎻掑叆鏂扮殑閰嶇疆
+            approveParamMapper.insertBatchSomeColumn(model.getParamList());
+        }
+        return model.getId();
+    }
 
     @Override
     public Integer create(ApproveTempl model) {
@@ -45,8 +96,13 @@
     }
 
     @Override
-    public void deleteById(Integer id) {
-        approveTemplMapper.deleteById(id);
+    public void deleteById(Integer id, LoginUserInfo userInfo) {
+        ApproveTempl model = new ApproveTempl();
+        model.setEditDate(new Date());
+        model.setEditor(userInfo.getId());
+        model.setId(id);
+        model.setIsdeleted(Constants.ONE);
+        approveTemplMapper.updateById(model);
     }
 
     @Override
@@ -56,11 +112,13 @@
     }
 
     @Override
-    public void deleteByIdInBatch(List<Integer> ids) {
+    public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) {
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        approveTemplMapper.deleteBatchIds(ids);
+        for(Integer id:ids){
+            deleteById(id,user);
+        }
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index 2479504..2b41210 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -10,12 +10,15 @@
 import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.ApproveMapper;
 import com.doumee.dao.business.CarUseBookMapper;
 import com.doumee.dao.business.CarsMapper;
+import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.join.CarUseBookJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.DateIntervalVO;
 import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.CarUseBookService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -56,6 +59,12 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private ApproveJoinMapper approveJoinMapper;
+
+    @Autowired
+    private ApproveService approveService;
 
 
     @Override
@@ -103,6 +112,8 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪杞﹁締棰勭害鏃堕棿涓庡凡棰勭害鏃堕棿鍐茬獊~");
         }
         carUseBookMapper.insert(carUseBook);
+        //鐢ㄨ溅鐢宠 瀹℃壒璁板綍鍒涘缓
+        approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId());
         return carUseBook.getId();
     }
 
@@ -155,6 +166,21 @@
                 .eq(CarUseBook::getId,id)
                 .last("limit 1"  );
         CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
+        //瀹℃壒璁板綍
+       List<Approve> approveList = approveJoinMapper.selectJoinList(Approve.class,
+                new MPJLambdaWrapper<Approve>()
+                        .selectAll(Approve.class)
+                        .selectAs(Member::getName,Approve::getMemberName)
+                        .selectAs(Member::getPhone,Approve::getMemberPhone)
+                        .selectAs(Company::getName,Approve::getCompanyName)
+                        .leftJoin(Member.class,Member::getId,Approve::getChekorId)
+                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                        .eq(Approve::getIsdeleted,Constants.ZERO)
+                        .eq(Approve::getObjType,Constants.ONE)
+                        .eq(Approve::getObjId,id)
+                        .orderByAsc(Approve::getLevel)
+        );
+       model.setApproveList(approveList);
         return  model;
     }
 
@@ -207,10 +233,8 @@
                 .le(pageWrap.getModel().getCheckDate() != null, CarUseBook::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()))
                 .eq(pageWrap.getModel().getCheckUserId() != null, CarUseBook::getCheckUserId, pageWrap.getModel().getCheckUserId())
                 .eq(pageWrap.getModel().getCheckInfo() != null, CarUseBook::getCheckInfo, pageWrap.getModel().getCheckInfo())
-                .ge(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getStart(pageWrap.getModel().getCancelType()))
-                .le(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getEnd(pageWrap.getModel().getCancelType()))
-                .ge(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getStart(pageWrap.getModel().getCancelStatus()))
-                .le(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getEnd(pageWrap.getModel().getCancelStatus()))
+                .eq(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType,  pageWrap.getModel().getCancelType())
+                .eq(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, pageWrap.getModel().getCancelStatus())
                 .ge(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getStart(pageWrap.getModel().getCancelTime()))
                 .le(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getEnd(pageWrap.getModel().getCancelTime()))
                 .eq(pageWrap.getModel().getCancelUser() != null, CarUseBook::getCancelUser, pageWrap.getModel().getCancelUser())
@@ -377,11 +401,30 @@
     }
 
 
-    public void revoke(Integer id, LoginUserInfo loginUserInfo){
+    @Override
+    public void revoke(Integer id, String info, LoginUserInfo loginUserInfo){
        CarUseBook carUseBook = carUseBookMapper.selectById(id);
-
-
-
+       if(Objects.isNull(carUseBook)){
+           throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
+       }
+       carUseBook.setCancelInfo(info);
+       carUseBook.setCancelTime(new Date());
+       carUseBook.setCancelStatus(Constants.ONE);
+       carUseBook.setStatus(Constants.FOUR);
+       carUseBook.setCancelUser(loginUserInfo.getId());
+       carUseBook.setCancelType(Constants.ONE);
+       if(loginUserInfo.getId().equals(carUseBook.getCreator())){
+           carUseBook.setCancelType(Constants.ZERO);
+       }
+       carUseBookMapper.updateById(carUseBook);
+       //澶勭悊瀹℃壒璁板綍
+       approveJoinMapper.update(null,new UpdateWrapper<Approve>()
+                .lambda()
+                .set(Approve::getStatus,Constants.FOUR)
+                .set(Approve::getCheckInfo,"鐢ㄨ溅鐢宠鍙栨秷")
+                .in(Approve::getStatus,Constants.ZERO,Constants.ONE)
+                .eq(Approve::getObjId,id)
+        );
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
index 9524c5d..4606604 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
@@ -78,6 +78,7 @@
         model.setEditDate(new Date());
         model.setEditor(loginUserInfo.getId());
         model.setStatus(Constants.ZERO);
+        model.setIsdeleted(Constants.ZERO);
         hiddenDangerParamMapper.insert(model);
         return model.getId();
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
index 5c963de..b1f71a3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -1,40 +1,30 @@
 package com.doumee.service.business.impl;
 
-import cn.emay.sdk.util.StringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
-import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.HiddenDangerMapper;
 import com.doumee.dao.business.HiddenDangerParamMapper;
-import com.doumee.dao.business.model.HiddenDanger;
-import com.doumee.dao.business.model.HiddenDangerParam;
-import com.doumee.dao.system.MultifileMapper;
-import com.doumee.dao.system.model.Multifile;
-import com.doumee.service.business.HiddenDangerParamService;
 import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.model.Multifile;
 import com.doumee.service.business.HiddenDangerService;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.lang3.StringUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 闅愭偅淇℃伅琛⊿ervice瀹炵幇
@@ -47,13 +37,15 @@
     @Autowired
     private HiddenDangerMapper hiddenDangerMapper;
     @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
     private MemberMapper memberMapper;
 
     @Autowired
     private HiddenDangerParamMapper hiddenDangerParamMapper;
 
-    @Autowired
-    private MultifileMapper multifileMapper;
 
     @Override
     public Integer create(HiddenDanger hiddenDanger) {
@@ -134,9 +126,67 @@
 
     @Override
     public HiddenDanger findById(Integer id) {
-        return hiddenDangerMapper.selectById(id);
-    }
+        MPJLambdaWrapper<HiddenDanger> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(HiddenDanger.class)
+                .selectAs(HiddenDangerParam::getName,HiddenDanger::getCategoryName)
+                .select("t1.name", HiddenDanger::getMemberName)
+                .select("t1.phone",HiddenDanger::getMemberPhone)
+                .select("t2.name",HiddenDanger::getCheckorName)
+                .select("t3.phone",HiddenDanger::getCheckorPhone)
+                .select("t4.company_name_path",HiddenDanger::getCompanyName);
+        queryWrapper.leftJoin(Member.class,Member::getId,HiddenDanger::getMemberId)
+                .leftJoin("company t4 on t1.company_id=t4.id")
+                .leftJoin(Member.class,Member::getId,HiddenDanger::getCheckUserId)
+                .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getCateId);
+        queryWrapper
+                .eq(HiddenDanger::getId, id).last("limit 1");
 
+        HiddenDanger model =  hiddenDangerMapper.selectJoinOne(HiddenDanger.class,queryWrapper);
+        if(model ==null || Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        initFiles(model);
+        return model;
+    }
+    private void initFiles(HiddenDanger unionChange) {
+        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId, unionChange.getId() )
+                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.HIDDEN_DANGER_SUBMIT.getKey()
+                        ,Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey()
+                        ,Constants.MultiFile.HIDDEN_DANGER_DEAL_AFTER.getKey()}))
+                .eq(Multifile::getIsdeleted,Constants.ZERO));
+        if(multifiles!=null){
+            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.HIDDEN_DANGER_FILE).getCode();
+            for(Multifile f : multifiles){
+                if(StringUtils.isBlank(f.getFileurl())){
+                    continue;
+                }
+                f.setFileurlFull(path+f.getFileurl());
+                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_SUBMIT.getKey())){
+                    //鐜板満鎯呭喌
+                    if(unionChange.getSubmitFileList() == null){
+                        unionChange.setSubmitFileList(new ArrayList<>());
+                    }
+                    unionChange.getSubmitFileList().add(f);
+                }
+                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey())){
+                    //澶勭悊鍓嶉檮浠�
+                    if(unionChange.getDealBeforeFileList() == null){
+                        unionChange.setDealBeforeFileList(new ArrayList<>());
+                    }
+                    unionChange.getDealBeforeFileList().add(f);
+                }
+                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_DEAL_AFTER.getKey())){
+                    //澶勭悊鍚庨檮浠�
+                    if(unionChange.getDealAfterFileList() == null){
+                        unionChange.setDealAfterFileList(new ArrayList<>());
+                    }
+                    unionChange.getDealAfterFileList().add(f);
+                }
+            }
+        }
+    }
     @Override
     public HiddenDanger findOne(HiddenDanger hiddenDanger) {
         QueryWrapper<HiddenDanger> wrapper = new QueryWrapper<>(hiddenDanger);
@@ -186,6 +236,7 @@
                 .eq(pageWrap.getModel().getChecklInfo() != null, HiddenDanger::getChecklInfo, pageWrap.getModel().getChecklInfo())
                 .eq(pageWrap.getModel().getCheckUserId() != null, HiddenDanger::getCheckUserId, pageWrap.getModel().getCheckUserId())
                 .eq(pageWrap.getModel().getAreaName() != null, HiddenDanger::getAreaName, pageWrap.getModel().getAreaName())
+
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                         .or().like(Member::getPhone,pageWrap.getModel().getMemberName()))
                 .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), Empower::getCreateDate,pageWrap.getModel().getQueryStartTime())
@@ -199,7 +250,7 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(hiddenDangerMapper.selectPage(page, queryWrapper));
+        return PageData.from(hiddenDangerMapper.selectJoinPage(page,HiddenDanger.class, queryWrapper));
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
index 9f11835..48ee0a9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
@@ -1,7 +1,9 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.InterfaceLogMapper;
 import com.doumee.dao.business.model.InterfaceLog;
@@ -26,6 +28,8 @@
 
     @Autowired
     private InterfaceLogMapper interfaceLogMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public Integer create(InterfaceLog interfaceLog) {
@@ -157,8 +161,11 @@
     }
     @Override
     public void clearThreeMonthLog() {
+         int days =15;
+         try {
+             days = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HK_LOG_DEL_DAYS_LIMIT).getCode());
+         }catch (Exception e){}
           interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda()
-                  .apply("to_days(create_date)+15 < to_days(now())")
-                  .like(InterfaceLog::getUrl,"/artemis/api/"));
+                  .apply("to_days(create_date)+"+days+" < to_days(now())") );
     }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index a4ce820..f394837 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -34,6 +34,7 @@
 import com.doumee.dao.admin.response.StagingDataVO;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.dto.RegisterDriverDTO;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.join.MemberJoinMapper;
 import com.doumee.dao.business.join.RetentionJoinMapper;
@@ -48,6 +49,7 @@
 import com.doumee.dao.web.response.MemberVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
+import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
 import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -119,6 +121,8 @@
     @Autowired
     private SystemUserMapper systemUserMapper;
 
+    @Autowired
+    private SmsEmailService smsEmailService;
 
     @Value("${debug_model}")
     private Boolean isDebug;
@@ -1932,6 +1936,57 @@
     }
 
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void registerDriver(RegisterDriverDTO registerDriverDTO){
+        if(Objects.isNull(registerDriverDTO)
+        || StringUtils.isBlank(registerDriverDTO.getName())
+                || StringUtils.isBlank(registerDriverDTO.getPassword())
+                || StringUtils.isBlank(registerDriverDTO.getValidCode())
+                || StringUtils.isBlank(registerDriverDTO.getPhone())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                .eq(Member::getIsdeleted,Constants.ZERO)
+                .eq(Member::getPhone,registerDriverDTO.getPhone())
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙峰凡娉ㄥ唽!");
+        };
+        if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
+                .eq(SystemUser::getDeleted,Constants.ZERO)
+                        .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙峰凡娉ㄥ唽!");
+        };
+
+        smsEmailService.validateCode(registerDriverDTO.getValidCode(),registerDriverDTO.getPhone());
+        String salt = RandomStringUtils.randomAlphabetic(6);
+       ;
+        Member member = new Member();
+        member.setCreateDate(new Date());
+        member.setIsdeleted(Constants.ZERO);
+        member.setType(Constants.TWO);
+        member.setName(registerDriverDTO.getName());
+        member.setPhone(registerDriverDTO.getPhone());
+        member.setStatus(Constants.ZERO);
+        member.setPassward(Utils.Secure.encryptPassword(registerDriverDTO.getPassword(), salt));
+        memberMapper.insert(member);
+
+
+        SystemUser systemUser = new SystemUser();
+        systemUser.setCreateTime(new Date());
+        systemUser.setDeleted(Boolean.FALSE);
+        systemUser.setUsername(registerDriverDTO.getPhone());
+        systemUser.setRealname(registerDriverDTO.getName());
+        systemUser.setMemberId(member.getId());
+        systemUser.setSalt(salt);
+        systemUser.setPassword(member.getPassward());
+        systemUser.setStatus(Constants.ZERO);
+        systemUserMapper.insert(systemUser);
+
+    }
+
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
index 99055b2..b5038a0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
@@ -1,9 +1,12 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.PlatformInterfaceLogMapper;
+import com.doumee.dao.business.model.InterfaceLog;
 import com.doumee.dao.business.model.PlatformInterfaceLog;
 import com.doumee.service.business.PlatformInterfaceLogService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -23,6 +26,9 @@
  */
 @Service
 public class PlatformInterfaceLogServiceImpl implements PlatformInterfaceLogService {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Autowired
     private PlatformInterfaceLogMapper platformInterfaceLogMapper;
@@ -125,4 +131,13 @@
         QueryWrapper<PlatformInterfaceLog> wrapper = new QueryWrapper<>(platformInterfaceLog);
         return platformInterfaceLogMapper.selectCount(wrapper);
     }
+    @Override
+    public void clearThreeMonthLog() {
+        int days =15;
+        try {
+            days = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.LOG_DEL_DAYS_LIMIT).getCode());
+        }catch (Exception e){}
+        platformInterfaceLogMapper.delete(new UpdateWrapper<PlatformInterfaceLog>().lambda()
+                .apply("to_days(create_date)+"+days+" < to_days(now())"));
+    }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 55ca0be..59ca333 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -39,6 +39,7 @@
 import com.doumee.dao.web.reqeust.VisitRecordDTO;
 import com.doumee.dao.web.response.VisitDetailVO;
 import com.doumee.dao.web.response.VisitRecordVO;
+import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.InterfaceLogService;
 import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.VisitsService;
@@ -104,6 +105,8 @@
     private SmsEmailService smsEmailService;
     @Autowired
     private SystemUserMapper systemUserMapper;
+    @Autowired
+    private ApproveService approveService;
 
 
     @Override
@@ -237,6 +240,7 @@
         }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
             visits.setStatus(Constants.VisitStatus.pass);
             visitsMapper.updateById(visits);
+            approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
         }else{
             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鍙戣捣鎷滆瀹℃壒鐢宠澶辫触锛�");
         }
@@ -490,7 +494,6 @@
                 .eq(ApproveParam::getMemberType,Constants.ZERO)
                 .last("limit 1"));
          return  Objects.isNull(approveParam)?null:approveParam.getId();
-
     }
 
 
@@ -1356,8 +1359,6 @@
         dto.setId(systemUser.getId());
         dto.setOperaUserId(systemUser.getId());
         systemUserBiz.resetPwd(dto);
-
-
     }
 
 }

--
Gitblit v1.9.3