From 48376938fb04165594a51a8847987669cd80fc63 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 28 十二月 2023 14:13:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/CarEventVo.java                              |   51 +
 server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/DeviceEventVo.java                           |   55 +
 admin/src/components/business/OperaVisitsDesWindow.vue                                                     |   48 +
 server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java                       |   35 +
 admin/src/views/business/laborSource.vue                                                                   |   11 
 server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java             |    1 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java                        |   43 +
 admin/src/views/business/empower.vue                                                                       |   80 ++
 admin/src/views/business/visits.vue                                                                        |   10 
 server/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java                    |    4 
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java                      |    4 
 admin/vue.config.js                                                                                        |    6 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java               |   53 +
 server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java                           |   65 ++
 admin/src/api/system/common.js                                                                             |    5 
 server/dmvisit_service/src/main/java/com/doumee/service/business/DeviceEventService.java                   |    9 
 server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java                           |   53 +
 server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java                           |    7 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/DeviceEventController.java                      |    3 
 server/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java                      |    9 
 admin/src/views/business/blackmailPersonnel.vue                                                            |   89 ++
 admin/src/views/business/freezePersonnel.vue                                                               |   32 
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java                        |    2 
 admin/src/api/business/strandedPersonnel.js                                                                |   45 +
 admin/src/views/business/visitorManagement.vue                                                             |   11 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java                         |   23 
 admin/src/views/business/visitorSources.vue                                                                |   11 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java             |  112 ++-
 server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java                                 |    6 
 server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java                    |    8 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java           |   82 +
 admin/src/views/business/strandedPersonnel.vue                                                             |  125 ++-
 admin/src/api/business/cars.js                                                                             |   10 
 admin/src/views/business/parks.vue                                                                         |   46 
 server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java                                    |    1 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java          |  107 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java           |    1 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java |    1 
 server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java                        |    9 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java              |    1 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java           |    6 
 server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java                             |   68 +-
 server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java                       |    3 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                             |    2 
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java                     |    2 
 admin/src/api/business/parks.js                                                                            |    7 
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java                      |    2 
 server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java                                  |   98 +-
 admin/src/views/business/deviceRole.vue                                                                    |    6 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java    |    1 
 admin/src/utils/util.js                                                                                    |   14 
 server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/VisitEventVo.java                            |   47 +
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java                        |   39 +
 server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java                                 |    8 
 admin/src/views/business/cars.vue                                                                          |   51 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java           |   65 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java               |    5 
 server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java                                  |    9 
 server/pom.xml                                                                                             |   30 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java            |    8 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/CarEventController.java                         |    3 
 61 files changed, 1,354 insertions(+), 394 deletions(-)

diff --git a/admin/src/api/business/cars.js b/admin/src/api/business/cars.js
index 6aba135..f5efbe0 100644
--- a/admin/src/api/business/cars.js
+++ b/admin/src/api/business/cars.js
@@ -2,29 +2,29 @@
 
 // 鏌ヨ
 export function fetchList (data) {
-  return request.post('/business/cars/page', data, {
+  return request.post('/business/parkBook/page', data, {
     trim: true
   })
 }
 
 // 鍒涘缓
 export function create (data) {
-  return request.post('/business/cars/create', data)
+  return request.post('/business/parkBook/create', data)
 }
 
 // 淇敼
 export function updateById (data) {
-  return request.post('/business/cars/updateById', data)
+  return request.post('/business/parkBook/updateById', data)
 }
 
 // 鍒犻櫎
 export function deleteById (id) {
-  return request.get(`/business/cars/delete/${id}`)
+  return request.get(`/business/parkBook/delete/${id}`)
 }
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
-  return request.get('/business/cars/delete/batch', {
+  return request.get('/business/parkBook/delete/batch', {
     params: {
       ids
     }
diff --git a/admin/src/api/business/parks.js b/admin/src/api/business/parks.js
index d104bc2..57f053b 100644
--- a/admin/src/api/business/parks.js
+++ b/admin/src/api/business/parks.js
@@ -6,3 +6,10 @@
     trim: true
   })
 }
+
+// 鎵�灞炲仠杞﹀満鍒楄〃
+export function findList (data) {
+  return request.post('/business/parks/findList', data, {
+    trim: true
+  })
+}
diff --git a/admin/src/api/business/strandedPersonnel.js b/admin/src/api/business/strandedPersonnel.js
new file mode 100644
index 0000000..76f2b35
--- /dev/null
+++ b/admin/src/api/business/strandedPersonnel.js
@@ -0,0 +1,45 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/visits/retentionPage', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/visits/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/visits/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/visits/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/visits/delete/${id}`)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function queryById (id) {
+  return request.get(`/business/visits/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/business/visits/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/admin/src/api/system/common.js b/admin/src/api/system/common.js
index b116149..157c8c7 100644
--- a/admin/src/api/system/common.js
+++ b/admin/src/api/system/common.js
@@ -46,3 +46,8 @@
 export function updateLaborConfigDTO (data) {
   return request.post('/system/dictData/updateLaborConfigDTO', data)
 }
+
+// 鍒嗛〉鏌ヨ绯荤粺鐢ㄦ埛
+export function findAllList (data) {
+  return request.post('/system/user/findAllList', data)
+}
diff --git a/admin/src/components/business/OperaVisitsDesWindow.vue b/admin/src/components/business/OperaVisitsDesWindow.vue
index 9cf9b28..6170e27 100644
--- a/admin/src/components/business/OperaVisitsDesWindow.vue
+++ b/admin/src/components/business/OperaVisitsDesWindow.vue
@@ -23,7 +23,7 @@
                 <div class="list_item_info" v-if="info">闅忚杞﹁締锛歿{info.carNos}}</div>
                 <div class="list_item_table" v-if="info">
                     <el-table
-                        :data="info.lwWithUserList ? info.lwWithUserList : []"
+                        :data="info.withUserList ? info.withUserList : []"
                         border
                         :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}"
                         style="width: 100%">
@@ -41,8 +41,12 @@
                         <el-table-column
                             prop="birthday"
                             label="骞撮緞">
+                            <template slot-scope="{row}">
+                                <span>{{getAge(row.birthday)}}</span>
+                            </template>
                         </el-table-column>
                         <el-table-column
+                            width="150"
                             prop="phone"
                             label="鎵嬫満鍙�">
                         </el-table-column>
@@ -55,7 +59,8 @@
                             </template>
                         </el-table-column>
                         <el-table-column
-                            prop="idcardNo"
+                            width="160"
+                            prop="idcardDecode"
                             label="韬唤璇佸彿鐮�">
                         </el-table-column>
                         <el-table-column
@@ -63,12 +68,28 @@
                             label="鍏徃">
                         </el-table-column>
                         <el-table-column
-                            prop="faceImg"
+                            width="150"
                             label="浜鸿劯鐓х墖">
+                            <template slot-scope="{row}">
+                                <el-image
+                                    v-if="row.faceImg"
+                                    style="width: 100px; height: 100px"
+                                    :src="info.prefixUrl + row.faceImg"
+                                    :preview-src-list="[info.prefixUrl + row.faceImg]">
+                                </el-image>
+                            </template>
                         </el-table-column>
                         <el-table-column
-                            prop="imgurl"
+                            width="150"
                             label="鍋ュ悍璇�">
+                            <template slot-scope="{row}">
+                                <el-image
+                                    v-if="row.imgurl"
+                                    style="width: 100px; height: 100px"
+                                    :src="info.prefixUrl + row.imgurl"
+                                    :preview-src-list="[info.prefixUrl + row.imgurl]">
+                                </el-image>
+                            </template>
                         </el-table-column>
                     </el-table>
                 </div>
@@ -106,6 +127,19 @@
     }
   },
   methods: {
+    getAge (val) {
+      if (!val) return ''
+      const currentYear = new Date().getFullYear() // 褰撳墠鐨勫勾浠�
+      const calculationYear = new Date(val).getFullYear() // 璁$畻鐨勫勾浠�
+      const wholeTime = currentYear + val.substring(4) // 鍛ㄥ瞾鏃堕棿
+      const calculationAge = currentYear - calculationYear // 鎸夌収骞翠唤璁$畻鐨勫勾榫�
+      // 鍒ゆ柇鏄惁杩囦簡鐢熸棩
+      if (new Date().getTime() > new Date(wholeTime).getTime()) {
+        return calculationAge
+      } else {
+        return calculationAge - 1
+      }
+    },
     open (title, id) {
       this.title = title
       this.visible = true
@@ -118,7 +152,11 @@
   }
 }
 </script>
-
+<style>
+    .el-image-viewer__wrapper {
+        z-index: 3000 !important;
+    }
+</style>
 <style lang="scss" scoped>
     .list {
         width: 100%;
diff --git a/admin/src/utils/util.js b/admin/src/utils/util.js
index 48cf55e..26071e0 100644
--- a/admin/src/utils/util.js
+++ b/admin/src/utils/util.js
@@ -41,3 +41,17 @@
   const timer2 = Y2 + '-' + M2 + '-' + D2 + ' ' + '00:00:00' // 涔嬪墠鐨�7澶╂垨鑰�30澶�
   return [timer2, timer1]
 }
+
+/**
+ * 鏈夋晥鏈熷垽鏂�
+ * @param startTime 寮�濮嬫棩鏈�
+ * @param endTime 缁撴潫鏃ユ湡
+ * @returns {string}
+ */
+export function validity (startTime, endTime) {
+  if (startTime && endTime) {
+    return `${startTime} 鑷� ${endTime}`
+  } else {
+    return '闀挎湡'
+  }
+}
diff --git a/admin/src/views/business/blackmailPersonnel.vue b/admin/src/views/business/blackmailPersonnel.vue
index 8d52eb5..a61b5e9 100644
--- a/admin/src/views/business/blackmailPersonnel.vue
+++ b/admin/src/views/business/blackmailPersonnel.vue
@@ -2,33 +2,26 @@
     <TableLayout :permissions="['business:member:query']">
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="濮撳悕" prop="name">
-                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ瀹㈠悕绉�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="鎵嬫満鍙�" prop="code">
-                <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="鍏徃鍚嶇О" prop="companyName">
+                <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="鍏徃鍚嶇О" prop="code">
-                <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
-            </el-form-item>
-            <el-form-item label="鎿嶄綔浜哄憳" prop="code">
-                <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
+            <el-form-item label="鎿嶄綔浜哄憳" prop="createrId">
+                <el-select v-model="searchForm.createrId" placeholder="璇烽�夋嫨">
                     <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
+                        v-for="item in user"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="浜哄憳绫诲瀷" prop="companyId">
-                <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
-                    <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
-                    </el-option>
+            <el-form-item label="浜哄憳绫诲瀷" prop="type">
+                <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
+                    <el-option label="璁垮" value="1"></el-option>
+                    <el-option label="鍔冲姟" value="0"></el-option>
                 </el-select>
             </el-form-item>
             <section>
@@ -39,7 +32,7 @@
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
-                <li><el-button type="primary" v-permissions="['business:member:create']">绉诲嚭</el-button></li>
+                <li><el-button type="primary" v-permissions="['business:member:create']" @click="thaws">绉诲嚭</el-button></li>
             </ul>
             <el-table
                 v-loading="isWorking.search"
@@ -50,7 +43,7 @@
                 <el-table-column type="selection" width="55"></el-table-column>
                 <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
                 <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="idcard_id" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+                <el-table-column prop="idcardDecode" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
                 <el-table-column label="浜哄憳绫诲瀷" min-width="100px">
                     <template slot-scope="{row}">
                         <span v-if="row.type === 0">鍔冲姟璁垮</span>
@@ -58,7 +51,7 @@
                         <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="company_id" label="鍏徃" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="鍏徃" min-width="100px"></el-table-column>
                 <el-table-column prop="edit_date" label="鎿嶄綔鏃堕棿" min-width="100px"></el-table-column>
                 <el-table-column prop="editor" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
                 <el-table-column
@@ -68,7 +61,7 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']">绉诲嚭</el-button>
+                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']" @click="thaw(row.id)">绉诲嚭</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -86,6 +79,8 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { findAllList } from '@/api/system/common'
+import { updateRemoveStatusById } from '@/api/business/block'
 export default {
   name: 'blackmailPersonnel',
   extends: BaseTable,
@@ -94,13 +89,13 @@
     return {
       // 鎼滅储
       searchForm: {
-        companyId: '',
+        companyName: '',
         name: '',
-        code: '',
+        createrId: '',
         status: 2,
-        type: 1
+        type: '1'
       },
-      options: []
+      user: []
     }
   },
   created () {
@@ -111,6 +106,42 @@
       'field.main': 'id'
     })
     this.search()
+    this.getUser()
+  },
+  methods: {
+    thaws () {
+      if (this.tableData.selectedRows.length === 0) return this.$message.warning('鑷冲皯閫夋嫨涓�椤瑰唴瀹�')
+      const ids = this.tableData.selectedRows.map(item => {
+        return { id: item.id }
+      })
+      this.thaw(ids)
+    },
+    thaw (ids) {
+      this.$confirm('纭畾绉婚櫎姝ょ敤鎴峰悧?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        updateRemoveStatusById(ids)
+          .then(res => {
+            this.$message.success('鎿嶄綔鎴愬姛')
+            this.search()
+          })
+      }).catch(() => {
+
+      })
+    },
+    getUser () {
+      findAllList({})
+        .then(res => {
+          this.user = res.map(item => {
+            return {
+              name: item.realname,
+              id: item.id
+            }
+          })
+        })
+    }
   }
 }
 </script>
diff --git a/admin/src/views/business/cars.vue b/admin/src/views/business/cars.vue
index f135dec..84cb295 100644
--- a/admin/src/views/business/cars.vue
+++ b/admin/src/views/business/cars.vue
@@ -5,18 +5,11 @@
             <el-form-item label="杞︾墝鍙�" prop="code">
                 <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="鍛樺伐濮撳悕/鎵嬫満鍙�" prop="code">
-                <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ憳宸ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="鍛樺伐濮撳悕/鎵嬫満鍙�" prop="memberName">
+                <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ憳宸ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="閮ㄩ棬" prop="code">
-                <el-select v-model="value" placeholder="璇烽�夋嫨">
-                    <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
-                    </el-option>
-                </el-select>
+            <el-form-item label="閮ㄩ棬" prop="companyName">
+                <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ラ儴闂�" @keypress.enter.native="search"></el-input>
             </el-form-item>
             <section>
                 <el-button type="primary" @click="search">鎼滅储</el-button>
@@ -26,7 +19,7 @@
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
-                <li><el-button type="primary" @click="$refs.operaCarsWindow.open('鏂板缓杞﹁締淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:member:create']">鏂板缓</el-button></li>
+<!--                <li><el-button type="primary" @click="$refs.operaCarsWindow.open('鏂板缓杞﹁締淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:member:create']">鏂板缓</el-button></li>-->
                 <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button></li>
             </ul>
             <el-table
@@ -37,13 +30,25 @@
             >
                 <el-table-column type="selection" width="55"></el-table-column>
                 <el-table-column prop="code" label="杞︾墝鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="code" label="鍋滆溅鍦�" min-width="100px"></el-table-column>
-                <el-table-column prop="remark" label="鐢ㄦ埛绫诲瀷" min-width="100px"></el-table-column>
-                <el-table-column prop="remark" label="濮撳悕" min-width="100px"></el-table-column>
-                <el-table-column prop="remark" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="remark" label="閮ㄩ棬/鍏徃" min-width="100px"></el-table-column>
+                <el-table-column prop="parksName" label="鍋滆溅鍦�" min-width="100px"></el-table-column>
+                <el-table-column label="鐢ㄦ埛绫诲瀷" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span v-if="row.memberType === 0">鍔冲姟璁垮</span>
+                        <span v-if="row.memberType === 1">鏅�氳瀹�</span>
+                        <span v-if="row.memberType === 2">鍐呴儴浜哄憳</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="memberName" label="濮撳悕" min-width="100px"></el-table-column>
+                <el-table-column prop="memberPhone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="閮ㄩ棬/鍏徃" min-width="100px"></el-table-column>
                 <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
-                <el-table-column prop="remark" label="鏈夋晥鏈�" min-width="100px"></el-table-column>
+                <el-table-column prop="remark" label="鏈夋晥鏈�" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span>{{validity(row.startTime, row.endTime)}}</span>
+<!--                        <span v-if="!row.startTime || !row.endTime">闀挎湡</span>-->
+<!--                        <span v-else>{{row.startTime}} 鑷� {{row.endTime}}</span>-->
+                    </template>
+                </el-table-column>
                 <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
                 <el-table-column
                     v-if="containPermissions(['business:member:update', 'business:member:delete'])"
@@ -52,7 +57,7 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.operaCarsWindow.open('缂栬緫杞﹁締淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:member:update']">缂栬緫</el-button>
+<!--                        <el-button type="text" @click="$refs.operaCarsWindow.open('缂栬緫杞﹁締淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:member:update']">缂栬緫</el-button>-->
                         <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button>
                     </template>
                 </el-table-column>
@@ -74,6 +79,7 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaCarsWindow from '@/components/business/OperaCarsWindow'
+import { validity } from '@/utils/util'
 export default {
   name: 'Cars',
   extends: BaseTable,
@@ -82,9 +88,10 @@
     return {
       // 鎼滅储
       searchForm: {
-        code: ''
-      },
-      options: []
+        code: '',
+        memberName: '',
+        companyName: ''
+      }
     }
   },
   created () {
diff --git a/admin/src/views/business/deviceRole.vue b/admin/src/views/business/deviceRole.vue
index 221feb0..13129b7 100644
--- a/admin/src/views/business/deviceRole.vue
+++ b/admin/src/views/business/deviceRole.vue
@@ -28,7 +28,7 @@
                 <el-table-column prop="isDefault" label="鏄惁榛樿" min-width="100px">
                     <template slot-scope="{row}">
                         <el-switch
-                            @change="changeIsDefault"
+                            @change="changeIsDefault($event, row.id)"
                             v-model="row.isDefault"
                             active-color="#13ce66"
                             inactive-color="#ff4949"
@@ -91,8 +91,8 @@
     this.search()
   },
   methods: {
-    changeIsDefault (r) {
-      updateStatusById({ isDefault: r, type: 2 })
+    changeIsDefault (r, id) {
+      updateStatusById({ isDefault: r, type: 2, id })
         .finally(() => {
           this.search()
         })
diff --git a/admin/src/views/business/empower.vue b/admin/src/views/business/empower.vue
index a6373f5..e65ceac 100644
--- a/admin/src/views/business/empower.vue
+++ b/admin/src/views/business/empower.vue
@@ -2,34 +2,45 @@
     <TableLayout :permissions="['business:empower:query']">
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="濮撳悕鎵嬫満鍙�" prop="startTime">
-                <el-input v-model="searchForm.startTime" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="濮撳悕鎵嬫満鍙�" prop="keyWords">
+                <el-input v-model="searchForm.keyWords" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
             </el-form-item>
             <el-form-item label="涓嬪彂鐘舵��" prop="sendStatus">
-                <el-select v-model="searchForm.sendStatus" placeholder="璇烽�夋嫨">
+                <el-select v-model="searchForm.sendStatus" placeholder="璇烽�夋嫨" @keypress.enter.native="search">
                     <el-option label="寰呬笅鍙�" value="0"></el-option>
                     <el-option label="宸蹭笅鍙�" value="1"></el-option>
-                    <el-option label="宸插彇娑�" value="2"></el-option>
+                    <el-option label="涓嬪彂鎴愬姛" value="2"></el-option>
+                    <el-option label="宸插彇娑�" value="3"></el-option>
+                    <el-option label="涓嬪彂澶辫触" value="4"></el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="鍏徃" prop="sendStatus">
-                <el-select v-model="searchForm.sendStatus" placeholder="璇烽�夋嫨鍏徃">
+            <el-form-item label="鍏徃" prop="companyId">
+                <el-select v-model="searchForm.companyId" placeholder="璇烽�夋嫨鍏徃" @keypress.enter.native="search">
                     <el-option label="寰呬笅鍙�" value="0"></el-option>
                     <el-option label="宸蹭笅鍙�" value="1"></el-option>
                     <el-option label="宸插彇娑�" value="2"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="涓嬪彂璧峰鏃堕棿" prop="startTime">
-                <el-input v-model="searchForm.startTime" placeholder="璇疯緭鍏ラ棬绂佹湁鏁堟湡寮�濮�" @keypress.enter.native="search"></el-input>
+                <el-date-picker
+                    @change="seleTime"
+                    v-model="time"
+                    @keypress.enter.native="search"
+                    type="datetimerange"
+                    format="yyyy-MM-dd HH:mm:ss"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                    range-separator="鑷�"
+                    start-placeholder="寮�濮嬫棩鏈�"
+                    end-placeholder="缁撴潫鏃ユ湡">
+                </el-date-picker>
             </el-form-item>
-            <el-radio-group v-model="searchForm.eventType" size="small">
-                <el-radio-button label="褰撳ぉ"></el-radio-button>
-                <el-radio-button label="杩�7澶�"></el-radio-button>
-                <el-radio-button label="杩�30澶�"></el-radio-button>
+            <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
+                <el-radio-button label="0">褰撳ぉ</el-radio-button>
+                <el-radio-button label="1">杩�7澶�</el-radio-button>
+                <el-radio-button label="2">杩�30澶�</el-radio-button>
             </el-radio-group>
             <section>
                 <el-button type="primary" @click="search">鎼滅储</el-button>
-<!--                <el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>-->
                 <el-button @click="reset">閲嶇疆</el-button>
             </section>
         </el-form>
@@ -37,8 +48,8 @@
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:empower:create', 'business:empower:delete']">
                 <li><el-button type="primary" v-permissions="['business:empower:create']">瀵煎嚭</el-button></li>
-                <li><el-button type="primary" v-permissions="['business:empower:create']">绔嬪嵆涓嬪彂</el-button></li>
-                <li><el-button type="primary" v-permissions="['business:empower:create']">鍙栨秷涓嬪彂</el-button></li>
+<!--                <li><el-button type="primary" v-permissions="['business:empower:create']">绔嬪嵆涓嬪彂</el-button></li>-->
+<!--                <li><el-button type="primary" v-permissions="['business:empower:create']">鍙栨秷涓嬪彂</el-button></li>-->
             </ul>
             <el-table
                 v-loading="isWorking.search"
@@ -89,6 +100,7 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { timeForMat } from '@/utils/util'
 export default {
   name: 'Empower',
   extends: BaseTable,
@@ -97,10 +109,14 @@
     return {
       // 鎼滅储
       searchForm: {
+        keyWords: '',
+        companyId: '',
         startTime: '',
         endTime: '',
-        sendStatus: ''
-      }
+        sendStatus: '',
+        radio: null
+      },
+      time: []
     }
   },
   created () {
@@ -111,6 +127,38 @@
       'field.main': 'id'
     })
     this.search()
+  },
+  methods: {
+    changeRadio (e) {
+      if (e === '0') {
+        this.searchForm.startTime = timeForMat(1)[0]
+        this.searchForm.endTime = timeForMat(1)[1]
+        this.time = timeForMat(1)
+      } else if (e === '1') {
+        this.searchForm.startTime = timeForMat(7)[0]
+        this.searchForm.endTime = timeForMat(7)[1]
+        this.time = timeForMat(7)
+      } else if (e === '2') {
+        this.searchForm.startTime = timeForMat(30)[0]
+        this.searchForm.endTime = timeForMat(30)[1]
+        this.time = timeForMat(30)
+      }
+      this.search()
+    },
+    seleTime (e) {
+      this.searchForm.startTime = e[0]
+      this.searchForm.endTime = e[1]
+      this.searchForm.radio = null
+      this.search()
+    },
+    reset () {
+      this.$refs.searchForm.resetFields()
+      this.searchForm.startTime = ''
+      this.searchForm.endTime = ''
+      this.time = []
+      this.searchForm.radio = null
+      this.search()
+    }
   }
 }
 </script>
diff --git a/admin/src/views/business/freezePersonnel.vue b/admin/src/views/business/freezePersonnel.vue
index 9bbe5f7..160a642 100644
--- a/admin/src/views/business/freezePersonnel.vue
+++ b/admin/src/views/business/freezePersonnel.vue
@@ -26,7 +26,7 @@
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
-                <li><el-button type="primary" v-permissions="['business:member:create']">瑙e喕</el-button></li>
+                <li><el-button type="primary" v-permissions="['business:member:create']" @click="thaws()">瑙e喕</el-button></li>
                 <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
             </ul>
             <el-table
@@ -37,7 +37,7 @@
             >
                 <el-table-column type="selection" width="55"></el-table-column>
                 <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
-                <el-table-column prop="companyId" label="閮ㄩ棬" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="閮ㄩ棬" min-width="100px"></el-table-column>
                 <el-table-column prop="code" label="宸ュ彿" min-width="100px"></el-table-column>
                 <el-table-column prop="visitsLastDate" label="鏈�鍚庝竴娆¢棬绂佹椂闂�" min-width="100px"></el-table-column>
                 <el-table-column prop="userActionType1" label="鍐荤粨鏃堕棿" min-width="100px"></el-table-column>
@@ -48,7 +48,7 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']">瑙e喕</el-button>
+                        <el-button type="text" @click="thaw([{id: row.id}])" icon="el-icon-edit" v-permissions="['business:member:update']">瑙e喕</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -86,7 +86,7 @@
   },
   created () {
     this.config({
-      module: '浜哄憳淇℃伅琛�',
+      module: '鍐荤粨浜哄憳',
       api: '/business/block',
       'field.id': 'id',
       'field.main': 'id'
@@ -95,6 +95,28 @@
     this.getfindCompanyTreePage()
   },
   methods: {
+    thaws () {
+      if (this.tableData.selectedRows.length === 0) return this.$message.warning('鑷冲皯閫夋嫨涓�椤瑰唴瀹�')
+      const ids = this.tableData.selectedRows.map(item => {
+        return { id: item.id }
+      })
+      this.thaw(ids)
+    },
+    thaw (ids) {
+      this.$confirm('纭畾瑙e喕姝ょ敤鎴峰悧?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        updateRemoveStatusById(ids)
+          .then(res => {
+            this.$message.success('鎿嶄綔鎴愬姛')
+            this.search()
+          })
+      }).catch(() => {
+
+      })
+    },
     changeCompanyId (e) {
       this.searchForm.companyId = e[e.length - 1]
     },
@@ -102,9 +124,7 @@
     getfindCompanyTreePage () {
       findCompanyTreePage(1)
         .then(res => {
-          console.log(res)
           this.options = res
-          // this.search()
         })
     }
   }
diff --git a/admin/src/views/business/laborSource.vue b/admin/src/views/business/laborSource.vue
index 7575406..305de49 100644
--- a/admin/src/views/business/laborSource.vue
+++ b/admin/src/views/business/laborSource.vue
@@ -68,18 +68,17 @@
     getData () {
       getLaborConfigDTO({})
         .then(res => {
-          this.form.id = res.id
-          this.form.checkVisit = res.LaborConfigParam.checkVisit
+          this.form.checkVisit = res.laborConfigParam.checkVisit
           this.form.description = res.description
-          this.form.healthCard = res.LaborConfigParam.healthCard
-          this.form.isAnswer = res.LaborConfigParam.isAnswer
-          this.form.reservationWay = res.LaborConfigParam.reservationWay
+          this.form.healthCard = res.laborConfigParam.healthCard
+          this.form.isAnswer = res.laborConfigParam.isAnswer
+          this.form.reservationWay = res.laborConfigParam.reservationWay
           this.form.theme = res.theme
         })
     },
     submit () {
       updateLaborConfigDTO({
-        LaborConfigParam: {
+        laborConfigParam: {
           isAnswer: this.form.isAnswer,
           healthCard: this.form.healthCard,
           checkVisit: this.form.checkVisit,
diff --git a/admin/src/views/business/parks.vue b/admin/src/views/business/parks.vue
index 9817b0b..f0beb14 100644
--- a/admin/src/views/business/parks.vue
+++ b/admin/src/views/business/parks.vue
@@ -2,16 +2,16 @@
     <TableLayout :permissions="['business:member:query']">
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="鍋滆溅搴撳悕绉�" prop="title">
-                <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ュ仠杞﹀簱鍚嶇О" @keypress.enter.native="search"></el-input>
+            <el-form-item label="鍋滆溅搴撳悕绉�" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ仠杞﹀簱鍚嶇О" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="鎵�灞炲仠杞﹀簱" prop="title">
-                <el-select v-model="searchForm.title" placeholder="璇烽�夋嫨">
+            <el-form-item label="鎵�灞炲仠杞﹀簱" prop="parentHkId">
+                <el-select v-model="searchForm.parentHkId" placeholder="璇烽�夋嫨">
                     <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
+                        v-for="item in list"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
                     </el-option>
                 </el-select>
             </el-form-item>
@@ -30,15 +30,15 @@
                 :data="tableData.list"
                 stripe
             >
-                <el-table-column prop="createDate" label="鍋滆溅搴撳悕绉�" min-width="100px"></el-table-column>
-                <el-table-column prop="createDate" label="鎵�灞炲仠杞﹀簱" min-width="100px"></el-table-column>
-                <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-                <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="name" label="鍋滆溅搴撳悕绉�" min-width="100px"></el-table-column>
+                <el-table-column prop="parentName" label="鎵�灞炲仠杞﹀簱" min-width="100px"></el-table-column>
+                <el-table-column prop="parkCreateDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="parkEditDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
             </el-table>
             <pagination
-                    @size-change="handleSizeChange"
-                    @current-change="handlePageChange"
-                    :pagination="tableData.pagination"
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
             >
             </pagination>
         </template>
@@ -49,6 +49,7 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { findList } from '@/api/business/parks'
 export default {
   name: 'Parks',
   extends: BaseTable,
@@ -57,9 +58,10 @@
     return {
       // 鎼滅储
       searchForm: {
-        title: ''
+        name: '',
+        parentHkId: ''
       },
-      options: []
+      list: []
     }
   },
   created () {
@@ -70,6 +72,16 @@
       'field.main': 'id'
     })
     this.search()
+    this.getfindList()
+  },
+  methods: {
+    getfindList () {
+      findList({})
+        .then(res => {
+          this.list = res
+          console.log(res)
+        })
+    }
   }
 }
 </script>
diff --git a/admin/src/views/business/strandedPersonnel.vue b/admin/src/views/business/strandedPersonnel.vue
index 0ea6dd6..904b9a6 100644
--- a/admin/src/views/business/strandedPersonnel.vue
+++ b/admin/src/views/business/strandedPersonnel.vue
@@ -5,27 +5,13 @@
             <el-form-item label="濮撳悕" prop="name">
                 <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ瀹㈠悕绉�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="鍏徃鍚嶇О" prop="code">
-                <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="鍏徃鍚嶇О" prop="companyName">
+                <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="鎿嶄綔浜哄憳" prop="code">
-                <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
-                    <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
-                    </el-option>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="鐢ㄦ埛绫诲瀷" prop="companyId">
-                <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
-                    <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
-                    </el-option>
+            <el-form-item label="鐢ㄦ埛绫诲瀷" prop="type">
+                <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
+                    <el-option label="璁垮" value="1"></el-option>
+                    <el-option label="鍔冲姟" value="0"></el-option>
                 </el-select>
             </el-form-item>
             <section>
@@ -35,19 +21,19 @@
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
-            <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
-                <li><el-button type="primary" v-permissions="['business:member:create']">绂诲満</el-button></li>
-            </ul>
+<!--            <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">-->
+<!--                <li><el-button type="primary" v-permissions="['business:member:create']" @click="thaws">绂诲満</el-button></li>-->
+<!--            </ul>-->
             <el-table
-                    v-loading="isWorking.search"
-                    :data="tableData.list"
-                    stripe
-                    @selection-change="handleSelectionChange"
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+                @selection-change="handleSelectionChange"
             >
-                <el-table-column type="selection" width="55"></el-table-column>
+<!--                <el-table-column type="selection" width="55"></el-table-column>-->
                 <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
                 <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="company_id" label="鍏徃" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="鍏徃" min-width="100px"></el-table-column>
                 <el-table-column label="鐢ㄦ埛绫诲瀷" min-width="100px">
                     <template slot-scope="{row}">
                         <span v-if="row.type === 0">鍔冲姟璁垮</span>
@@ -55,26 +41,31 @@
                         <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="idcard_id" label="鍏ュ満鏃堕棿" min-width="100px"></el-table-column>
-                <el-table-column prop="edit_date" label="鎺堟潈鍒版湡鏃堕棿" min-width="100px"></el-table-column>
-                <el-table-column prop="idcard_id" label="瓒呮椂鏃堕暱" min-width="100px"></el-table-column>
-                <el-table-column prop="idcard_id" label="鐘舵��" min-width="100px"></el-table-column>
-                <el-table-column prop="editor" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
-                <el-table-column
-                    v-if="containPermissions(['business:member:update', 'business:member:delete'])"
-                    label="鎿嶄綔"
-                    min-width="120"
-                    fixed="right"
-                >
+                <el-table-column prop="inDate" label="鍏ュ満鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="endtime" label="鎺堟潈鍒版湡鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="timeOut" label="瓒呮椂鏃堕暱" min-width="100px"></el-table-column>
+                <el-table-column label="鐘舵��" min-width="100px">
                     <template slot-scope="{row}">
-                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']">绂诲巶</el-button>
+                        <span v-if="row.outStatus === 0">鏈秴鏃�</span>
+                        <span v-else-if="row.timeOut === 1">宸茶秴鏃�</span>
+                        <span v-else-if="row.timeOut === 2">鍗冲皢瓒呮椂</span>
                     </template>
                 </el-table-column>
+<!--                <el-table-column-->
+<!--                    v-if="containPermissions(['business:member:update', 'business:member:delete'])"-->
+<!--                    label="鎿嶄綔"-->
+<!--                    min-width="120"-->
+<!--                    fixed="right"-->
+<!--                >-->
+<!--                    <template slot-scope="{row}">-->
+<!--                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']" @click="thaw(row.id)">绂诲巶</el-button>-->
+<!--                    </template>-->
+<!--                </el-table-column>-->
             </el-table>
             <pagination
-                    @size-change="handleSizeChange"
-                    @current-change="handlePageChange"
-                    :pagination="tableData.pagination"
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
             >
             </pagination>
         </template>
@@ -85,6 +76,7 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { findAllList } from '@/api/system/common'
 export default {
   name: 'strandedPersonnel',
   extends: BaseTable,
@@ -93,23 +85,58 @@
     return {
       // 鎼滅储
       searchForm: {
-        companyId: '',
+        companyName: '',
         name: '',
-        code: '',
         status: 2,
-        type: 1
+        type: '1'
       },
-      options: []
+      user: []
     }
   },
   created () {
     this.config({
       module: '浜哄憳淇℃伅琛�',
-      api: '/business/member',
+      api: '/business/strandedPersonnel',
       'field.id': 'id',
       'field.main': 'id'
     })
     this.search()
+    this.getUser()
+  },
+  methods: {
+    // thaws () {
+    //   if (this.tableData.selectedRows.length === 0) return this.$message.warning('鑷冲皯閫夋嫨涓�椤瑰唴瀹�')
+    //   const ids = this.tableData.selectedRows.map(item => {
+    //     return { id: item.id }
+    //   })
+    //   this.thaw(ids)
+    // },
+    // thaw (ids) {
+    //   this.$confirm('纭畾绉婚櫎姝ょ敤鎴峰悧?', '鎻愮ず', {
+    //     confirmButtonText: '纭畾',
+    //     cancelButtonText: '鍙栨秷',
+    //     type: 'warning'
+    //   }).then(() => {
+    //     // updateRemoveStatusById(ids)
+    //     //   .then(res => {
+    //     //     this.$message.success('鎿嶄綔鎴愬姛')
+    //     //     this.search()
+    //     //   })
+    //   }).catch(() => {
+    //
+    //   })
+    // },
+    getUser () {
+      findAllList({})
+        .then(res => {
+          this.user = res.map(item => {
+            return {
+              name: item.realname,
+              id: item.id
+            }
+          })
+        })
+    }
   }
 }
 </script>
diff --git a/admin/src/views/business/visitorManagement.vue b/admin/src/views/business/visitorManagement.vue
index 9ae6170..47fad08 100644
--- a/admin/src/views/business/visitorManagement.vue
+++ b/admin/src/views/business/visitorManagement.vue
@@ -34,7 +34,12 @@
                 <el-table-column type="selection" width="55"></el-table-column>
                 <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
                 <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="phone" label="鎬у埆" min-width="100px"></el-table-column>
+                <el-table-column prop="phone" label="鎬у埆" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span v-if="row.sex === 1">鐢�</span>
+                        <span v-if="row.sex === 2">濂�</span>
+                    </template>
+                </el-table-column>
                 <el-table-column label="璇佷欢绫诲瀷" min-width="100px">
                     <template slot-scope="{row}">
                         <span v-if="row.idcardType === 0">韬唤璇�</span>
@@ -42,9 +47,9 @@
                         <span v-if="row.idcardType === 2">鎶ょ収</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="idcardNo" label="韬唤璇佸彿" min-width="100px"></el-table-column>
+                <el-table-column prop="idcardDecode" label="韬唤璇佸彿" width="150px"></el-table-column>
                 <el-table-column prop="companyName" label="鍏徃" min-width="100px"></el-table-column>
-                <el-table-column prop="visitTimes" label="鎷滆娆℃暟" min-width="100px"></el-table-column>
+                <el-table-column prop="visitsCount" label="鎷滆娆℃暟" min-width="100px"></el-table-column>
                 <el-table-column prop="lastVisitDate" label="鏈�鍚庢嫓璁挎椂闂�" min-width="100px"></el-table-column>
             </el-table>
             <pagination
diff --git a/admin/src/views/business/visitorSources.vue b/admin/src/views/business/visitorSources.vue
index 6dfe77f..b0675bd 100644
--- a/admin/src/views/business/visitorSources.vue
+++ b/admin/src/views/business/visitorSources.vue
@@ -68,18 +68,17 @@
     getData () {
       getVisitConfigDTO({})
         .then(res => {
-          this.form.id = res.id
-          this.form.checkVisit = res.VisitConfigParam.checkVisit
+          this.form.checkVisit = res.visitConfigParam.checkVisit
           this.form.description = res.description
-          this.form.healthCard = res.VisitConfigParam.healthCard
-          this.form.isAnswer = res.VisitConfigParam.isAnswer
-          this.form.reservationWay = res.VisitConfigParam.reservationWay
+          this.form.healthCard = res.visitConfigParam.healthCard
+          this.form.isAnswer = res.visitConfigParam.isAnswer
+          this.form.reservationWay = res.visitConfigParam.reservationWay
           this.form.theme = res.theme
         })
     },
     submit () {
       updateVisitConfig({
-        VisitConfigParam: {
+        visitConfigParam: {
           isAnswer: this.form.isAnswer,
           healthCard: this.form.healthCard,
           checkVisit: this.form.checkVisit,
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
index 239a1ab..db138a5 100644
--- a/admin/src/views/business/visits.vue
+++ b/admin/src/views/business/visits.vue
@@ -48,20 +48,18 @@
                 <el-table-column prop="reason" label="鎷滆浜嬬敱" min-width="100px"></el-table-column>
                 <el-table-column label="鎷滆鏃堕棿" min-width="170px">
                     <template slot-scope="{row}">
-                        <span>璧凤細{{row.starttime}}</span>
+                        <span>璧凤細{{row.starttime}}</span><br/>
                         <span>姝細{{row.endtime}}</span>
                     </template>
                 </el-table-column>
                 <el-table-column label="闅忚浜哄憳" min-width="100px">
                     <template slot-scope="{row}">
-                        <span v-if="row.visitsList && row.visitsList.length > 0">{{row.visitsList.length}}</span>
-                        <span>0</span>
+                        <span>{{row.memberNum}}</span>
                     </template>
                 </el-table-column>
                 <el-table-column label="闅忚杞﹁締" min-width="100px">
                     <template slot-scope="{row}">
                         <span v-if="row.carNos">{{row.carNos.split(',').length}}</span>
-                        <span>0</span>
                     </template>
                 </el-table-column>
                 <el-table-column prop="status" fixed="right" label="鐘舵��" min-width="100px">
@@ -78,12 +76,12 @@
                 <el-table-column
                     v-if="containPermissions(['business:visits:update', 'business:visits:delete'])"
                     label="鎿嶄綔"
-                    min-width="190"
+                    min-width="100"
                     fixed="right"
                 >
                     <template slot-scope="{row}">
                         <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" v-permissions="['business:visits:update']">鏌ョ湅璇︽儏</el-button>
-                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">鏌ヨ瀹℃壒缁撴灉</el-button>
+<!--                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">鏌ヨ瀹℃壒缁撴灉</el-button>-->
                     </template>
                 </el-table-column>
             </el-table>
diff --git a/admin/vue.config.js b/admin/vue.config.js
index f1d1370..7a891e9 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -11,9 +11,11 @@
     proxy: {
       [process.env.VUE_APP_API_PREFIX]: {
         // http://192.168.0.130:10013
-        // 192.168.0.110:10013  192.168.0.110:10013
+        // 192.168.0.110:10013
         // http://192.168.0.101:10013
-        // http://192.168.0.132:10013
+        // http://192.168.0.132:10013   浠诲悍
+        // http://192.168.0.110:10013   纾婄
+        // http://192.168.0.133:10013   甯呭摜
         target: 'http://192.168.0.132:10013',
         changeOrigin: true,
         pathRewrite: {
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/CarEventController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/CarEventController.java
index 120f8b2..406b086 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/CarEventController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/CarEventController.java
@@ -8,6 +8,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.dao.admin.response.CarEventDTO;
 import com.doumee.dao.business.model.CarEvent;
+import com.doumee.dao.system.vo.CarEventVo;
 import com.doumee.service.business.CarEventService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -79,7 +80,7 @@
     @PostMapping("/exportExcel")
     //@RequiresPermissions("business:carevent:exportExcel")
     public void exportExcel (@RequestBody PageWrap<CarEvent> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(CarEvent.class).exportWithFirstAndEnd (carEventService.findPage(pageWrap).getRecords(),"鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃", null, "鍋滆溅鍦轰簨浠舵帹閫佽褰曞鍑烘姤琛�",null , response);
+        ExcelExporter.build(CarEventVo.class).exportWithFirstAndEnd (carEventService.findPageExcel(pageWrap),"鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃", null, "鍋滆溅鍦轰簨浠舵帹閫佽褰曞鍑烘姤琛�",null , response);
 //        ExcelExporter.build(CarEvent.class).export(carEventService.findPage(pageWrap).getRecords(), "鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃", response);
     }
 
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/DeviceEventController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/DeviceEventController.java
index e4f472b..f9b1493 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/DeviceEventController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/DeviceEventController.java
@@ -8,6 +8,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.dao.admin.response.DeviceEventDTO;
 import com.doumee.dao.business.model.DeviceEvent;
+import com.doumee.dao.system.vo.DeviceEventVo;
 import com.doumee.service.business.DeviceEventService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -79,7 +80,7 @@
     @PostMapping("/exportExcel")
     //@RequiresPermissions("business:deviceevent:exportExcel")
     public void exportExcel (@RequestBody PageWrap<DeviceEvent> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(DeviceEvent.class).export(deviceEventService.findPage(pageWrap).getRecords(), "闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃", response);
+        ExcelExporter.build(DeviceEventVo.class).export(deviceEventService.findDeviceEventExcel(pageWrap), "闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
index b3cea45..48936f5 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
@@ -33,14 +33,14 @@
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
-    @RequiresPermissions("business:membercard:create")
+    //@RequiresPermissions("business:membercard:create")
     public ApiResponse create(@RequestBody MemberCard memberCard) {
         return ApiResponse.success(memberCardService.create(memberCard));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
-    @RequiresPermissions("business:membercard:delete")
+    //@RequiresPermissions("business:membercard:delete")
     public ApiResponse deleteById(@PathVariable Integer id) {
         memberCardService.deleteById(id);
         return ApiResponse.success(null);
@@ -48,7 +48,7 @@
 
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
-    @RequiresPermissions("business:membercard:delete")
+    //@RequiresPermissions("business:membercard:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
@@ -61,15 +61,31 @@
 
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
-    @RequiresPermissions("business:membercard:update")
+    //@RequiresPermissions("business:membercard:update")
     public ApiResponse updateById(@RequestBody MemberCard memberCard) {
         memberCardService.updateById(memberCard);
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鎸傚け/瑙f寕鎿嶄綔")
+    @PostMapping("/batchUpdate")
+    //@RequiresPermissions("business:membercard:update")
+    public ApiResponse batchUpdate(@RequestBody List<MemberCard> memberCards) {
+        memberCardService.updateByIdInBatch(memberCards);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("閫�鍗℃搷浣�")
+    @PostMapping("/refundCard")
+    //@RequiresPermissions("business:membercard:update")
+    public ApiResponse refundCard(@RequestBody MemberCard memberCard) {
+        memberCardService.updateRefundCard(memberCard);
+        return ApiResponse.success(null);
+    }
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
-    @RequiresPermissions("business:membercard:query")
+    //@RequiresPermissions("business:membercard:query")
     public ApiResponse<PageData<MemberCard>> findPage (@RequestBody PageWrap<MemberCard> pageWrap) {
         return ApiResponse.success(memberCardService.findPage(pageWrap));
     }
@@ -87,4 +103,13 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(memberCardService.findById(id));
     }
+
+    @ApiOperation("鏍规嵁鏉′欢鏌ヨ鍙敤鍗″彿")
+    @PostMapping("/queryCard")
+    //@RequiresPermissions("business:membercard:query")
+    public ApiResponse<List<MemberCard>> queryCard () {
+        MemberCard card = new MemberCard();
+        return ApiResponse.success(memberCardService.findList(card));
+    }
+
 }
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
index 40cf28e..a64efdb 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -194,6 +194,11 @@
         return ApiResponse.success(memberService.findUnusualPage(pageWrap));
     }
 
-
+    @ApiOperation("鏍规嵁绫诲瀷鏌ヨ浜哄憳淇℃伅")
+    @PostMapping("/findTypeMemberInfo")
+    //@RequiresPermissions("business:member:query")
+    public ApiResponse<List<Member>> findTypeMemberInfo (@RequestBody Member member) {
+        return ApiResponse.success(memberService.findList(member));
+    }
 
 }
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java
index 9f2cd2f..e65e0b2 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java
@@ -8,6 +8,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.dao.admin.response.VisitEventDTO;
 import com.doumee.dao.business.model.VisitEvent;
+import com.doumee.dao.system.vo.VisitEventVo;
 import com.doumee.service.business.VisitEventService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -79,7 +80,7 @@
     @PostMapping("/exportExcel")
     //@RequiresPermissions("business:visitevent:exportExcel")
     public void exportExcel (@RequestBody PageWrap<VisitEvent> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(VisitEvent.class).export(visitEventService.findPage(pageWrap).getRecords(), "璁垮浜嬩欢鎺ㄩ�佽褰曡〃", response);
+        ExcelExporter.build(VisitEventVo.class).export(visitEventService.findPageExcel(pageWrap), "璁垮浜嬩欢鎺ㄩ�佽褰曡〃", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
index 1393364..96a7d2c 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -346,7 +346,50 @@
 
     }
 
+    /**
+     * 鍗$姸鎬�
+     */
+    public  enum CardStatus {
 
+        DISABLE(0, "绂佺敤"),
+        ENABLE(1, "鍚敤"),
+        REFUNDCARD(2, "閫�鍗�"),
+        LOSS(3, "鎸傚け"),
+
+        /** 鍗$被鍨� **/
+        IC(1,"IC鍗�"),
+        CPU(2,"CPU鍗�"),
+        YJLCARD(3,"杩滆窛绂诲崱"),
+        MCARD(4,"M鍗�");
+
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+
+        // 鏋勯�犳柟娉�
+        CardStatus(int key, String name ) {
+            this.name = name;
+            this.key = key;
+        }
+
+        // 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;
+        }
+
+    }
 
 }
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java b/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
index 52d7bd4..bcb0f8a 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -63,6 +63,7 @@
     public static final String ERP_USERSTATUS_RL ="ERP_USERSTATUS_RL" ;
     public static final String ERP ="ERP" ;
     public static final Integer THREE =3 ;
+    public static final Integer FOUR =4 ;
     public static final String ORG_USER_ORIGIN = "ORG_USER_ORIGIN";
     public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
     public static  boolean DEALING_HK_SYNCDEVICE = false;
@@ -214,6 +215,8 @@
     public static final String WX_PLATFORM_ACCESS_TOKEN = "WX_PLATFORM_ACCESS_TOKEN";
     public static final String WX_PLATFORM_APPID = "WX_PLATFORM_APPID";
     public static final String WX_PLATFORM_SECRET = "WX_PLATFORM_SECRET";
+    public static final String WX_PLATFORM_AUDIT_VISIT = "WX_PLATFORM_AUDIT_VISIT";
+    public static final String WX_PLATFORM_PREFIX = "WX_PLATFORM_PREFIX";
 
 
 
@@ -306,7 +309,11 @@
         /** 鐢ㄦ埛绫诲瀷 **/
         LW_FK(0,"鍔冲姟璁垮"),
         PT_FK(1,"鏅�氳瀹�"),
-        NB_FK(2,"鍐呴儴浜哄憳");
+        NB_FK(2,"鍐呴儴浜哄憳"),
+
+        /** 杩涘満绫诲瀷 **/
+        OUT(0,"鍑�"),
+        IN(1,"杩�");
 
         private  Integer value;
         private  String des;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java b/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java
index 4152f3c..75eb95e 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java
@@ -1,59 +1,59 @@
 package com.doumee.core.wx;
 
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
-import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
-import com.doumee.config.mybatis.SpringUtils;
-import com.github.binarywang.wxpay.config.WxPayConfig;
-import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-
-import javax.annotation.PostConstruct;
+//import cn.binarywang.wx.miniapp.api.WxMaService;
+//import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+//import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
+//import com.doumee.config.mybatis.SpringUtils;
+//import com.github.binarywang.wxpay.config.WxPayConfig;
+//import com.github.binarywang.wxpay.constant.WxPayConstants;
+//import com.github.binarywang.wxpay.service.WxPayService;
+//import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+//import org.apache.commons.lang3.StringUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Configuration;
+//
+//import javax.annotation.PostConstruct;
 
 /**
  * 寰俊灏忕▼搴忕粍浠�
  */
-@Configuration
+//@Configuration
 public class WxMiniConfig {
-    /********寰俊灏忕▼搴忔湇鍔�**********/
-    public static WxMaService wxMaService;
-    /********寰俊灏忕▼搴忔敮浠�**********/
-    public static WxPayService wxPayService;
-    /********寰俊APP鏀粯**********/
-    public static WxPayService wxAppPayService;
-
-
-    @Autowired
-    private WxPayProperties wxPayProperties;
-
-    public static WxMiniConfig me() {
-        return SpringUtils.get().getBean(WxMiniConfig.class);
-    }
-
-    @PostConstruct
-    void init() {
-        this.load_WxMaService();
-//        this.load_wxPayService();
-//        this.load_wxAppPayService();
-    }
-    /**
-     * 鍒濆鍖栧井淇″皬绋嬪簭
-     */
-    public void load_WxMaService() {
-        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
-        config.setAppid(StringUtils.trimToNull(wxPayProperties.getAppId()));
-        config.setSecret(StringUtils.trimToNull(wxPayProperties.getAppSecret()));
-        config.setMsgDataFormat("JSON");
-        //config.setToken("");
-        //config.setAesKey("");
-        WxMaService wxMaService = new WxMaServiceImpl();
-        wxMaService.setWxMaConfig(config);
-        this.wxMaService = wxMaService;
-    }
+//    /********寰俊灏忕▼搴忔湇鍔�**********/
+//    public static WxMaService wxMaService;
+//    /********寰俊灏忕▼搴忔敮浠�**********/
+//    public static WxPayService wxPayService;
+//    /********寰俊APP鏀粯**********/
+//    public static WxPayService wxAppPayService;
+//
+//
+//    @Autowired
+//    private WxPayProperties wxPayProperties;
+//
+//    public static WxMiniConfig me() {
+//        return SpringUtils.get().getBean(WxMiniConfig.class);
+//    }
+//
+//    @PostConstruct
+//    void init() {
+//        this.load_WxMaService();
+////        this.load_wxPayService();
+////        this.load_wxAppPayService();
+//    }
+//    /**
+//     * 鍒濆鍖栧井淇″皬绋嬪簭
+//     */
+//    public void load_WxMaService() {
+//        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
+//        config.setAppid(StringUtils.trimToNull(wxPayProperties.getAppId()));
+//        config.setSecret(StringUtils.trimToNull(wxPayProperties.getAppSecret()));
+//        config.setMsgDataFormat("JSON");
+//        //config.setToken("");
+//        //config.setAesKey("");
+//        WxMaService wxMaService = new WxMaServiceImpl();
+//        wxMaService.setWxMaConfig(config);
+//        this.wxMaService = wxMaService;
+//    }
 
     /**
      * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java b/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
index 71d329e..8dca404 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -3,10 +3,10 @@
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.ID;
-import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
-import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
-import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
-import com.github.binarywang.wxpay.exception.WxPayException;
+//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+//import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
+//import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
+//import com.github.binarywang.wxpay.exception.WxPayException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -20,34 +20,34 @@
 @Slf4j
 public class WxMiniUtilService {
 
-
-    /**
-     * 璁㈠崟寰俊閫�娆�
-     * orderNo:鍟嗘埛璁㈠崟鍙�
-     * totalPrice锛氳鍗曟�婚噾棰�
-     * refundPrice锛涢��娆鹃噾棰�
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) {
-        try {
-            // 鍙戦�侀��娆捐姹�
-            String refNum = ID.nextGUID();
-            WxPayRefundRequest request = new WxPayRefundRequest();
-            request.setOutTradeNo(orderNo);
-            request.setOutRefundNo(refNum);
-           // request.setTotalFee(2);
-          //  request.setRefundFee(1);
-            request.setTotalFee(BaseWxPayRequest.yuanToFen(totalPrice.toString()));
-            request.setRefundFee(BaseWxPayRequest.yuanToFen(refundPrice.toString()));
-            WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request);
-            if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) {
-                return refNum;
-            } else {
-                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes());
-            }
-        } catch (WxPayException e) {
-            e.printStackTrace();
-        }
-        throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�娆惧彂鐢熷紓甯歌鑱旂郴绠$悊鍛�");
-    }
+//
+//    /**
+//     * 璁㈠崟寰俊閫�娆�
+//     * orderNo:鍟嗘埛璁㈠崟鍙�
+//     * totalPrice锛氳鍗曟�婚噾棰�
+//     * refundPrice锛涢��娆鹃噾棰�
+//     */
+//    @Transactional(rollbackFor = Exception.class)
+//    public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) {
+//        try {
+//            // 鍙戦�侀��娆捐姹�
+//            String refNum = ID.nextGUID();
+//            WxPayRefundRequest request = new WxPayRefundRequest();
+//            request.setOutTradeNo(orderNo);
+//            request.setOutRefundNo(refNum);
+//           // request.setTotalFee(2);
+//          //  request.setRefundFee(1);
+//            request.setTotalFee(BaseWxPayRequest.yuanToFen(totalPrice.toString()));
+//            request.setRefundFee(BaseWxPayRequest.yuanToFen(refundPrice.toString()));
+//            WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request);
+//            if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) {
+//                return refNum;
+//            } else {
+//                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes());
+//            }
+//        } catch (WxPayException e) {
+//            e.printStackTrace();
+//        }
+//        throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�娆惧彂鐢熷紓甯歌鑱旂郴绠$悊鍛�");
+//    }
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java b/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
new file mode 100644
index 0000000..14cbdca
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
@@ -0,0 +1,53 @@
+
+package com.doumee.core.wx.wxPlat;
+
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.Constants;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.WxMpConfigStorage;
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/27 9:30
+ */
+@Configuration
+public class WxPlatConfig {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Bean
+    public WxMpConfigStorage wxMpConfigStorage() {
+        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
+        // 鍏紬鍙穉ppId
+        configStorage.setAppId(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode());
+        // 鍏紬鍙穉ppSecret
+        configStorage.setSecret(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode());
+        // 鍏紬鍙稵oken
+        configStorage.setToken(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode());
+        // 鍏紬鍙稥ncodingAESKey
+//        configStorage.setAesKey();
+        return configStorage;
+    }
+
+
+    /**
+     * 澹版槑瀹炰緥
+     *
+     * @return
+     */
+    @Bean
+    public WxMpService wxMpService() {
+        WxMpService wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
+        return wxMpService;
+    }
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java b/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
new file mode 100644
index 0000000..45b73db
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -0,0 +1,65 @@
+package com.doumee.core.wx.wxPlat;
+
+import com.doumee.dao.business.model.Visits;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+/**
+ * 寰俊鍏紬鍙烽�氱煡
+ *
+ * @Author : Rk
+ * @create 2023/12/27 9:19
+ */
+@Slf4j
+@Component
+public class WxPlatNotice {
+
+    /**
+     * 寰俊鍏紬鍙稟PI鐨凷ervice
+     */
+    private final WxMpService wxMpService;
+
+    public WxPlatNotice(WxMpService wxMpService) {
+        this.wxMpService = wxMpService;
+    }
+
+    /**
+     * 璁垮璁板綍瀹℃壒涓氬姟閫氱煡
+     */
+    public Boolean  sendVisitAuditTemplateNotice(Visits visits,String prefix,String tempId){
+        if(StringUtils.isBlank(visits.getOpenid())){
+            return false;
+        }
+        WxMpTemplateMessage templateMessage =  WxMpTemplateMessage.builder()
+                .toUser(visits.getOpenid())
+                .templateId(tempId)
+                .url(prefix + "pages/appointmentDetails/appointmentDetails?id="+visits.getId())
+                .build();
+        String thing1 = "寰呭鎵�";
+        if(visits.getStatus()==2){
+            thing1 = "瀹℃牳閫氳繃";
+        }else if(visits.getStatus()==3){
+            thing1 = "瀹℃牳涓嶉�氳繃";
+        }
+        // 娣诲姞妯℃澘鏁版嵁
+        templateMessage.addData(new WxMpTemplateData("thing1", thing1))
+                .addData(new WxMpTemplateData("thing2", visits.getName()))
+                .addData(new WxMpTemplateData("phone_number6", visits.getPhone()));
+        String msgId = null;
+        try {
+            // 鍙戦�佹ā鏉挎秷鎭�
+            msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+        }
+        log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
+        return msgId != null;
+    }
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java
index a797d66..9017d71 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java
@@ -78,7 +78,7 @@
     private String personPhone;
 
     @ApiModelProperty(value = "浜哄憳绫诲瀷")
-    private String personType;
+    private Integer personType;
 
     @ApiModelProperty(value = "浜哄憳韬唤璇佸彿")
     private String personIdcardDecode;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java
index 682303c..35b60fb 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java
@@ -108,7 +108,7 @@
     private String personPhone;
 
     @ApiModelProperty(value = "浜哄憳绫诲瀷")
-    private String personType;
+    private Integer personType;
 
     @ApiModelProperty(value = "浜哄憳韬唤璇佸彿")
     private String personIdcardDecode;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
index d36ca0c..2a88362 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
@@ -51,7 +51,7 @@
     @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳")
     private Integer type;
 
-    @ApiModelProperty(value = "璁垮鍚嶇О")
+    @ApiModelProperty(value = "璁垮鍚嶇О/鍐呴儴浜哄憳鍚嶇О")
     private String name;
 
     @ApiModelProperty(value = "鎬у埆")
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
index 687b20e..d6f9cb7 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
@@ -110,10 +110,10 @@
     @ApiModelProperty(value = "璇佷欢绛惧彂鏈哄叧")
     private String signOrg;
 
-    @ApiModelProperty(value = "绂诲紑鏃堕棿")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
     private String startTime;
 
-    @ApiModelProperty(value = "鎵嬫満鍙风爜")
+    @ApiModelProperty(value = "绂诲紑鏃堕棿")
     private String endTime;
 
     @ApiModelProperty(value = "杞︾墝鍙�")
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index 7b67428..eef8155 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -79,7 +79,7 @@
     @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳")
     private Integer type;
 
-    @ApiModelProperty(value = "璁垮鍚嶇О")
+    @ApiModelProperty(value = "璁垮鍚嶇О/鍐呴儴浜哄憳")
     @ExcelColumn(name="璁垮鍚嶇О")
     private String name;
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java
index b850f40..7651f97 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java
@@ -96,10 +96,29 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date hkDate;
 
-    @ApiModelProperty(value = "鐘舵�� 0绂佺敤 1鍚敤")
-    @ExcelColumn(name="鐘舵�� 0绂佺敤 1鍚敤")
+    @ApiModelProperty(value = "鐘舵�� 0绂佺敤 1鍚敤 2閫�鍗� 3鎸傚け")
+    @ExcelColumn(name="鐘舵�� 0绂佺敤 1鍚敤 2閫�鍗� 3鎸傚け")
     private Integer status;
 
+    @ApiModelProperty(value = "鐘舵�� 0绂佺敤 1鍚敤 2閫�鍗� 3鎸傚け")
+    @TableField(exist = false)
+    private String statusName;
+
+    @ApiModelProperty(value = "鍗$被鍨� 1 IC鍗� 2 CPU鍗�  3杩滆窛绂诲崱 4M鍗� -- 鍓嶇鏂板浼犲�煎啓姝�")
+    @ExcelColumn(name="鍗$被鍨� 1 IC鍗� 2 CPU鍗�  3杩滆窛绂诲崱 4M鍗�")
+    private Integer cardType;
+
+    @ApiModelProperty(value = "鍗$被鍨嬪悕绉�")
+    @TableField(exist = false)
+    private String cardTypeName;
+
+    @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳", example = "1")
+    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳")
+    private Integer type;
+
+    @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳", example = "1")
+    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳")
+    private String typeName;
 
     @ApiModelProperty(value = "鍏抽敭瀛�")
     @TableField(exist = false)
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/CarEventVo.java b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/CarEventVo.java
new file mode 100644
index 0000000..61dbafe
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/CarEventVo.java
@@ -0,0 +1,51 @@
+package com.doumee.dao.system.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("杞﹁締浜嬩欢瑙嗗浘")
+public class CarEventVo {
+
+    @ApiModelProperty(value = "杞︾墝鍙�")
+    @ExcelColumn(name="杞︾墝鍙�")
+    private String plateNos;
+
+    @ApiModelProperty(value = "浜哄憳绫诲瀷")
+    @ExcelColumn(name="褰掑睘鐢ㄦ埛绫诲瀷")
+    private String typeName;
+
+    @ApiModelProperty(value = "濮撳悕")
+    @ExcelColumn(name="濮撳悕")
+    private String personName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    @ExcelColumn(name="鎵嬫満鍙�")
+    private String personPhone;
+
+    @ApiModelProperty(value = "浜哄憳缁勭粐鍏徃")
+    @ExcelColumn(name="鍏徃/閮ㄩ棬")
+    private String personCompanyName;
+
+    @ApiModelProperty(value = "鍋滆溅搴撳悕绉�")
+    @ExcelColumn(name="鍋滆溅搴撳悕绉�")
+    private String parkName;
+
+    @ApiModelProperty(value = "鍑哄叆鍙e悕绉�")
+    @ExcelColumn(name="鍑哄叆鍙e悕绉�")
+    private String gateName;
+
+    @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+    @ExcelColumn(name="浜嬩欢绫诲瀷")
+    private String eventTypeName;
+
+    @ApiModelProperty(value = "杩涘嚭鍦虹被鍨嬶紝0锛氳繘鍦猴紝1锛氬嚭鍦�	", example = "1")
+    @ExcelColumn(name="鍑哄叆绫诲瀷")
+    private Integer inoutType;
+
+    @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+    @ExcelColumn(name="浜嬩欢鏃堕棿")
+    private String happenTime;
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/DeviceEventVo.java b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/DeviceEventVo.java
new file mode 100644
index 0000000..e76ab45
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/DeviceEventVo.java
@@ -0,0 +1,55 @@
+package com.doumee.dao.system.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("闂ㄧ鍑哄叆浜嬩欢")
+public class DeviceEventVo {
+
+    @ApiModelProperty(value = "浜哄憳绫诲瀷")
+    @ExcelColumn(name = "浜哄憳绫诲瀷")
+    private String personTypeName;
+
+    @ApiModelProperty(value = "浜哄憳鍚嶇О")
+    @ExcelColumn(name = "濮撳悕")
+    private String personName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    @ExcelColumn(name = "鎵嬫満鍙�")
+    private String personPhone;
+
+    @ApiModelProperty(value = "韬唤璇佸彿鐮�")
+    @ExcelColumn(name = "韬唤璇佸彿鐮�")
+    private String personIdcardDecode;
+
+    @ApiModelProperty(value = "鍏徃/缁勭粐")
+    @ExcelColumn(name = "鍏徃/缁勭粐")
+    private String personCompanyName;
+
+    @ApiModelProperty(value = "闂ㄧ鍚嶇О")
+    @ExcelColumn(name = "闂ㄧ鍚嶇О")
+    private String devName;
+
+    @ApiModelProperty(value = "闂ㄧ鐐瑰悕绉�")
+    @ExcelColumn(name = "闂ㄧ鐐瑰悕绉�")
+    private String srcName;
+
+    @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+    @ExcelColumn(name = "浜嬩欢绫诲瀷")
+    private String eventTypeName;
+
+    @ApiModelProperty(value = "杩涘嚭鏂瑰悜 1-杩� 0-鍑� -1:鏈煡 瑕佹眰锛氳繘闂ㄨ鍗″櫒鎷ㄧ爜璁剧疆涓�1锛屽嚭闂ㄨ鍗″櫒鎷ㄧ爜璁剧疆涓�2")
+    @ExcelColumn(name = "鍑哄叆绫诲瀷")
+    private String extEventInOutName;
+
+    @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+    @ExcelColumn(name = "浜嬩欢鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String happenTime;
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/VisitEventVo.java b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/VisitEventVo.java
new file mode 100644
index 0000000..6b0718e
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/VisitEventVo.java
@@ -0,0 +1,47 @@
+package com.doumee.dao.system.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("璁垮鍑哄叆浜嬩欢瑙嗗浘")
+public class VisitEventVo {
+
+    @ApiModelProperty(value = "濮撳悕")
+    @ExcelColumn(name="濮撳悕")
+    private String personName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    @ExcelColumn(name = "鎵嬫満鍙�")
+    private String personPhone;
+
+    @ApiModelProperty(value = "璇佷欢鍙� ")
+    @ExcelColumn(name = "韬唤璇佸彿鐮�")
+    private String idNo;
+
+    @ApiModelProperty(value = "浜哄憳缁勭粐鍏徃")
+    @ExcelColumn(name = "鍏徃")
+    private String personCompanyName;
+
+    @ApiModelProperty(value = "杞︾墝鍙�")
+    @ExcelColumn(name = "杞︾墝鍙�")
+    private String carNo;
+
+    @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁�")
+    private String beVisitedPersonOrg;
+
+    @ApiModelProperty(value = "琚闂汉濮撳悕")
+    @ExcelColumn(name = "琚浜�")
+    private String beVisitedPersonName;
+
+    @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+    @ExcelColumn(name = "浜嬩欢绫诲瀷")
+    private String eventTypeName;
+
+    @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+    @ExcelColumn(name = "浜嬩欢鏃堕棿")
+    private String happenTime;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
new file mode 100644
index 0000000..8395318
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
@@ -0,0 +1,39 @@
+package com.doumee.dao.web.response;
+
+import com.doumee.dao.business.model.Visits;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class VisitDetailVO {
+
+    @ApiModelProperty(value = "瀹℃壒鐘舵��")
+    private Integer status;
+
+    @ApiModelProperty(value = "琚浜哄悕绉�")
+    private String visitUserName;
+
+    @ApiModelProperty(value = "鎷滆浜嬬敱")
+    private String visitReason;
+
+    @ApiModelProperty(value = "杞﹁締淇℃伅")
+    private String carNos;
+
+    @ApiModelProperty(value = "闂ㄧ缁勫悕绉�")
+    private List<String> doorGroupName;
+
+    @ApiModelProperty(value = "鎷滆鏃堕棿")
+    private String visitTime;
+
+    @ApiModelProperty(value = "闅忚浜哄憳淇℃伅")
+    private List<Visits> withVisitsList;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java
index fdeb761..ff4f9c6 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java
@@ -5,6 +5,8 @@
 import com.doumee.dao.admin.request.VisitEventQuery;
 import com.doumee.dao.admin.response.CarEventDTO;
 import com.doumee.dao.business.model.CarEvent;
+import com.doumee.dao.system.vo.CarEventVo;
+
 import java.util.List;
 
 /**
@@ -103,4 +105,11 @@
      * @return PageData<CarEvent>
      */
     PageData<CarEventDTO> findVisitCarPage(PageWrap<CarEvent> pageWrap);
+
+    /**
+     * 瀵煎嚭
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<CarEventVo>
+     */
+    List<CarEventVo> findPageExcel(PageWrap<CarEvent> pageWrap);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/DeviceEventService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/DeviceEventService.java
index 322790e..2854abb 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/DeviceEventService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/DeviceEventService.java
@@ -5,6 +5,8 @@
 import com.doumee.dao.admin.request.DeviceEventQuery;
 import com.doumee.dao.admin.response.DeviceEventDTO;
 import com.doumee.dao.business.model.DeviceEvent;
+import com.doumee.dao.system.vo.DeviceEventVo;
+
 import java.util.List;
 
 /**
@@ -104,4 +106,11 @@
      * @return PageData<DeviceEvent>
      */
     PageData<DeviceEventDTO> findDeviceEventDTOPage(PageWrap<DeviceEvent> pageWrap);
+
+    /**
+     * 瀵煎嚭
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<DeviceEventVO>
+     */
+    List<DeviceEventVo> findDeviceEventExcel(PageWrap<DeviceEvent> pageWrap);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java
index cf650c4..7d88b87 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java
@@ -3,6 +3,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.MemberCard;
+
 import java.util.List;
 
 /**
@@ -63,6 +64,8 @@
      */
     MemberCard findById(Integer id);
 
+    void updateRefundCard(MemberCard memberCard);
+
     /**
      * 鏉′欢鏌ヨ鍗曟潯璁板綍
      *
@@ -94,4 +97,5 @@
      * @return long
      */
     long count(MemberCard memberCard);
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
index b92f80d..6d07749 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
@@ -5,6 +5,8 @@
 import com.doumee.dao.admin.request.VisitEventQuery;
 import com.doumee.dao.admin.response.VisitEventDTO;
 import com.doumee.dao.business.model.VisitEvent;
+import com.doumee.dao.system.vo.VisitEventVo;
+
 import java.util.List;
 
 /**
@@ -107,4 +109,10 @@
     PageData<VisitEventDTO> findVisitPage(PageWrap<VisitEvent> pageWrap);
 
 
+    /**
+     * 瀵煎嚭
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<VisitEventVo>
+     */
+    List<VisitEventVo> findPageExcel(PageWrap<VisitEvent> pageWrap);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
index 0d0e2f9..eb754cc 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.web.response.VisitDetailVO;
+
 import java.util.List;
 
 /**
@@ -98,4 +100,11 @@
      * @return long
      */
     long count(Visits visits);
+
+    /**
+     * 璁垮璁板綍璇︽儏 - 寰俊鍏紬鍙�
+     * @param id
+     * @return
+     */
+    VisitDetailVO getVisitDetail(Integer id);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java
index f5e4fb8..97192ed 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java
@@ -17,6 +17,7 @@
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.SystemDictDataMapper;
 import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.vo.CarEventVo;
 import com.doumee.service.business.CarEventService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -275,6 +276,55 @@
 
     @Override
     public PageData<CarEventDTO> findVisitCarPage(PageWrap<CarEvent> pageWrap) {
+        IPage<CarEventDTO> carEventDTOIPage = getDataInfo(pageWrap);
+        if(null != carEventDTOIPage && carEventDTOIPage.getRecords().size() > 0) {
+            carEventDTOIPage.setRecords(newCarEventDTO(carEventDTOIPage.getRecords()));
+        }
+        return PageData.from(carEventDTOIPage);
+    }
+
+    @Override
+    public List<CarEventVo> findPageExcel(PageWrap<CarEvent> pageWrap) {
+        IPage<CarEventDTO> carEventExcel = getDataInfo(pageWrap);
+        List<CarEventVo> newDataList = new ArrayList<>();
+        if(null != carEventExcel && carEventExcel.getRecords().size() > 0) {
+            carEventExcel.getRecords().stream().forEach(obj->{
+                CarEventVo vo = new CarEventVo();
+                if(Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.PARK_LINE_IN.getKey()){
+                    vo.setEventTypeName(HKConstants.EventTypes.PARK_LINE_IN.getName());
+                }else if(Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
+                    vo.setEventTypeName(HKConstants.EventTypes.PARK_PASS_IN.getName());
+                }else if(Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.PARK_LINE_OUT.getKey()){
+                    vo.setEventTypeName(HKConstants.EventTypes.PARK_LINE_OUT.getName());
+                }else{
+                    vo.setEventTypeName(HKConstants.EventTypes.PARK_PASS_OUT.getName());
+                }
+                if(null != obj.getPersonType()) {
+                    if(Constants.ZERO == obj.getPersonType()){
+                        vo.setTypeName(Constants.Status.LW_FK.getDes());
+                    }else if(Constants.ONE == obj.getPersonType()) {
+                        vo.setTypeName(Constants.Status.PT_FK.getDes());
+                    }else {
+                        vo.setTypeName(Constants.Status.NB_FK.getDes());
+                    }
+                }else {
+                    vo.setTypeName("");
+                }
+                vo.setPlateNos(obj.getPlateNos());
+                vo.setPersonName(obj.getPersonName());
+                vo.setPersonPhone(obj.getPersonPhone());
+                vo.setPersonCompanyName(obj.getPersonCompanyName());
+                vo.setParkName(obj.getParkName());
+                vo.setGateName(obj.getGateName());
+                vo.setInoutType(obj.getInoutType());
+                vo.setHappenTime(obj.getHappenTime());
+                newDataList.add(vo);
+            });
+        }
+        return newDataList;
+    }
+
+    private IPage<CarEventDTO> getDataInfo(PageWrap<CarEvent> pageWrap) {
         //鏄惁鏄暟瀛�
         boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
         //鏄惁鍖呭惈涓枃
@@ -287,41 +337,38 @@
         Utils.MP.blankToNull(pageWrap.getModel());
 
         queryWrapper.leftJoin(Cars.class,Cars::getCode,CarEvent::getPlateNos)
-                    .leftJoin(Member.class,Member::getId,Cars::getMemberId)
-                    .leftJoin(Company.class,Company::getId,Member::getCompanyId);
+                .leftJoin(Member.class,Member::getId,Cars::getMemberId)
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.selectAll(CarEvent.class)
-                    .selectAs(Member::getType,CarEventDTO::getPersonType)
-                    .selectAs(Member::getPhone,CarEventDTO::getPersonPhone)
-                    .selectAs(Member::getIdcardDecode,CarEventDTO::getPersonIdcardDecode)
-                    .selectAs(Member::getName,CarEventDTO::getPersonName)
-                    .selectAs(Company::getName,CarEventDTO::getPersonCompanyName);
+                .selectAs(Member::getType,CarEventDTO::getPersonType)
+                .selectAs(Member::getPhone,CarEventDTO::getPersonPhone)
+                .selectAs(Member::getIdcardDecode,CarEventDTO::getPersonIdcardDecode)
+                .selectAs(Member::getName,CarEventDTO::getPersonName)
+                .selectAs(Company::getName,CarEventDTO::getPersonCompanyName);
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getPlateNos()),
-                                CarEvent::getPlateNos,
-                                pageWrap.getModel().getPlateNos())
-                    .like(number,
-                            Member::getPhone,
-                            pageWrap.getModel().getKeyWords())
-                    .like((b || hasWord),
-                            Member::getPhone,
-                            pageWrap.getModel().getKeyWords())
-                    .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
-                            Company::getName,
-                            pageWrap.getModel().getCompanyName())
-                    .eq(StringUtils.isNotBlank(pageWrap.getModel().getMemberType()),
-                            Member::getType,
-                            pageWrap.getModel().getMemberType())
-                    .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
-                            CarEvent::getEventType,
-                            pageWrap.getModel().getEventType())
-                    .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
-                            CarEvent::getCreateDate, pageWrap.getModel().getStartTime())
-                    .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
-                            CarEvent::getCreateDate, pageWrap.getModel().getEndTime());
+                CarEvent::getPlateNos,
+                pageWrap.getModel().getPlateNos())
+                .like(number,
+                        Member::getPhone,
+                        pageWrap.getModel().getKeyWords())
+                .like((b || hasWord),
+                        Member::getPhone,
+                        pageWrap.getModel().getKeyWords())
+                .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
+                        Company::getName,
+                        pageWrap.getModel().getCompanyName())
+                .eq(StringUtils.isNotBlank(pageWrap.getModel().getMemberType()),
+                        Member::getType,
+                        pageWrap.getModel().getMemberType())
+                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
+                        CarEvent::getEventType,
+                        pageWrap.getModel().getEventType())
+                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
+                        CarEvent::getCreateDate, pageWrap.getModel().getStartTime())
+                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
+                        CarEvent::getCreateDate, pageWrap.getModel().getEndTime());
         IPage<CarEventDTO> carEventDTOIPage = carEventJoinMapper.selectJoinPage(page, CarEventDTO.class, queryWrapper);
-        if(null != carEventDTOIPage && carEventDTOIPage.getRecords().size() > 0) {
-            carEventDTOIPage.setRecords(newCarEventDTO(carEventDTOIPage.getRecords()));
-        }
-        return PageData.from(carEventDTOIPage);
+        return carEventDTOIPage;
     }
 
     private List<CarEventDTO> newCarEventDTO(List<CarEventDTO> newCarEventDTOList) {
@@ -346,4 +393,5 @@
         });
         return newDataList;
     }
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index de5e2d6..0a4dfc6 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -36,7 +36,6 @@
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
index aa135a7..3a3ff3e 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
@@ -20,6 +20,7 @@
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.SystemDictDataMapper;
 import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.vo.DeviceEventVo;
 import com.doumee.dao.system.vo.SystemDictDataListVO;
 import com.doumee.service.business.DeviceEventService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -302,6 +303,63 @@
     @Override
     public PageData<DeviceEventDTO> findDeviceEventDTOPage(PageWrap<DeviceEvent> pageWrap) {
 
+        IPage<DeviceEventDTO> deviceEventDTOIPage = getDataInfo(pageWrap);
+        if(null != deviceEventDTOIPage && deviceEventDTOIPage.getRecords().size() > 0) {
+            deviceEventDTOIPage.setRecords(newDeviceEvent(deviceEventDTOIPage.getRecords()));
+        }
+        return PageData.from(deviceEventDTOIPage);
+    }
+
+    @Override
+    public List<DeviceEventVo> findDeviceEventExcel(PageWrap<DeviceEvent> pageWrap) {
+        IPage<DeviceEventDTO> deviceEventExcel = getDataInfo(pageWrap);
+        List<DeviceEventVo> voList = new ArrayList<>();
+        if(null != deviceEventExcel && deviceEventExcel.getRecords().size() > 0) {
+            deviceEventExcel.getRecords().stream().forEach(obj-> {
+                DeviceEventVo eventVo = new DeviceEventVo();
+                if(null != obj.getPersonType()) {
+                    if(Constants.ZERO == obj.getPersonType()){
+                        eventVo.setPersonTypeName(Constants.Status.LW_FK.getDes());
+                    }else if(Constants.ONE == obj.getPersonType()) {
+                        eventVo.setPersonTypeName(Constants.Status.PT_FK.getDes());
+                    }else {
+                        eventVo.setPersonTypeName(Constants.Status.NB_FK.getDes());
+                    }
+                }else {
+                    eventVo.setPersonTypeName("");
+                }
+                eventVo.setPersonName(obj.getPersonName());
+                eventVo.setPersonPhone(obj.getPersonName());
+                eventVo.setPersonIdcardDecode(obj.getPersonIdcardDecode());
+                eventVo.setPersonCompanyName(obj.getPersonCompanyName());
+                eventVo.setDevName(obj.getDevName());
+                eventVo.setSrcName(obj.getSrcName());
+                if(null != obj.getExtEventInOut()) {
+                    if(Constants.ZERO == obj.getExtEventInOut()){
+                        eventVo.setExtEventInOutName(Constants.Status.OUT.getDes());
+                    }else if(Constants.ONE == obj.getPersonType()) {
+                        eventVo.setExtEventInOutName(Constants.Status.PT_FK.getDes());
+                    }
+                }else {
+                    eventVo.setExtEventInOutName("");
+                }
+                if (Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.DOOR_FACE_AUTH_SUCCESS.getKey()) {
+                    eventVo.setEventTypeName(HKConstants.EventTypes.DOOR_FACE_AUTH_SUCCESS.getName());
+                } else if (Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.DOOR_FACE_AUTH_FAIL.getKey()) {
+                    eventVo.setEventTypeName(HKConstants.EventTypes.DOOR_FACE_AUTH_FAIL.getName());
+                }
+                try {
+                    eventVo.setHappenTime(DateUtil.timeEscape(obj.getHappenTime()));
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+                voList.add(eventVo);
+            });
+        }
+        return voList;
+    }
+
+    private IPage<DeviceEventDTO> getDataInfo(PageWrap<DeviceEvent> pageWrap) {
         IPage<DeviceEvent> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<DeviceEvent> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
@@ -313,35 +371,32 @@
         //鏄惁鍖呭惈鑻辨枃
         boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords());
         queryWrapper.leftJoin(Member.class,Member::getHkId,DeviceEvent::getExtEventPersonNo)
-                    .leftJoin(Company.class,Company::getId,Member::getCompanyId)
-                    .leftJoin(Device.class,Device::getHkId,DeviceEvent::getSrcParentIndex)
-                    .selectAll(DeviceEvent.class)
-                    .selectAs(Member::getName,DeviceEventDTO::getPersonName)
-                    .selectAs(Member::getType,DeviceEventDTO::getPersonType)
-                    .selectAs(Member::getPhone,DeviceEventDTO::getPersonPhone)
-                    .selectAs(Member::getIdcardDecode,DeviceEventDTO::getPersonIdcardDecode)
-                    .selectAs(Device::getName,DeviceEventDTO::getDevName)
-                    .selectAs(Company::getName,DeviceEventDTO::getPersonCompanyName);
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                .leftJoin(Device.class,Device::getHkId,DeviceEvent::getSrcParentIndex)
+                .selectAll(DeviceEvent.class)
+                .selectAs(Member::getName,DeviceEventDTO::getPersonName)
+                .selectAs(Member::getType,DeviceEventDTO::getPersonType)
+                .selectAs(Member::getPhone,DeviceEventDTO::getPersonPhone)
+                .selectAs(Member::getIdcardDecode,DeviceEventDTO::getPersonIdcardDecode)
+                .selectAs(Device::getName,DeviceEventDTO::getDevName)
+                .selectAs(Company::getName,DeviceEventDTO::getPersonCompanyName);
         queryWrapper.like(number, Member::getPhone, pageWrap.getModel().getKeyWords())
-                    .like((b||hasWord),Member::getName, pageWrap.getModel().getKeyWords())
-                    .eq(StringUtils.isNotBlank(pageWrap.getModel().getPersonType()),
-                                                Member::getType,
-                                                pageWrap.getModel().getPersonType())
-                    .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
-                                                DeviceEvent::getEventType,
-                                                pageWrap.getModel().getEventType())
-                    .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
-                                                DeviceEvent::getCreateDate,
-                                                pageWrap.getModel().getStartTime())
-                    .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
-                                                DeviceEvent::getCreateDate,
-                                                pageWrap.getModel().getEndTime());
+                .like((b||hasWord),Member::getName, pageWrap.getModel().getKeyWords())
+                .eq(StringUtils.isNotBlank(pageWrap.getModel().getPersonType()),
+                        Member::getType,
+                        pageWrap.getModel().getPersonType())
+                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
+                        DeviceEvent::getEventType,
+                        pageWrap.getModel().getEventType())
+                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
+                        DeviceEvent::getCreateDate,
+                        pageWrap.getModel().getStartTime())
+                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
+                        DeviceEvent::getCreateDate,
+                        pageWrap.getModel().getEndTime());
         queryWrapper.orderByDesc(DeviceEvent::getHappenTime);
         IPage<DeviceEventDTO> deviceEventDTOIPage = deviceEventJoinMapper.selectJoinPage(page, DeviceEventDTO.class, queryWrapper);
-        if(null != deviceEventDTOIPage && deviceEventDTOIPage.getRecords().size() > 0) {
-            deviceEventDTOIPage.setRecords(newDeviceEvent(deviceEventDTOIPage.getRecords()));
-        }
-        return PageData.from(deviceEventDTOIPage);
+        return deviceEventDTOIPage;
     }
 
     // 瀵瑰浘鐗囪繘琛屽垽鏂鐞�
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
index 7fa419f..1eb177e 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
@@ -27,7 +27,6 @@
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
index 58a2b9c..eeaf8a6 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
@@ -3,14 +3,19 @@
 import cn.hutool.core.lang.PatternPool;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ReUtil;
+import com.doumee.core.haikang.model.HKConstants;
 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.admin.response.CarEventDTO;
 import com.doumee.dao.business.MemberCardMapper;
 import com.doumee.dao.business.join.MemberCardJoinMapper;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberCard;
+import com.doumee.dao.business.model.Retention;
+import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.service.business.MemberCardService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -21,8 +26,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 鐢ㄦ埛鍗$墖缁戝畾淇℃伅琛⊿ervice瀹炵幇
@@ -78,6 +84,14 @@
         }
     }
 
+    public void updateRefundCard(MemberCard memberCard) {
+        int i = memberCardMapper.updateById(memberCard);
+        // 璋冪敤service 鍚屾鏇存柊娴峰悍閭h竟鐨勫搴斿崱鐘舵�侊紝涔熸敼涓洪��鍗�
+        if(i > 0){
+
+        }
+    }
+
     @Override
     public MemberCard findById(Integer id) {
         return memberCardMapper.selectById(id);
@@ -92,6 +106,11 @@
     @Override
     public List<MemberCard> findList(MemberCard memberCard) {
         QueryWrapper<MemberCard> wrapper = new QueryWrapper<>(memberCard);
+        wrapper.lambda().eq(MemberCard::getIsdeleted, Constants.ZERO);
+        wrapper.lambda().eq(MemberCard::getHkStatus, Constants.ONE);
+        // 鍚敤鍜岄��鍗$殑鍗″彿
+        wrapper.lambda().and(param -> param.eq(MemberCard::getStatus,Constants.ZERO).
+                         or().eq(MemberCard::getStatus,Constants.TWO));
         return memberCardMapper.selectList(wrapper);
     }
 
@@ -166,6 +185,9 @@
                     .like(number,Member::getPhone,pageWrap.getModel().getKeyWords())
                     .like((b||hasWord),Member::getName,pageWrap.getModel().getKeyWords());
         IPage<MemberCard> memberCardIPage = memberCardJoinMapper.selectJoinPage(page, MemberCard.class,queryWrapper);
+        if(null != memberCardIPage && memberCardIPage.getRecords().size() > 0) {
+            memberCardIPage.setRecords(getDataPackage(memberCardIPage));
+        }
         return PageData.from(memberCardIPage);
     }
 
@@ -174,4 +196,43 @@
         QueryWrapper<MemberCard> wrapper = new QueryWrapper<>(memberCard);
         return memberCardMapper.selectCount(wrapper);
     }
+
+    private List<MemberCard> getDataPackage(IPage<MemberCard> memberCardIPage) {
+        List<MemberCard> newDataList = new ArrayList<>();
+        memberCardIPage.getRecords().stream().forEach(obj->{
+            if(null != obj.getType()) {
+                if(Constants.equalsInteger(obj.getCardType(),Constants.ZERO)) {
+                    obj.setTypeName(Constants.Status.LW_FK.getDes());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.ONE)){
+                    obj.setTypeName(Constants.Status.PT_FK.getDes());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.TWO)){
+                    obj.setTypeName(Constants.Status.NB_FK.getDes());
+                }
+            }
+            if(null != obj.getCardType()) {
+                if(Constants.equalsInteger(obj.getCardType(),Constants.ZERO)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.DISABLE.getName());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.ONE)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.ENABLE.getName());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.TWO)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.REFUNDCARD.getName());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.THREE)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.LOSS.getName());
+                }
+            }
+            if(null != obj.getStatus()) {
+                if(Constants.equalsInteger(obj.getCardType(),Constants.ONE)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.IC.getName());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.TWO)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.CPU.getName());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.THREE)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.YJLCARD.getName());
+                }else if(Constants.equalsInteger(obj.getCardType(),Constants.FOUR)) {
+                    obj.setCardTypeName(HKConstants.CardStatus.MCARD.getName());
+                }
+            }
+            newDataList.add(obj);
+        });
+        return newDataList;
+    }
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 8d0b612..394f3dd 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -45,7 +45,6 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.apache.shiro.SecurityUtils;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -326,6 +325,10 @@
     @Override
     public List<Member> findList(Member member) {
         QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
+        if(null != member.getType()) {
+            wrapper.lambda().eq(Member::getType,member.getType());
+        }
+        wrapper.lambda().eq(Member::getIsdeleted,Constants.ZERO);
         return memberMapper.selectList(wrapper);
     }
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
index 8bf9f8b..1772d7a 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
@@ -24,7 +24,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -133,10 +132,7 @@
         return problemLogIPage;
     }
 
-    /**
-     * 瀵煎嚭
-     * @param pageWrap 鍒嗛〉瀵硅薄
-     */
+    @Override
     public List<ProblemLogVo> findPageExcel(PageWrap<ProblemLog> pageWrap) {
         IPage<ProblemLog> problemLogIPage = dataInfo(pageWrap);
         List<ProblemLogVo> voList = new ArrayList<>();
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
index a715a63..47b8bfd 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
@@ -208,12 +208,8 @@
         return PageData.from(retentionIPage);
     }
 
-    /**
-     * 瀵煎嚭
-     *
-     * @param pageWrap 鍒嗛〉瀵硅薄
-     * @return PageData<RetentionVo>
-     */
+
+    @Override
     public List<RetentionVo> findPageExcel(PageWrap<Retention> pageWrap) {
         IPage<Retention> retentionInfo = getDataInfo(pageWrap);
         List<RetentionVo> retentionVoList = new ArrayList<>();
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
index 16a128b..a90c2bf 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
@@ -16,6 +16,7 @@
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.SystemDictDataMapper;
 import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.vo.VisitEventVo;
 import com.doumee.service.business.VisitEventService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -236,6 +237,39 @@
     @Override
     public PageData<VisitEventDTO> findVisitPage(PageWrap<VisitEvent> pageWrap) {
 
+        IPage<VisitEventDTO> visitEventDTOIPage = getDataInfo(pageWrap);
+        if(null != visitEventDTOIPage && visitEventDTOIPage.getRecords().size() > 0) {
+            visitEventDTOIPage.setRecords(newVisitEvent(visitEventDTOIPage.getRecords()));
+        }
+        return PageData.from(visitEventDTOIPage);
+    }
+
+    @Override
+    public List<VisitEventVo> findPageExcel(PageWrap<VisitEvent> pageWrap) {
+        IPage<VisitEventDTO> visitEventExcel = getDataInfo(pageWrap);
+        List<VisitEventVo> voList = new ArrayList<>();
+        if(null != visitEventExcel && visitEventExcel.getRecords().size() > 0) {
+            visitEventExcel.getRecords().stream().forEach(obj->{
+                VisitEventVo eventVo = new VisitEventVo();
+                eventVo.setPersonName(obj.getPersonName());
+                eventVo.setPersonPhone(obj.getPersonPhone());
+                eventVo.setIdNo(obj.getIdNo());
+                eventVo.setPersonCompanyName(obj.getPersonCompanyName());
+                eventVo.setCarNo(obj.getCarNo());
+                eventVo.setBeVisitedPersonName(obj.getBeVisitedPersonName()+"-"+obj.getBeVisitedPersonOrg());
+                if(Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){
+                    eventVo.setEventTypeName(HKConstants.EventTypes.VISIT_SIGN_IN.getName());
+                }else if(Constants.formatIntegerNum(obj.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()){
+                    eventVo.setEventTypeName(HKConstants.EventTypes.VISIT_SIGN_OUT.getName());
+                }
+                eventVo.setHappenTime(obj.getHappenTime());
+                voList.add(eventVo);
+            });
+        }
+        return voList;
+    }
+
+    private IPage<VisitEventDTO> getDataInfo(PageWrap<VisitEvent> pageWrap) {
         //鏄惁鏄暟瀛�
         boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
         //鏄惁鍖呭惈涓枃
@@ -247,36 +281,34 @@
         MPJLambdaWrapper<VisitEvent> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper .leftJoin(Visits.class,Visits::getHkId,VisitEvent::getVisitorId);
         queryWrapper.selectAll(VisitEvent.class)
-                    .selectAs(Visits::getCompanyName,VisitEventDTO::getPersonCompanyName);
+                .selectAs(Visits::getCompanyName,VisitEventDTO::getPersonCompanyName);
         queryWrapper.like(number,
-                            VisitEvent::getPhone,
-                            pageWrap.getModel().getKeyWords())
-                    .like((b ||hasWord),
-                            VisitEvent::getPersonName,
-                            pageWrap.getModel().getKeyWords())
-                    .like(StringUtils.isNotBlank(pageWrap.getModel().getCarNo()),
-                            VisitEvent::getCarNo,
-                            pageWrap.getModel().getKeyWords())
-                    .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
-                            Company::getName,
-                            pageWrap.getModel().getCompanyName())
-                    .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
-                            VisitEvent::getEventType,
-                            pageWrap.getModel().getEventType())
-                    .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
-                            VisitEvent::getHappenTime,
-                            pageWrap.getModel().getStartTime())
-                    .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
-                            VisitEvent::getHappenTime,
-                            pageWrap.getModel().getEndTime());
+                VisitEvent::getPhone,
+                pageWrap.getModel().getKeyWords())
+                .like((b ||hasWord),
+                        VisitEvent::getPersonName,
+                        pageWrap.getModel().getKeyWords())
+                .like(StringUtils.isNotBlank(pageWrap.getModel().getCarNo()),
+                        VisitEvent::getCarNo,
+                        pageWrap.getModel().getKeyWords())
+                .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
+                        Company::getName,
+                        pageWrap.getModel().getCompanyName())
+                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
+                        VisitEvent::getEventType,
+                        pageWrap.getModel().getEventType())
+                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
+                        VisitEvent::getHappenTime,
+                        pageWrap.getModel().getStartTime())
+                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
+                        VisitEvent::getHappenTime,
+                        pageWrap.getModel().getEndTime());
         queryWrapper.orderByDesc(VisitEvent::getHappenTime);
         IPage<VisitEventDTO> visitEventDTOIPage = visitEventJoinMapper.selectJoinPage(page, VisitEventDTO.class, queryWrapper);
-        if(null != visitEventDTOIPage && visitEventDTOIPage.getRecords().size() > 0) {
-            visitEventDTOIPage.setRecords(newVisitEvent(visitEventDTOIPage.getRecords()));
-        }
-        return PageData.from(visitEventDTOIPage);
+        return visitEventDTOIPage;
     }
 
+
     private List<VisitEventDTO> newVisitEvent(List<VisitEventDTO> VisitEventDTOList) {
         List<String> codes = Arrays.asList(Constants.FTP_RESOURCE_PATH,Constants.MEMBER_IMG);
         List<SystemDictData> list = systemDictDataMapper.list(codes);
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 40f22bd..e4c3e02 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -22,6 +22,7 @@
 import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.admin.response.MemberInfoDTO;
 import com.doumee.dao.business.DeviceRoleMapper;
 import com.doumee.dao.business.MemberMapper;
@@ -30,6 +31,7 @@
 import com.doumee.dao.business.join.DeviceJoinMapper;
 import com.doumee.dao.business.join.VisitsJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.web.response.VisitDetailVO;
 import com.doumee.service.business.VisitsService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -72,6 +74,8 @@
     @Autowired
     private DeviceJoinMapper deviceJoinMapper;
 
+    @Autowired
+    private WxPlatNotice wxPlatNotice;
 
     @Override
     public Integer create(Visits visits) {
@@ -94,7 +98,9 @@
         getHkDeviceRoles(visits);
         //妫�楠屾嫓璁夸汉鏄惁鍚堟硶
         Member visitMember = isValideVisitedUser(visits.getReceptMemberId());
-        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType()) &&!IdcardUtil.isValidCard(visits.getIdcardNo())){
+        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&visits.getIdcardNo().length()!=18
+            //&&!IdcardUtil.isValidCard(visits.getIdcardNo())
+        ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿鐮佹湁璇紝璇锋牳瀹炲悗閲嶈瘯锛�");
         }
         Date date = new Date();
@@ -114,11 +120,15 @@
         if(StringUtils.isNotBlank(erpId)){
             visits.setErpId(erpId);
         }else{
-            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鍙戣捣鎷滆瀹℃壒鐢宠澶辫触锛�");
+//            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鍙戣捣鎷滆瀹℃壒鐢宠澶辫触锛�");
         }
         visitsMapper.insert(visits);
         initWithVisitInfo(visits);
         updateProblemLog(visits,problemLog,member);
+        //鍙戦�佸井淇″叕浼楀彿閫氱煡
+        wxPlatNotice.sendVisitAuditTemplateNotice(visits,
+                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
+                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
         return visits.getId();
     }
 
@@ -664,4 +674,43 @@
         return PageData.from(result);
     }
 
+
+
+    @Override
+    public VisitDetailVO getVisitDetail(Integer id){
+        Visits visits = visitsMapper.selectById(id);
+        if(Objects.isNull(visits)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Member member = memberMapper.selectById(visits.getReceptMemberId());
+        if(Objects.isNull(member)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌琚鍛樺伐淇℃伅");
+        }
+        VisitDetailVO visitDetailVO = new VisitDetailVO();
+        visitDetailVO.setStatus(visits.getStatus());
+        visitDetailVO.setCarNos(visits.getCarNos());
+        visitDetailVO.setVisitUserName(member.getName());
+        visitDetailVO.setVisitReason(visits.getReason());
+        visitDetailVO.setVisitTime(DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm") + " 鑷� " + DateUtil.DateToStr(visits.getEndtime(),"yyyy-MM-dd HH:mm") );
+        if(StringUtils.isNotBlank(visits.getDoors())){
+            List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+                            .select(DeviceRole::getName)
+                            .eq(DeviceRole::getIsdeleted,Constants.ZERO)
+                    .in(DeviceRole::getId,visits.getDoors().split(",")));
+            if(CollectionUtils.isNotEmpty(deviceRoleList)){
+                visitDetailVO.setDoorGroupName(
+                        deviceRoleList.stream().map(m->m.getName()).collect(Collectors.toList())
+                );
+            }
+        }
+        visitDetailVO.setWithVisitsList(visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
+                .select(Visits::getName,Visits::getPhone)
+                .eq(Visits::getParentId,id)));
+        return visitDetailVO;
+    }
+
+
+
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
index ed4e845..2f2f9d1 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -26,7 +26,6 @@
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
index ae82319..a6ed00d 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -28,7 +28,6 @@
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
index fcdcb57..92c67c6 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -1,6 +1,5 @@
 package com.doumee.service.system.impl;
 
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java
index 854619d..00c2be3 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java
@@ -2,6 +2,7 @@
 
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.web.reqeust.FinishAnswerDTO;
 import com.doumee.dao.web.response.ProblemsVO;
 import com.doumee.service.business.ProblemLogService;
@@ -36,6 +37,9 @@
     @Autowired
     private ProblemLogService problemLogService;
 
+    @Autowired
+    private WxPlatNotice wxPlatNotice;
+
 
     @ApiOperation(value = "鑾峰彇棰樼洰鏁版嵁", notes = "H5")
     @GetMapping("/getProblemsVO")
@@ -54,4 +58,6 @@
     }
 
 
+
+
 }
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java
index 27d0acb..a858624 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java
@@ -16,7 +16,6 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
index a930855..4182942 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -6,6 +6,7 @@
 import com.doumee.dao.business.model.Visits;
 import com.doumee.dao.web.reqeust.CheckVisitedDTO;
 import com.doumee.dao.web.response.MemberVO;
+import com.doumee.dao.web.response.VisitDetailVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.VisitsService;
@@ -14,7 +15,7 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -66,4 +67,9 @@
     }
 
 
+    @ApiOperation(value = "璁垮璁板綍璇︽儏", notes = "璁垮璁板綍璇︽儏")
+    @GetMapping("/detail")
+    public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.getVisitDetail(id));
+    }
 }
diff --git a/server/pom.xml b/server/pom.xml
index 6044bf1..90fb96f 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -216,18 +216,18 @@
       <artifactId>pinyin4j</artifactId>
       <version>2.5.1</version>
     </dependency>
-    <!-- WeChat 灏忕▼搴� -->
-    <dependency>
-      <groupId>com.github.binarywang</groupId>
-      <artifactId>weixin-java-miniapp</artifactId>
-      <version>${weixin-java-miniapp.version}</version>
-    </dependency>
-    <!-- WeChat 鏀粯 -->
-    <dependency>
-      <groupId>com.github.binarywang</groupId>
-      <artifactId>weixin-java-pay</artifactId>
-      <version>${weixin-java-pay.version}</version>
-    </dependency>
+<!--    &lt;!&ndash; WeChat 灏忕▼搴� &ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>com.github.binarywang</groupId>-->
+<!--      <artifactId>weixin-java-miniapp</artifactId>-->
+<!--      <version>${weixin-java-miniapp.version}</version>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash; WeChat 鏀粯 &ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>com.github.binarywang</groupId>-->
+<!--      <artifactId>weixin-java-pay</artifactId>-->
+<!--      <version>${weixin-java-pay.version}</version>-->
+<!--    </dependency>-->
 
     <!--  闃块噷浜慜SS-->
     <dependency>
@@ -281,6 +281,12 @@
       <artifactId>spring-boot-starter-data-redis</artifactId>
     </dependency>
 
+    <!-- WxJava鍏紬鍙� -->
+    <dependency>
+      <groupId>com.github.binarywang</groupId>
+      <artifactId>weixin-java-mp</artifactId>
+      <version>3.6.0</version>
+    </dependency>
 
   </dependencies>
   <build>

--
Gitblit v1.9.3