From e6c44608f25355eda2c86b3e1356682996194a64 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 22 五月 2024 18:05:59 +0800
Subject: [PATCH] 最新版本

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                          |  151 ++++++
 server/system_service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java                         |    3 
 admin/src/api/system/role.js                                                                                      |    7 
 server/system_service/src/main/java/com/doumee/biz/system/SystemRoleBiz.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 
 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         |   76 +++
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java                             |   32 +
 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/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/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml                                   |   31 +
 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/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/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java         |   72 ++
 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                            |    4 
 admin/src/api/timer/timer.js                                                                                      |   31 +
 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/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/system_service/src/main/java/com/doumee/core/aware/DefaultDataPermissionAware.java                         |    2 
 admin/src/views/timer/timer.vue                                                                                   |  168 +++++++
 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_service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java           |  159 ++++++
 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/InterfaceLogServiceImpl.java         |   11 
 server/system_timer/src/main/java/com/doumee/api/timer/QuartzCloudController.java                                 |   79 +++
 admin/src/views/system/role.vue                                                                                   |   25 
 admin/src/components/base/BaseTable.vue                                                                           |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java                       |   11 
 44 files changed, 1,300 insertions(+), 76 deletions(-)

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/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 f4c5706..b6d0e88 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,16 +5,15 @@
 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;
 import java.math.BigDecimal;
 import java.net.URLDecoder;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import  java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.Date;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -87,6 +86,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;
@@ -115,7 +118,14 @@
     // 瓒呮椂棰勮閰嶇疆
     public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
     // FTP鏂囦欢鏈嶅姟鍣ㄨ祫婧愯闂湴鍧�
-
+    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;
@@ -686,7 +696,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..bcce7d2a 100644
--- a/server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
+++ b/server/system_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
@@ -43,5 +43,34 @@
     </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="role.companyId != null">
+        AND role.`COMPANY_ID` =  #{role.companyId}
+      </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.STATUS=0 and sr.deleted=0)
+      </if>
+    </where>
+    order by role.`TYPE` asc
+  </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_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/model/Approve.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
index 05d9e2e..0d25cc0 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
@@ -68,8 +68,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 = "鐘舵�佷俊鎭�")
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/HiddenDanger.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
index 8878ba9..8336948 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
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 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;
@@ -11,6 +12,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 闅愭偅淇℃伅琛�
@@ -122,5 +124,14 @@
     @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;
 
 }
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/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/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/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/HiddenDangerParamServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
index 437393f..6551e4e 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 d1351e6..c5113c3 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,5 +1,6 @@
 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.LoginUserInfo;
@@ -10,6 +11,8 @@
 import com.doumee.dao.business.HiddenDangerMapper;
 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;
@@ -22,9 +25,7 @@
 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瀹炵幇
@@ -36,6 +37,10 @@
 
     @Autowired
     private HiddenDangerMapper hiddenDangerMapper;
+    @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
     @Autowired
     private MemberMapper memberMapper;
 
@@ -82,9 +87,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);
@@ -134,6 +197,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())
@@ -147,7 +211,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/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())"));
+    }
 }

--
Gitblit v1.9.3