From eea92f23bf8ead897f346ae6ccc8603ac039e566 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 30 七月 2024 09:48:47 +0800
Subject: [PATCH] 修复bug

---
 admin/.env                                                                                                                          |    3 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmValuesParamRequest.java  |   41 +
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java                                                 |    5 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDataRequest.java         |   29 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInfoRequest.java         |   17 
 admin/vue.config.js                                                                                                                 |   10 
 server/dmvisit_service/src/main/resources/application-testYL.yml                                                                    |    8 
 admin/src/components/business/OperaVisitsIccmDesWindow.vue                                                                          |  297 ++++++++
 server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java                                                    |    1 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java                                                    |    9 
 server/dmvisit_service/src/main/resources/application-proYL.yml                                                                     |   80 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java                             |   12 
 admin/src/api/business/member.js                                                                                                    |    3 
 server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java                                              |   10 
 admin/src/views/business/visitsIccmHk.vue                                                                                           |  135 +++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java                                  |   13 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmParamRequest.java        |   17 
 server/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java                                           |    2 
 server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleAdminTool.java                                                           |   92 ++
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmRequest.java             |   13 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java                            |  120 +++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java                |   18 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmTargetParamRequest.java  |   23 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java                                                    |   31 
 admin/public/index.html                                                                                                             |    2 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java                                                 |   42 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java                                   |    2 
 server/dmvisit_admin/src/main/resources/application.yml                                                                             |    2 
 server/dmvisit_screen/src/main/java/com/doumee/service/impl/ScreenServiceImpl.java                                                  |   19 
 server/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java                                             |    8 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentVisitorInfoResponse.java                |   34 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java                                                |   12 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentEventInfoResponse.java                  |   28 
 server/dmvisit_screen/src/main/resources/application.yml                                                                            |    2 
 server/openapi/src/main/resources/logback-spring.xml                                                                                |   61 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java                  |  139 +++
 server/dmvisit_web/src/main/resources/logback-spring.xml                                                                            |   61 +
 server/admin_sys_timer/src/main/java/com/doumee/task/ScheduleTool.java                                                              |   68 -
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java                             |  246 ++++++
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java                                                     |   23 
 server/dmvisit_service/src/main/java/com/doumee/service/system/SystemLoginService.java                                              |    2 
 server/admin_sys_timer/src/main/resources/application.yml                                                                           |    2 
 server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java                                                           |   10 
 admin/src/utils/request.js                                                                                                          |    2 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentEventListRequest.java                   |   15 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDetailParamRequest.java  |   29 
 server/pom.xml                                                                                                                      |    1 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInvoiceParamRequest.java |   45 +
 admin/src/views/business/visitEventIccm.vue                                                                                         |  150 ++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java                             |   25 
 server/dmvisit_admin/src/main/resources/logback-spring.xml                                                                          |   64 +
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentIccmInfoResponse.java                   |   30 
 admin/src/views/business/internalMember.vue                                                                                         |   27 
 53 files changed, 2,051 insertions(+), 89 deletions(-)

diff --git a/admin/.env b/admin/.env
index 69bdb2d..a23a518 100644
--- a/admin/.env
+++ b/admin/.env
@@ -10,4 +10,5 @@
 VUE_APP_API_PREFIX = '/admin_interface'
 
 # 椤圭洰鍚嶇О
-VUE_APP_TITLE = '鍗庢櫉鏅烘収鍥尯绯荤粺'
+# VUE_APP_TITLE = '鍗庢櫉鏅烘収鍥尯绯荤粺'
+VUE_APP_TITLE = '浼婂埄澶у睆绯荤粺'
diff --git a/admin/public/index.html b/admin/public/index.html
index 7169097..5d80d0c 100644
--- a/admin/public/index.html
+++ b/admin/public/index.html
@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title>鍗庢櫉鏅烘収鍥尯绯荤粺</title>
+    <title>浼婂埄澶у睆绯荤粺</title>
   </head>
   <body>
     <noscript>
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
index d45f627..fbe36b8 100644
--- a/admin/src/api/business/member.js
+++ b/admin/src/api/business/member.js
@@ -13,6 +13,9 @@
 export function memberSync (data) {
   return request.post('/business/member/syncAll', data)
 }
+export function syncUserData (data) {
+  return request.post('/business/hksync/syncUserData', data)
+}
 export function delHkForce (data) {
   return request.post('/business/member/delHkForce', data)
 }
diff --git a/admin/src/components/business/OperaVisitsIccmDesWindow.vue b/admin/src/components/business/OperaVisitsIccmDesWindow.vue
new file mode 100644
index 0000000..30f082f
--- /dev/null
+++ b/admin/src/components/business/OperaVisitsIccmDesWindow.vue
@@ -0,0 +1,297 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="70%"
+        :visible.sync="visible"
+        append-to-body
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="list">
+            <div class="list_item">
+                <div class="list_item_label">鎷滆淇℃伅</div>
+                <div class="list_item_val" v-if="info" style="display: inline-block">
+                    <div class="list_item_val_item">鎷滆瀵规柟锛歿{info.receptMemberName}} - {{info.receptMemberDepartment}}</div>
+                    <div class="list_item_val_item">棰勭害鏃堕棿锛歿{info.starttime}} 鑷� {{info.endtime}}</div>
+                    <div class="list_item_val_item" v-if="info.inDate && info.outDate">绛惧埌鏃堕棿锛歿{info.inDate}} 鑷� {{info.outDate}}</div>
+                    <div class="list_item_val_item" v-else>绛惧埌鏃堕棿锛�-</div>
+                    <div class="list_item_val_item">鎷滆浜嬬敱锛歿{info.reason}}</div>
+                    <div class="list_item_val_item">鐢宠浜哄憳锛歿{info.name}} {{info.companyName}}</div>
+                    <div class="list_item_val_item">鐢宠闂ㄧ锛歿{info.deviceRoleList ? info.deviceRoleList.map(item => item.name).join(' | ') : '-'}}</div>
+                    <div class="list_item_val_item">鍒涘缓鏃堕棿锛歿{info.createDate}}</div>
+                </div>
+                <div class="list_item_val" v-if="info" style="display: inline-block;float: right">
+                  <div class="list_item_val_item"   id="qrcode2" ref="qrcode2"></div>
+                </div>
+              </div>
+            <div class="list_item">
+                <div class="list_item_label">璁垮淇℃伅</div>
+                <div class="list_item_table" v-if="info">
+                    <el-table
+                        :data="info.withUserList ? info.withUserList : []"
+                        border
+                        :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}"
+                        style="width: 100%">
+                      <el-table-column prop="status"   label="鐘舵��" min-width="100px">
+                        <template slot-scope="{row}">
+                          <span v-if="row.status === 0">鏈鍒�</span>
+                          <span v-if="row.status === 1">宸茬鍒�</span>
+                          <span v-if="row.status === 2">宸茬閫�</span>
+                          <span v-if="row.status === 3">婊炵暀</span>
+                          <span v-if="row.status === 4">鏈闂�</span>
+                          <span v-if="row.status === 5">鑷姩绛剧</span>
+                          <span v-if="row.status === 6">鏈閫�</span>
+                        </template>
+                      </el-table-column>
+                        <el-table-column
+                            width="150"
+                            label="濮撳悕">
+                            <template slot-scope="{row}">
+                                <span>{{row.name}}</span>
+                                <span style="border-radius: 5px; padding: 2px 5px; box-sizing: border-box; border: 1px solid #0d68ff; color: #0d68ff; margin-left: 5px;" v-if="info.memberId === row.memberId">鐢宠浜�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            label="鎬у埆">
+                            <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
+                            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>
+                        <el-table-column
+                            label="璇佷欢绫诲瀷">
+                            <template slot-scope="{row}">
+                                <span v-if="row.idcardType === 111">韬唤璇�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            width="160"
+                            prop="idcardDecode"
+                            label="韬唤璇佸彿鐮�">
+                        </el-table-column>
+                        <el-table-column
+                            width="150"
+                            prop="companyName"
+                            label="鍏徃">
+                        </el-table-column>
+                        <el-table-column
+                            width="150"
+                            prop="carNos"
+                            label="闅忚杞﹁締">
+                        </el-table-column>
+                        <el-table-column
+                            width="150"
+                            label="璁垮浜岀淮鐮�">
+                            <template slot-scope="{row}">
+                              <div   :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            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
+                            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>
+            </div>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { queryById } from '@/api/business/visits'
+import QRCode from "qrcodejs2";
+export default {
+  name: 'OperaVisitsIccmDesWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      list: [],
+      info: null,
+      innerVisible:false
+    }
+  },
+  created () {
+  },
+  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
+      }
+    },
+    crateQrcodeShow (div,qrcode1) {
+      if(qrcode1 ==null ||qrcode1 ==''){
+        return;
+      }
+      this.qr = new QRCode(div, {
+        width: 90,
+        height: 90,
+        text: qrcode1
+      })
+    },
+
+    open (title, id) {
+      this.title = title
+      this.visible = true
+      queryById(id)
+        .then(res => {
+          console.log(res)
+          this.info = res
+          this.$nextTick(() => {
+            // this.$refs.qrcode2.innerHTML = ''
+            // this.crateQrcodeShow('qrcode2',res.qrcode)
+            if(this.info.withUserList ){
+              this.info.withUserList.forEach(row => {
+                this.$refs['qrcode'+row.id].innerHTML = ''
+                this.crateQrcodeShow('qrcode'+row.id,row.qrcode)
+              })
+            }
+          })
+        })
+    }
+  }
+}
+</script>
+<style>
+    .el-image-viewer__wrapper {
+        z-index: 3000 !important;
+    }
+</style>
+<style lang="scss" scoped>
+    .list {
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        .list_item {
+            width: 100%;
+            margin-bottom: 30px;
+            &:last-child {
+                margin-bottom: 0 !important;
+            }
+            .list_item_label {
+                font-size: 18px;
+                font-weight: 600;
+                color: #000000;
+                margin-bottom: 15px;
+            }
+            .list_item_info {
+                font-size: 14px;
+                color: #222222;
+                margin-bottom: 10px;
+            }
+            .list_item_status {
+                width: 100%;
+                display: flex;
+                flex-direction: column;
+                .list_item_status_item {
+                    width: 100%;
+                    max-height: 100px;
+                    position: relative;
+                    margin-bottom: 30px;
+                    .dian {
+                        width: 15px;
+                        height: 15px;
+                        border-radius: 50%;
+                        background: #ffb447;
+                        position: absolute;
+                        left: 0;
+                        top: 50%;
+                        transform: translate(0, -50%);
+                    }
+                    .xian {
+                        width: 1px;
+                        height: calc(100% + 30px);
+                        background: #ffb447;
+                        position: absolute;
+                        top: 50%;
+                        left: 7px;
+                        transform: translate(-50%, 0);
+                    }
+                    .status_info {
+                        /*width: 100%;*/
+                        height: 100%;
+                        display: flex;
+                        flex-direction: column;
+                        margin-left: 30px;
+                        box-sizing: border-box;
+                        .status_info_a {
+                            font-size: 16px;
+                            color: black;
+                            margin-bottom: 10px;
+                        }
+                        .status_info_b {
+                            font-size: 13px;
+                            color: #666666;
+                            margin-bottom: 10px;
+                        }
+                        .status_info_c {
+                            padding: 5px 10px;
+                            background: #ececec;
+                            font-size: 13px;
+                            color: black;
+                            border-radius: 5px;
+                            box-sizing: border-box;
+                        }
+                    }
+                }
+            }
+            .list_item_val {
+                width: 100%;
+                margin-bottom: 15px;
+                &:last-child {
+                    margin-bottom: 0 !important;
+                }
+                .list_item_val_item {
+                    font-size: 14px;
+                    color: #222222;
+                    margin-bottom: 5px;
+                    &:last-child {
+                        margin-bottom: 0 !important;
+                    }
+                }
+            }
+        }
+    }
+</style>
diff --git a/admin/src/utils/request.js b/admin/src/utils/request.js
index e73f3ae..f1f64be 100644
--- a/admin/src/utils/request.js
+++ b/admin/src/utils/request.js
@@ -52,7 +52,7 @@
   // 鏈櫥褰�
   if (response.data.code === 401) {
     if (response.config.autoLogin !== false) {
-      window.location.href = process.env.VUE_APP_ROUTER_MODE === 'history' ? '/#/login' : '/login'
+      window.location.href = process.env.VUE_APP_ROUTER_MODE === 'history' ? 'admin/#/login' : 'admin/login'
     }
     return Promise.reject(response.data)
   }
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
index a192b7c..aeed504 100644
--- a/admin/src/views/business/internalMember.vue
+++ b/admin/src/views/business/internalMember.vue
@@ -44,10 +44,11 @@
         </template>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
-            <ul class="toolbar" v-permissions="['business:member:delete','business:member:sync']">
+            <ul class="toolbar" v-permissions="['business:member:delete','business:member:sync','business:member:syncdata']">
 <!--                <li><el-button type="primary">闂ㄧ鎺堟潈</el-button></li>-->
-                <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">鍚屾</el-button></li>
-                <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button></li>
+                <li><el-button type="primary" v-permissions="['business:member:syncdata']" :loading="loading" @click="syncUserData()">绔嬪嵆涓嬪彂寰呭悓姝ュ憳宸�</el-button></li>
+                         <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">鍚屾</el-button></li>
+              <!--   <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button></li>-->
             </ul>
             <el-table
                 v-loading="isWorking.search"
@@ -137,7 +138,7 @@
 import cardOpeningRecord from '@/components/business/cardOpeningRecord'
 import Tree from '@/components/common/Tree'
 import { fetchList } from '@/api/business/company'
-import { memberSync, roleAuth } from '@/api/business/member'
+import { memberSync, roleAuth, syncUserData } from '@/api/business/member'
 export default {
   name: 'internalMember',
   extends: BaseTable,
@@ -218,6 +219,24 @@
         })
         .catch(() => {})
     },
+    async syncUserData () {
+      this.$dialog.actionConfirm('璇ユ搷浣滃皢瑙﹀彂涓嬪彂鐨勪汉鍛樹俊鎭洿鏂板拰閲嶆柊涓嬪彂锛佽璋ㄦ厧鎿嶄綔', '鎮ㄧ‘璁ょ珛鍗充笅鍙戝叏閮ㄥ緟鍚屾浜哄憳淇℃伅鍚楋紵')
+        .then(() => {
+          this.loading = true
+          syncUserData({})
+            .then(res => {
+              this.$tip.apiSuccess(res || '鍚屾鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
+        })
+        .catch(() => {})
+    },
     callback (row) {
       this.searchForm.erpOrgId = row.erpId
       this.searchForm.companyId = row.id
diff --git a/admin/src/views/business/visitEventIccm.vue b/admin/src/views/business/visitEventIccm.vue
new file mode 100644
index 0000000..edd7593
--- /dev/null
+++ b/admin/src/views/business/visitEventIccm.vue
@@ -0,0 +1,150 @@
+<template>
+    <TableLayout :permissions="['business:visitevent:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <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="carNo">
+                <el-input v-model="searchForm.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <el-form-item label="鍏徃鍚嶇О" prop="visitorWorkUint">
+                <el-input v-model="searchForm.visitorWorkUint" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
+                <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
+                    <el-option label="璁垮鐧昏" value="541200006"></el-option>
+                  <el-option label="璁垮绛剧" value="541200007"></el-option>
+                  <el-option label="璁垮閫氳" value="541200060"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="璧峰鏃堕棿" prop="carNo">
+                <el-date-picker
+                    @change="seleTime"
+                    v-model="time"
+                    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.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 @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:visitevent:exportExcel']">
+                <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:visitevent:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column prop="personName" label="濮撳悕" min-width="100px"></el-table-column>
+                <el-table-column prop="phone" label="鎵嬫満鍙风爜" min-width="100px"></el-table-column>
+                <el-table-column prop="idcardDecode" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+                <el-table-column prop="visitorWorkUint" label="鍏徃" min-width="100px"></el-table-column>
+                <el-table-column prop="carNo" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+                <el-table-column prop="beVisitedPersonName" label="琚浜�" min-width="100px"></el-table-column>
+                <el-table-column prop="beVisitedPersonOrg" label="琚浜虹粍缁�" min-width="100px"></el-table-column>
+                <el-table-column prop="eventTypeName" label="浜嬩欢绫诲瀷" min-width="100px"></el-table-column>
+                <el-table-column label="鎶撴媿鍥�" min-width="100px">
+                    <template slot-scope="{row}">
+                        <el-image v-if="row.captureUrlFull!=null"
+                            style="width: 80px; height: 80px"
+                            :src="row.captureUrlFull"
+                            :preview-src-list="[row.captureUrlFull]">
+                        </el-image>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="createDate" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+    </TableLayout>
+</template>
+
+<script>
+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: 'VisitEvent',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        personName: '',
+        carNo: '',
+        keyWords: '',
+        startTime: '',
+        endTime: '',
+        eventType: '',
+        visitorWorkUint: '',
+        radio: '0'
+      },
+      time: []
+    }
+  },
+  created () {
+    this.config({
+      module: '璁垮浜嬩欢鎺ㄩ�佽褰曡〃',
+      api: '/business/visitEvent',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+
+    this.changeRadio('0')
+    this.search()
+  },
+  methods: {
+    seleTime (e) {
+      this.searchForm.startTime = e[0]
+      this.searchForm.endTime = e[1]
+      this.searchForm.radio = null
+      this.search()
+    },
+    changeRadio (e) {
+      if (e === '0') {
+        this.searchForm.startTime = timeForMat(0)[0]
+        this.searchForm.endTime = timeForMat(0)[1]
+        this.time = timeForMat(0)
+      } else if (e === '1') {
+        this.searchForm.startTime = timeForMat(6)[0]
+        this.searchForm.endTime = timeForMat(6)[1]
+        this.time = timeForMat(6)
+      } else if (e === '2') {
+        this.searchForm.startTime = timeForMat(29)[0]
+        this.searchForm.endTime = timeForMat(29)[1]
+        this.time = timeForMat(29)
+      }
+      this.search()
+    },
+    reset () {
+      this.$refs.searchForm.resetFields()
+      this.time = []
+      this.searchForm.radio = '0'
+      this.changeRadio('0')
+      this.search()
+    }
+  }
+}
+</script>
diff --git a/admin/src/views/business/visitsIccmHk.vue b/admin/src/views/business/visitsIccmHk.vue
new file mode 100644
index 0000000..bcfa1c7
--- /dev/null
+++ b/admin/src/views/business/visitsIccmHk.vue
@@ -0,0 +1,135 @@
+<template>
+    <TableLayout :permissions="['business:visits: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>
+            <el-form-item label="韬唤璇佸彿" prop="idcardNo">
+                <el-input v-model="searchForm.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <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="status">
+                <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
+                    <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="3"></el-option>
+                    <el-option label="鏈闂�" value="4"></el-option>
+                    <el-option label="鑷姩绛剧" value="5"></el-option>
+                    <el-option label="鏈閫�" value="6"></el-option>
+                </el-select>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+<!--                <el-button type="primary" :loading="isWorking.export" v-permissions="['business:visits:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>-->
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+          <ul class="toolbar"  v-permissions="['business:visits:sync']">
+            <li><el-button type="primary"  v-permissions="['business:visits:sync']" @click="$refs.OperaVisitsHkWindow.open('鍚屾璁垮璁板綍')">鍚屾</el-button></li>
+          </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+                @selection-change="handleSelectionChange"
+            >
+                <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="companyName" label="鍏徃鍚嶇О" min-width="100px"></el-table-column>
+                <el-table-column prop="receptMemberName" label="琚浜�" min-width="100px"></el-table-column>
+                <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><br/>
+                        <span>姝細{{row.endtime}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="闅忚浜哄憳" min-width="100px">
+                    <template slot-scope="{row}">
+                        <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 v-else>-</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="status" fixed="right" label="鐘舵��" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span v-if="row.status === 0">鏈鍒�</span>
+                        <span v-if="row.status === 1">宸茬鍒�</span>
+                        <span v-if="row.status === 2">宸茬閫�</span>
+                        <span v-if="row.status === 3">婊炵暀</span>
+                        <span v-if="row.status === 4">鏈闂�</span>
+                        <span v-if="row.status === 5">鑷姩绛剧</span>
+                        <span v-if="row.status === 6">鏈閫�</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    v-if="containPermissions(['business:visits:update', 'business:visits:delete'])"
+                    label="鎿嶄綔"
+                    min-width="100"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.OperaVisitsIccmDecWindow.open('璇︽儏', row.id)"  >鏌ョ湅璇︽儏</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>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+            <!--      璇︽儏      -->
+            <OperaVisitsIccmDecWindow ref="OperaVisitsIccmDecWindow" />
+            <OperaVisitsHkWindow ref="OperaVisitsHkWindow" @success="search()" />
+        </template>
+    </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaVisitsHkWindow from '@/components/business/OperaVisitsHkWindow'
+import OperaVisitsIccmDecWindow from '@/components/business/OperaVisitsIccmDesWindow'
+export default {
+  name: 'Visits',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaVisitsIccmDecWindow,OperaVisitsHkWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        name: '',
+        companyName: '',
+        idcardNo: '',
+        status: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '璁垮鐢宠淇℃伅琛�',
+      api: '/business/visits',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+
+  }
+}
+</script>
diff --git a/admin/vue.config.js b/admin/vue.config.js
index 19105d0..32e4750 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -1,5 +1,6 @@
 // 璇︾粏閰嶇疆璇峰弬鑰僪ttps://cli.vuejs.org/zh/config/#vue-config-js
 // const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1)
+const path = require('path')
 module.exports = {
   publicPath: process.env.VUE_APP_CONTEXT_PATH,
   outputDir: 'admin',
@@ -21,12 +22,19 @@
         // target: 'http://218.23.218.228:8018/admin_interface',
         // http://218.23.218.228:9912/admin_interface
         // http://facepay.huasunsolar.com/admin_interface
-        target: 'http://localhost:10028',
+        target: 'http://localhost/admin_interface ',
         changeOrigin: true,
         pathRewrite: {
           [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
         }
       }
     }
+  },
+  configureWebpack: {
+    resolve: {
+      alias: {
+        '@': path.resolve(__dirname, 'src')
+      }
+    }
   }
 }
diff --git a/server/admin_sys_timer/src/main/java/com/doumee/task/ScheduleTool.java b/server/admin_sys_timer/src/main/java/com/doumee/task/ScheduleTool.java
index 4237c2a..86278fd 100644
--- a/server/admin_sys_timer/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/admin_sys_timer/src/main/java/com/doumee/task/ScheduleTool.java
@@ -53,33 +53,7 @@
     @Autowired
     private DataSyncConfig dataSyncConfig;
 
-    /**
-     * 姣忓垎閽熸媺鍙栦竴娆′粖鏃ョ殑璁垮棰勭害鏁版嵁
-     * @throws Exception
-     */
-    @Scheduled(cron= "0 0 23 * * ?")
-    public void syncVehicleUpdateData() throws Exception {
-        hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000));
-    }
-    /**
-     * 姣忓垎閽熸媺鍙栦竴娆′粖鏃ョ殑璁垮棰勭害鏁版嵁
-     * @throws Exception
-     */
-    @Scheduled(fixedRate= 3*60*1000)
-    public void syncVistAppointData() throws Exception {
-        if(Constants.DEALING_FROM_HK_VISIT){
-            return ;
-        }
-        try {
-            Constants.DEALING_FROM_HK_VISIT =true;
-            hkSyncVisitFromHKService.syncVistAppointData(new Date());
-            Constants.DEALING_FROM_HK_VISIT =false;
-        }catch (Exception e){
-//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
-        }finally {
-            Constants.DEALING_FROM_HK_VISIT =false;
-        }
-    }
+
     /**
      * 姣�10鍒嗛挓鎷夊彇涓�娆℃渶鏂拌瀹㈢櫥璁扮姸鎬侊紙棰勭害鎴愬姛鍜屽凡鐧昏锛�
      * @throws Exception
@@ -92,7 +66,7 @@
      * 涓嬭浇娴峰悍绯荤粺鍥剧墖鏁版嵁
      * @throws Exception
      */
-    @Scheduled(fixedRate= 60*1000)
+//    @Scheduled(fixedRate= 60*1000)
     public void downloadHkImg() throws Exception {
         if(dataSyncConfig.getNeedDealImg()!=null && dataSyncConfig.getNeedDealImg()){
             hkSyncImgService.downHKImgs(0);
@@ -129,21 +103,31 @@
         hkSyncVisitService.syncVisitData();
     }
 
+        /**
+         * 姣忓垎閽熸媺鍙栦竴娆′粖鏃ョ殑璁垮棰勭害鏁版嵁
+         * @throws Exception
+         */
+        @Scheduled(cron= "0 0 23 * * ?")
+        public void syncVehicleUpdateData() throws Exception {
+            hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000));
+        }
 
 
-    /**
-     * 瀹氭椂鍐荤粨鍐呴儴浜哄憳
-     */
+        /**
+         * 瀹氭椂鍐荤粨鍐呴儴浜哄憳
+         */
 //    @Scheduled(fixedRate= 60*1000)
-    public void memberFreeze()  {
-        memberService.memberFreeze();
-    }
-    /**
-     * 姣忓ぉ娓呯悊瓒呰繃涓�鍛ㄧ殑鎺ュ彛鏃ュ織鏁版嵁锛堟竻闄ゅ拰瀹夐槻骞冲彴瀵规帴鐨勬帴鍙f暟鎹級
-     * @throws Exception
-     */
-//    @Scheduled(cron= "0 0 23 * * ?")
-    public void clearThreeMonthLog() throws Exception {
-        interfaceLogService.clearThreeMonthLog();
-    }
+        public void memberFreeze()  {
+            memberService.memberFreeze();
+        }
+        /**
+         * 姣忓ぉ娓呯悊瓒呰繃涓�鍛ㄧ殑鎺ュ彛鏃ュ織鏁版嵁锛堟竻闄ゅ拰瀹夐槻骞冲彴瀵规帴鐨勬帴鍙f暟鎹級
+         * @throws Exception
+         */
+    @Scheduled(cron= "0 0 23 * * ?")
+        public void remainLastLogs() throws Exception {
+            interfaceLogService.remainLastLogs();
+        }
+
+
 }
diff --git a/server/admin_sys_timer/src/main/resources/application.yml b/server/admin_sys_timer/src/main/resources/application.yml
index fefb609..b029ad3 100644
--- a/server/admin_sys_timer/src/main/resources/application.yml
+++ b/server/admin_sys_timer/src/main/resources/application.yml
@@ -67,7 +67,7 @@
   compression:
     enabled: true
     mime-types: application/json
-  port: 10031
+  port: 10033
   tomcat:
     max-swallow-size: -1
   servlet:
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
index 2de1007..e9628de 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -1,6 +1,7 @@
 package com.doumee.api.business;
 
 import com.doumee.api.BaseController;
+import com.doumee.config.DataSyncConfig;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
 import com.doumee.core.haikang.model.param.request.EventSubRequest;
@@ -8,12 +9,17 @@
 import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
 import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
 import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmDataRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest;
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Member;
 import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl;
 import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
 import com.doumee.service.business.impl.hksync.HkSyncPrivilegeServiceImpl;
 import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
+import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -36,6 +42,8 @@
 public class HkSyncController extends BaseController {
 
     @Autowired
+    private HkSyncOrgUserToHKServiceImpl hkSyncOrgUserService;
+    @Autowired
     private HkSyncDeviceServiceImpl hkSyncDeviceService;
     @Autowired
     private HkSyncParkServiceImpl hkSyncParkService;
@@ -44,6 +52,23 @@
     @Autowired
     private HkSyncPushServiceImpl hkSyncPushService;
 
+
+    /**
+     * 鏄惁寮�鍙戣��
+     */
+    @Autowired
+    private DataSyncConfig dataSyncConfig;
+
+    @ApiOperation("绔嬪嵆鍚屾寰呬笅鍙戜汉鍛樻暟鎹�")
+    @PostMapping("/syncUserData")
+    @RequiresPermissions("business:member:syncdata")
+    public ApiResponse syncUserData(@RequestBody Member member) {
+        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp) {
+            //濡傛灉鏄疎RP绯荤粺鍚屾涓嬪彂
+            hkSyncOrgUserService.syncUserData();
+        }
+        return  ApiResponse.success(null);
+    }
     @PreventRepeat
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ラ棬绂佽澶囨帴鍙�")
     @PostMapping("/syncDevices")
@@ -82,6 +107,12 @@
         String result = hkSyncPushService.dealVisitEvent(param,response);
         return ApiResponse.success(result);
     }
+    @ApiOperation("銆愭捣搴枫�戣瀹CCM浜嬩欢璁㈤槄鎺ㄩ�佸鎺ュ鐞嗘帴鍙�")
+    @PostMapping("/push/visitIccm")
+    public ApiResponse pushVisitIccm(@RequestBody EventVisitIccmRequest param, HttpServletResponse response) {
+        String result = hkSyncPushService.dealVisitEventIccm(param,response);
+        return ApiResponse.success(result);
+    }
 //    @PreventRepeat
     @ApiOperation("銆愭捣搴枫�戝仠杞﹀満浜嬩欢璁㈤槄鎺ㄩ�佸鎺ュ鐞嗘帴鍙�")
     @PostMapping("/push/parks")
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 fe6cd5c..e2f8fa6 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
@@ -115,6 +115,7 @@
         return ApiResponse.success(null);
     }
 
+
     @ApiOperation("鏍规嵁ID 绂佸惎鐢�  ")
     @PostMapping("/updateStatusById")
     @RequiresPermissions("business:member:update")
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 52a6202..dbb45ad 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
@@ -7,9 +7,11 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.dao.admin.response.VisitEventDTO;
+import com.doumee.dao.business.model.CarEvent;
 import com.doumee.dao.business.model.VisitEvent;
 import com.doumee.dao.system.vo.VisitEventVo;
 import com.doumee.service.business.VisitEventService;
+import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -31,6 +33,8 @@
 
     @Autowired
     private VisitEventService visitEventService;
+    @Autowired
+    private HkSyncVisitServiceImpl hkSyncVisitService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -89,4 +93,12 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(visitEventService.findById(id));
     }
+
+    @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾杩囪溅鏁版嵁")
+    @PostMapping("/syncByDate")
+    @RequiresPermissions("business:carevent:sync")
+    public ApiResponse syncByDate(@RequestBody VisitEvent param) {
+        hkSyncVisitService.syncVisitRecords(param.getCreateDate());
+        return ApiResponse.success(null);
+    }
 }
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
index 62e35ec..db1f550 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
@@ -79,9 +79,16 @@
         return ApiResponse.success(null);
     }
 
-    @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾璁垮鏁版嵁")
+    @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾璁垮鏁版嵁ICCM鐗堟湰")
     @PostMapping("/syncByDate")
     @RequiresPermissions("business:visits:sync")
+    public ApiResponse syncByDateIccm(@RequestBody Visits visits) {
+        hkSyncVisitFromHKService.syncVistAppointDataIccm(visits.getStarttime());
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("鏍规嵁鏃ユ湡(starttime)鍚屾璁垮鏁版嵁")
+    @PostMapping("/syncByDateV2")
+    @RequiresPermissions("business:visits:sync")
     public ApiResponse syncByDate(@RequestBody Visits visits) {
         hkSyncVisitFromHKService.syncVistAppointData(visits.getStarttime());
         return ApiResponse.success(null);
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java b/server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
index c0f4baf..0644266 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
@@ -87,7 +87,14 @@
 
         param.setEventDest(path+"/visit");
         param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_IN.getKey()
-                ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()});
+                ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey() });
+        HKService.cancelEventSub(param);//鍏堝彇娑�
+        HKService.eventSub(param);//璁垮浜嬩欢
+
+        param.setEventDest(path+"/visitIccm");
+        param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()
+                ,HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey()
+                ,HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey()});
         HKService.cancelEventSub(param);//鍏堝彇娑�
         HKService.eventSub(param);//璁垮浜嬩欢
 
@@ -95,7 +102,6 @@
         param.setEventTypes(new Integer[]{HKConstants.EventTypes.DOOR_FACE_AUTH_FAIL.getKey(),HKConstants.EventTypes.DOOR_FACE_AUTH_SUCCESS.getKey()});
         HKService.cancelEventSub(param);//鍏堝彇娑�
         HKService.eventSub(param);//闂ㄧ浜嬩欢
-
     }
     /**
      * 鍙栨秷璁㈤槄闂ㄧ浜嬩欢銆佽瀹簨浠躲�佸拰鍋滆溅鍦轰簨浠�
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleAdminTool.java b/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleAdminTool.java
new file mode 100644
index 0000000..a8b55db
--- /dev/null
+++ b/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleAdminTool.java
@@ -0,0 +1,92 @@
+package com.doumee.task;
+
+
+import com.doumee.config.DataSyncConfig;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.service.business.InterfaceLogService;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
+import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncVehicleFromHKServiceImpl;
+import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * 瀹氭椂浠诲姟锛堝簾寮冿級
+ * @author jiangping
+ * @date 2021-10-10 14:40:35
+ * https://www.bejson.com/othertools/cron/  cron 琛ㄨ揪寮忕敓鎴愬湴鍧�
+ */
+@Component
+@EnableScheduling
+public class ScheduleAdminTool {
+
+    @Autowired
+    private HkSyncVisitFromHKServiceImpl hkSyncVisitFromHKService;
+    @Autowired
+    private HkSyncVehicleFromHKServiceImpl hkSyncVehicleFromHKService;
+    @Autowired
+    private InterfaceLogService interfaceLogService;
+    /**
+     * 鏄惁寮�鍙戣��
+     */
+    @Autowired
+    private DataSyncConfig dataSyncConfig;
+
+    /**
+     * 姣忓ぉ澧為噺鎷夊彇杞﹁締鏁版嵁
+     * @throws Exception
+     */
+    @Scheduled(cron= "0 0 23 * * ?")
+    public void syncVehicleUpdateData() throws Exception {
+        if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
+           return;
+        }
+        hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000));
+    }
+    /**
+     * 姣忓垎閽熸媺鍙栦竴娆′粖鏃ョ殑璁垮棰勭害鏁版嵁
+     * @throws Exception
+     */
+    @Scheduled(fixedRate= 3*60*1000)
+    public void syncVistAppointData() throws Exception {
+        if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
+            return;
+        }
+        if(Constants.DEALING_FROM_HK_VISIT){
+            return ;
+        }
+        try {
+            Constants.DEALING_FROM_HK_VISIT =true;
+            hkSyncVisitFromHKService.syncVistAppointDataIccm(new Date());
+            Constants.DEALING_FROM_HK_VISIT =false;
+        }catch (Exception e){
+//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+        }finally {
+            Constants.DEALING_FROM_HK_VISIT =false;
+        }
+    }
+    /**
+     * 姣忓ぉ娓呯悊瓒呰繃涓�鍛ㄧ殑鎺ュ彛鏃ュ織鏁版嵁锛堟竻闄ゅ拰瀹夐槻骞冲彴瀵规帴鐨勬帴鍙f暟鎹級
+     * @throws Exception
+     */
+    @Scheduled(cron= "0 0 23 * * ?")
+    public void remainLastLogs() throws Exception {
+        if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
+            return;
+        }
+        interfaceLogService.remainLastLogs();
+    }
+
+
+}
diff --git a/server/dmvisit_admin/src/main/resources/application.yml b/server/dmvisit_admin/src/main/resources/application.yml
index ae8d663..65d9221 100644
--- a/server/dmvisit_admin/src/main/resources/application.yml
+++ b/server/dmvisit_admin/src/main/resources/application.yml
@@ -10,7 +10,7 @@
   #  application:
   #    name: doumeevisit
   profiles:
-    active: proHS
+    active: proYL
 
   # JSON杩斿洖閰嶇疆
   jackson:
diff --git a/server/dmvisit_admin/src/main/resources/logback-spring.xml b/server/dmvisit_admin/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..43854cc
--- /dev/null
+++ b/server/dmvisit_admin/src/main/resources/logback-spring.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
+        </layout>
+    </appender>
+<!--
+    <property name="log.path" value="/usr/local/jars/log/admin"></property>
+-->
+    <property name="log.path" value="C:\\ylscreen\\jars\\logs\\admin"></property>
+    <property name="log.fileSize" value="100MB"></property>
+    <property name="log.historyDays" value="7"></property>
+
+    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <!--鍖归厤灏辫垗鍘�-->
+            <onMatch>DENY</onMatch>
+            <onMismatch>ACCEPT</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <!--婊氬姩绛栫暐-->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+    <!-- 寮傛鍐欏叆鏃ュ織 -->
+    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
+        <!-- 涓嶄涪澶辨棩蹇�.榛樿鐨�,濡傛灉闃熷垪鐨�80%宸叉弧,鍒欎細涓㈠純TRACT銆丏EBUG銆両NFO绾у埆鐨勬棩蹇� -->
+        <discardingThreshold >0</discardingThreshold>
+        <!-- 鏇存敼榛樿鐨勯槦鍒楃殑娣卞害,璇ュ�间細褰卞搷鎬ц兘.榛樿鍊间负256 -->
+        <queueSize>512</queueSize>
+        <!-- 娣诲姞闄勫姞鐨刟ppender,鏈�澶氬彧鑳芥坊鍔犱竴涓� -->
+        <appender-ref ref ="fileInfoLog"/>
+    </appender>
+    <root level="info">
+        <appender-ref ref="consoleLog"/>
+        <appender-ref ref="fileInfoLog"/>
+        <appender-ref ref="fileErrorLog"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/server/dmvisit_screen/src/main/java/com/doumee/service/impl/ScreenServiceImpl.java b/server/dmvisit_screen/src/main/java/com/doumee/service/impl/ScreenServiceImpl.java
index 2081ede..a7870ec 100644
--- a/server/dmvisit_screen/src/main/java/com/doumee/service/impl/ScreenServiceImpl.java
+++ b/server/dmvisit_screen/src/main/java/com/doumee/service/impl/ScreenServiceImpl.java
@@ -47,25 +47,26 @@
     public   CountDataResponse countData(BaseRequest param){
         MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper.select("count(1) as applyTotalNum");
-        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(5,6,8)) as applyPassNum");
-        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (5)) as visitInNum");
-        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (6,8)) as visitOutNum");
+        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(0)) as applyPassNum");
+        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(0,4)) as visitorNum");
+        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (1,3,6)) as visitInNum");
+        queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (2,5)) as visitOutNum");
         queryWrapper.select("(select count(1) from car_event where TO_DAYS(create_date)=TO_DAYS(now()) and inout_type=0 and event_type="+ HKConstants.EventTypes.PARK_PASS_IN.getKey() +") as carInNum");
         queryWrapper.select("(select count(1) from car_event where TO_DAYS(create_date)=TO_DAYS(now()) and (inout_type !=0 ) and event_type="+ HKConstants.EventTypes.PARK_PASS_OUT.getKey() +") as carOutNum");
         queryWrapper.eq(Visits::getIsdeleted, Constants.ZERO );
         queryWrapper.apply("TO_DAYS(starttime)=TO_DAYS(now())" );
         queryWrapper.last("limit 1");
         CountDataResponse vModel =visitsMapper.selectJoinOne(CountDataResponse.class,queryWrapper);
-        vModel.setVisitorNum(vModel.getVisitInNum()+vModel.getVisitOutNum());//浠婃棩璁垮鎬绘暟
+//        vModel.setVisitorNum(vModel.getVisitInNum()+vModel.getVisitOutNum());//浠婃棩璁垮鎬绘暟
 
         MPJLambdaWrapper<CarEvent> wrapper = new MPJLambdaWrapper<>();
         wrapper.select("count(1) as memberCarNum");
         wrapper.exists("select b.id from cars b where b.code=t.plate_nos" );
-        wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now())" );
+        wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now()) and inout_type=0 and event_type="+ HKConstants.EventTypes.PARK_PASS_IN.getKey() );
         wrapper.last("limit 1");
         CountDataResponse cModel =carEventMapper.selectJoinOne(CountDataResponse.class,wrapper);
-        vModel.setMemberCarNum(vModel.getMemberCarNum());//浠婃棩鍛樺伐杞﹁締杩涘満鏁�
-        vModel.setVisitCarNum(vModel.getCarInNum() - vModel.getMemberCarNum());//浠婃棩棰勭害杞﹁締杩涘満鏁�
+        vModel.setMemberCarNum(Constants.formatIntegerNum(cModel.getMemberCarNum()));//浠婃棩鍛樺伐杞﹁締杩涘満鏁�
+        vModel.setVisitCarNum(vModel.getCarInNum() - cModel.getMemberCarNum());//浠婃棩棰勭害杞﹁締杩涘満鏁�
         vModel.setCarNum(getCarInRecordCount());
         return vModel;
     }
@@ -129,6 +130,8 @@
         List<VisitDataListResponse> list = new ArrayList<>();
         MPJLambdaWrapper<VisitEvent> wrapper = new MPJLambdaWrapper<>();
         wrapper.selectAll(VisitEvent.class) ;
+        //鍙煡璇㈤�氳璁板綍
+        wrapper.eq(VisitEvent::getEventType,HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey() );
         wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now())" );
         wrapper.last("limit 50");
         wrapper.orderByDesc(VisitEvent::getStartTime);
@@ -254,7 +257,7 @@
         MPJLambdaWrapper<Visits> wrapper = new MPJLambdaWrapper<>();
         wrapper.select("count(id) as num, starttime");
         wrapper.apply("TO_DAYS(starttime)+"+days+" >= TO_DAYS(now()) " );
-        wrapper.in(Visits::getStatus,  5,6,7);
+        wrapper.in(Visits::getStatus,  1,2,3,5,6);
         wrapper.groupBy("TO_DAYS(starttime)");
         wrapper.orderByDesc(CarEvent::getCreateDate);
         List<Visits> result =visitsMapper.selectJoinList(Visits.class,wrapper);
diff --git a/server/dmvisit_screen/src/main/resources/application.yml b/server/dmvisit_screen/src/main/resources/application.yml
index 6f450bc..fedfd64 100644
--- a/server/dmvisit_screen/src/main/resources/application.yml
+++ b/server/dmvisit_screen/src/main/resources/application.yml
@@ -10,7 +10,7 @@
   #  application:
   #    name: doumeevisit
   profiles:
-    active: devYL
+    active: proYL
 
   # JSON杩斿洖閰嶇疆
   jackson:
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 01dafc1..0d8cfe6 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
@@ -81,12 +81,14 @@
         String cardUnloss= "/api/cis/v1/card/batch/unLoss";//鎵归噺瑙f寕
         String taskPersoDetail= "/api/acps/v1/download_record/person/detail/search";//鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯�
         String appointmentRecords= "/api/visitor/v2/appointment/records";//鏌ヨ璁垮棰勭害璁板綍v2
+        String appointmentRecordsIccm= "/api/iccm/v2/appointment/records";//iccm鏌ヨ璁垮棰勭害璁板綍V2
         String visitingRecords= "/api/visitor/v2/visiting/records";//鏌ヨ璁垮鏉ヨ璁板綍v2
         String vehicleList= "/api/resource/v2/vehicle/advance/vehicleList";//鏌ヨ杞﹁締鍒楄〃v2
         String vehicleTimeRangeList= "/api/resource/v1/vehicle/timeRange";//澧為噺鑾峰彇杞﹁締鏁版嵁
         String facePictureCheck= "/api/frs/v1/face/picture/check";//浜鸿劯璇勫垎
         String acsDeviceStatus= "/api/nms/v1/online/acs_device/get";//鑾峰彇闂ㄧ璁惧鍦ㄧ嚎鐘舵��
         String tempCarInRecords= "/api/pms/v1/tempCarInRecords/page";//鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭�
+        String appointmentEventQuery= "/api/iccm/v1/event/query";//鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭�
     }
 
     /**
@@ -223,6 +225,9 @@
         PARK_PASS_OUT(771760134, "鍑哄満鏀捐浜嬩欢"  ),
         VISIT_SIGN_IN(1392513025, "璁垮鐧昏"  ),
         VISIT_SIGN_OUT(1392513026, "璁垮绛剧"  ),
+        VISIT_SIGN_ICCM_IN(541200006, "璁垮鐧昏"  ),
+        VISIT_SIGN_ICCM_OUT(541200007, "璁垮绛剧"  ),
+        VISIT_SIGN_ICCM_PASS(541200060, "璁垮閫氳"  ),
         DOOR_FACE_AUTH_FAIL(197163, "浜鸿劯璁よ瘉澶辫触"  ),
         DOOR_FACE_AUTH_SUCCESS(196893, "浜鸿劯璁よ瘉閫氳繃"  )
         ;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
index f6b12c8..fb5af07 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -621,6 +621,29 @@
 		saveInterfaceLog(body,result,path);
 		return  result;
 	}
+
+	/**
+	 *	鑾峰彇璁垮棰勭害璁板綍鍒楄〃
+	 * @param body
+	 * @return
+	 */
+	public static String appointmentRecordsIccm(String body) {
+		Map<String, String> path = getPath(HKConstants.InterfacePath.appointmentRecordsIccm);
+		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", null);// post璇锋眰application/json绫诲瀷鍙傛暟
+		saveInterfaceLog(body,result,path);
+		return  result;
+	}
+	/**
+	 *	鑾峰彇璁垮杩涘嚭鍦轰簨浠舵煡璇㈠垎椤�
+	 * @param body
+	 * @return
+	 */
+	public static String appointmentEventQuery(String body) {
+		Map<String, String> path = getPath(HKConstants.InterfacePath.appointmentEventQuery);
+		String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", null);// post璇锋眰application/json绫诲瀷鍙傛暟
+		saveInterfaceLog(body,result,path);
+		return  result;
+	}
 	/**
 	 *	鑾峰彇鍏ㄩ噺缁勭粐鍒楄〃
 	 * @param body
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentEventListRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentEventListRequest.java
new file mode 100644
index 0000000..5d5d61f
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentEventListRequest.java
@@ -0,0 +1,15 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class AppointmentEventListRequest {
+    private String  visitorId;//	String	false	璁垮id锛堣瀹汉鍛榠d锛涜瀹汉鍛樺悕绉帮紱璁惧璧勬簮code涓嶈兘鍚屾椂涓虹┖锛�
+    private String  visitorName;//	String	false	璁垮鍚嶇О
+    private String  resourceCode	;//String	false	璁惧璧勬簮code
+    private String  eventTimeBegin;//	String	true	浜嬩欢寮�濮嬫椂闂�
+    private String  eventTimeEnd	;//String	true	浜嬩欢缁撴潫鏃堕棿
+    private int    pageNo;//	integer	True	pageNo瑕佹眰澶т簬0涓嶈秴杩�2147483647
+    private int    pageSize;//	integer	True	pageSize瑕佹眰澶т簬0涓斾笉瓒呰繃1000
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDataRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDataRequest.java
new file mode 100644
index 0000000..e8517db
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDataRequest.java
@@ -0,0 +1,29 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EventVisitIccmDataRequest {
+
+        /**
+         * 棰勭害璁板綍淇℃伅
+         */
+        private EventVisitIccmInvoiceParamRequest visitorInvoices;
+        /**
+         * 琚浜轰俊鎭�
+         */
+        private EventVisitIccmTargetParamRequest targetPerson;
+        /**
+         * 琚浜轰俊鎭�
+         */
+        private EventVisitIccmValuesParamRequest paramValues;
+
+        /**
+         * 鎷滆浜轰俊鎭�
+         */
+        private List<EventVisitIccmDetailParamRequest> visitorInformationList;
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDetailParamRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDetailParamRequest.java
new file mode 100644
index 0000000..28d81e1
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmDetailParamRequest.java
@@ -0,0 +1,29 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+@Data
+public class EventVisitIccmDetailParamRequest {
+
+        private String     visitorId;// eda8994f399544aaaee6eca64ed79827, #璁垮id
+        private String      visitorName;// 灏忓垬, #璁垮鍚嶇О
+        private Integer      sex;// 1,  #璁垮鎬у埆
+        private String      phone;// 18229602833, #璁垮鎵嬫満鍙�
+        private String      unit;// , #璁垮鍗曚綅
+        private Integer      certType;// 111,  #璁垮璇佷欢绫诲瀷
+        private String      certNo;// , #璁垮璇佷欢鍙风爜
+        private String      certPicUrl;// , #璁垮璇佷欢鐓ase64
+        private String      faceUrl;// , #浜鸿劯base64
+        private String      plateNo;// , #璁垮涓汉淇℃伅閲岀殑杞︾墝
+        private String      createTime;// 2023-02-16T20;//19;//46.382+08;//00,
+        private String              updateTime;// 2023-02-16T20;//19;//46.382+08;//00,
+        private String              visitNum;// 0,
+        private String              isBlocked;// 0, #鏄惁鎷夐粦
+        private String      tempCardNo;// 123456, #缁戝畾鐨勪复鏃跺崱鍙�
+        private String      companionPerson;// 0, #鏄惁涓洪�氳浜猴細0涓嶆槸1鏄�
+        private String      cardNo;// 1676549986273, #璁垮鍗″彿
+        private String      appointmentCode;// 5998, #璁垮鐮�
+        private String      facePic;// /pic?ad00=3001led-do671a*o0d1=4686*2l4767184156*8tp===119***sb9=defce2d7736fc--*49e3=pi17fo=0-510090, #璁垮浜鸿劯鍥剧墖
+        private String      faceDeviceId;// 894c1bfa-e8a7-419a-84d1-1a1fb5f3896a #鍥剧墖璁惧id
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInfoRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInfoRequest.java
new file mode 100644
index 0000000..de7773e
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInfoRequest.java
@@ -0,0 +1,17 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+@Data
+public class EventVisitIccmInfoRequest {
+    private String  eventId;//	String	浜嬩欢鍞竴鏍囪瘑	鏄�	64
+    private String  srcIndex;//	String	浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�	鏄�	64
+    private String  srcType;//	String	浜嬩欢婧愮被鍨�	鏄�	16
+    private Integer  eventType	;//Number	浜嬩欢绫诲瀷	鏄�
+    private String  srcName;//	String	浜嬩欢婧愬悕绉�	鍚�	64
+    private Integer   status	;//Number	浜嬩欢鐘舵��	鏄�		0-鐬椂1-寮�濮�2-鍋滄3-浜嬩欢鑴夊啿4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-寮傛鍥剧墖涓婁紶
+    private Integer  timeout	;//Number	鑴夊啿瓒呮椂鏃堕棿	鏄�		鍗曚綅锛氱
+    private String  happenTime	;//String	浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂达級	鏄�	64
+    private String   srcParentIndex	;//String	浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶囩紪鍙�	鍚�	64
+    private EventVisitIccmDataRequest data;
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInvoiceParamRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInvoiceParamRequest.java
new file mode 100644
index 0000000..3b1a92e
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmInvoiceParamRequest.java
@@ -0,0 +1,45 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+@Data
+public class EventVisitIccmInvoiceParamRequest {
+
+        private String   invoicesId;// 5bc15cabf24141c6ab3da357e29e5d53,  #璁垮鍗昳d
+        private String  invoicesNo;// FK20230220090002, #璁垮鍗曞彿
+        private String  visitorId;// eda8994f399544aaaee6eca64ed79827,  #璁垮id
+        private String  visitorTypeId;// , #璁垮绫诲瀷id
+        private String  deptId;// fe3d4470fa824449b8dcdf34e833890e, #璁块棶閮ㄩ棬id
+        private String  campusId;// 39ce5586087c4d78873ff187396acf5b, #鍥尯id
+        private String  visitReason;// 7744d9691f1e45b7b4a06394280e45a3,  #璁块棶浜嬬敱id
+        private String  visitReasonRemark;// ,  #璁块棶浜嬬敱澶囨敞
+        private String  visitTargetId;// 2cb0bd1b312941569c43f64d781b7cf7,  #琚浜篿d
+        private String  companionIds;// ,  #鍚岃浜篿d,閫楀彿鍒嗗壊
+        private String  type;// 0,  #绫诲瀷锛�0锛岄绾︼紱1锛岄個绾�
+        private String  appointmentType;// 0,  #棰勭害绫诲瀷锛�0锛氭櫘閫氶绾︼紱1锛氬揩閫熼绾︼紱2;//鍏嶇櫥璁伴绾�; 3;// 绗笁鏂归绾� ; 4;//璁垮鏈洪绾�; 5;// 浼氱璁垮棰勭害; 6;// 蹇�熼個绾�; 7;//鏅�氶個绾�; 8;//绾ц仈閭�绾�; 9;//绾ц仈蹇�熼绾�; 10;//绾ц仈棰勭害
+        private String  workflowInstanceId;// f1b53b54414641d58cd7cd332105d723, #娴佺▼id
+        private String  approveRemark;// , #娴佺▼瀹℃壒澶囨敞
+        private String  ifInfoAbnormal;// 0,
+        private String  beginTime;// 2023-02-20T10;//00;//00.000+08;//00,  #璁块棶寮�濮嬫椂闂�
+        private String  finishTime;// 2023-02-20T23;//30;//00.000+08;//00, #璁块棶缁撴潫鏃堕棿
+        private String  invoicesStatus;// 3, #璁垮鍗曠姸鎬�(0;//寰呭鎵�,1;//寰呰闂�,2;//宸查┏鍥�,3;//宸蹭綔搴�,4;//宸插彇娑�,5;//宸插畬鎴�)
+        private String  workflowInitiatorId;// eda8994f399544aaaee6eca64ed79827, #娴佺▼鍙戣捣浜篿d
+        private String  workflowInitiatorType;// 0, #娴佺▼鍙戣捣浜虹被鍨�(0;//璁垮,1;//鍛樺伐)
+        private String  operator;// eda8994f399544aaaee6eca64ed79827, #鎿嶄綔浜�
+        private String  operatorType;// 0, #鎿嶄綔浜虹被鍨�(0;//璁垮,1;//鍛樺伐)
+        private String  extendJson;// , #鎵╁睍瀛楁
+        private String  authIssueStatus;// 0, #鏉冮檺涓嬪彂鐘舵��(0;//鏈笅鍙�,1;//涓嬪彂鎴愬姛,2;//涓嬪彂澶辫触,3;//鏉冮檺娓呴櫎,4;//鏉冮檺鍥炴敹)
+        private String  createTime;// 2023-02-20T09;//43;//39.479+08;//00, #鍒涘缓鏃堕棿
+        private String  updateTime;// 2023-02-20T19;//42;//32.640+08;//00,
+        private String          campusName;// 鍗曠嫭鍋滆溅鍦烘祴璇�, #鍥尯鍚嶇О
+        private String  deptName;// 榛樿閮ㄩ棬, #閮ㄩ棬鍚嶇О
+        private String  visitorTypeName;// 鏅�氳瀹�,  #璁垮绫诲瀷
+        private String  sceneNames;// 娴嬭瘯7,  #鏉冮檺鍦烘櫙鍚嶇О锛屽涓�楀彿鍒嗛殧
+        private String  visitReasonName;// 鍟嗗姟娲借皥, #璁块棶浜嬬敱鍚嶇О
+        private String regionId;//eda8994f399544aaaee6eca64ed79827,#鍖哄煙id锛�2.2鏀寔锛�2.3搴熷純璇ュ瓧娈�
+        private String regionName;//婊ㄦ睙,#鍖哄煙鍚嶇О锛�2.2鏀寔锛�2.3搴熷純璇ュ瓧娈�
+        private String campusRegionIds;//pda8994f399544aaaee6eca64ed79828,#鍖哄煙id锛�2.3鏀寔
+        private String campusRegionNames;//娴峰悍涓夋湡, #鍖哄煙鍚嶇О锛�2.3鏀寔
+        private String isRepast;//1 #璁垮灏遍,0;//鍚�,1;//鏄�
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmParamRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmParamRequest.java
new file mode 100644
index 0000000..64c7a96
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmParamRequest.java
@@ -0,0 +1,17 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EventVisitIccmParamRequest {
+
+
+    private String   sendTime;//	P	String	浜嬩欢浠庢帴鏀惰�咃紙绋嬪簭澶勭悊鍚庯級鍙戝嚭鐨勬椂闂�	鏄�	32	浜嬩欢鍙戦�佹椂闂�
+    private String    ability;//	P	String	浜嬩欢绫诲埆	鏄�	64	鏍囪瘑鍋滆溅鍦轰簨浠�
+    private String[] uids;//	String[]	鐢ㄦ埛id	鍚�	涓嶉檺
+    private String[] clients	;//String[]	缁勪欢鏍囪瘑	鍚�	涓嶉檺
+    private List<EventVisitIccmInfoRequest> events;//	P	Events[]	浜嬩欢淇℃伅	鏄�	涓嶉檺
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmRequest.java
new file mode 100644
index 0000000..cfa1802
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmRequest.java
@@ -0,0 +1,13 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+@Data
+public class EventVisitIccmRequest {
+
+//    private String  parkIndexCodes	;//	string	False	鍋滆溅搴撳敮涓�鏍囪瘑闆嗗悎  澶氫釜鍊间娇鐢ㄨ嫳鏂囬�楀彿鍒嗛殧锛屼笉瓒呰繃1000涓�
+
+    private String   method	;//	String	鏂规硶鍚嶏紝鐢ㄤ簬鏍囪瘑鎶ユ枃鐢ㄩ��	鏄�	16	浜嬩欢鍥哄畾OnEventNotify
+    private EventVisitIccmParamRequest params	;//	Params	浜嬩欢鍙傛暟淇℃伅	鏄�	涓嶉檺	鍏蜂綋鍙傛暟淇℃伅
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmTargetParamRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmTargetParamRequest.java
new file mode 100644
index 0000000..733adcb
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmTargetParamRequest.java
@@ -0,0 +1,23 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+@Data
+public class EventVisitIccmTargetParamRequest {
+
+        private String   personId;// 2cb0bd1b312941569c43f64d781b7cf7, #琚浜篿d
+        private String  personNumber;// 10001, #琚浜哄伐鍙�
+        private String  name;// Lhk绠$悊鍛�, #琚浜虹紪鍙�
+        private String  sex;// 1, #琚浜烘�у埆
+        private String  jobNo;// 10001, #琚浜哄伐鍙�
+        private String  pinyin;// lhkguanliyuan, #琚浜烘嫾闊�
+        private String  mobile;// 17700001111, #琚浜烘墜鏈哄彿
+        private String  orgId;// root000000, #琚浜虹粍缁噄d
+        private String  certType;// 111, #琚浜鸿瘉浠剁被鍨�
+        private String  certificateNo;// 330282202302160001, #琚浜鸿瘉浠跺彿鐮�
+        private String  orgPathName;// 榛樿缁勭粐, #琚浜虹粍缁�
+        private String  userName;// Lhk绠$悊鍛�, #琚浜虹敤鎴峰悕
+        private String  createTime;// 2023-02-16T10;//10;//51.683+08;//00,
+        private String  updateTime;// 2023-02-20T19;//40;//54.138+08;//00
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmValuesParamRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmValuesParamRequest.java
new file mode 100644
index 0000000..9535b0b
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitIccmValuesParamRequest.java
@@ -0,0 +1,41 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+@Data
+public class EventVisitIccmValuesParamRequest {
+
+        private String      type;// 1, #浜嬩欢婧愮被鍨嬶細1璁垮鏈�2淇濆畨浜哄伐3闂ㄧ4鍋滆溅鍦哄嚭鍏ュ彛5api6琚浜�
+        private String   eventType;// 541200007, #541200006[绛惧埌娑堟伅閫氱煡],541200007[绛剧娑堟伅閫氱煡],541200009[璁垮婊炵暀]锛�541200060[閫氳浜嬩欢]
+        private String   sourceName;// 1鍙烽棬绂�, #闂ㄧ鍚嶇О
+        private String   eventId;// demoData, #浜嬩欢id
+        private String     eventTypeName;// demoData, #浜嬩欢绫诲瀷鍚嶇О
+        private String                     happenTime;// 23/6/2 0002 11;//36, #鍙戠敓鏃堕棿
+        private String   srcParentIndex;// demoData, #鐖剁被璧勬簮 indexcode
+        private String   srcIndex;// demoData, #瀛愮被indexcode
+        private String   srcName;// demoData, #璁惧鍚嶇О
+        private String   srcType;// demoData, #璧勬簮绫诲瀷
+        private String   extEventCardNo;// demoData, #鍗″彿
+        private String   extEventInOut;// demoData, #闂ㄧ鐐瑰敮涓�鎺ュ叆缂栫爜
+        private String   extEventPictureURL;// demoData, #鍥剧墖鐨剈rl
+        private String    svrIndexCode;// demoData, #鍥剧墖鏈嶅姟鍣ㄥ敮涓�缂栫爜
+        private String   extEventReaderKind;// demoData,  #璇诲崱鍣ㄧ被鍒�
+        private String   extEventReaderID;// demoData, #璇诲崱鍣╥d
+        private String   userType;// demoData, #浜哄憳绫诲瀷锛�0鏈煡锛�1鏅�氾紝2鏉ュ锛�3榛戝悕鍗曪紝4绠$悊鍛�
+        private String   visitorNames;// demoData, #璁垮濮撳悕,澶氫釜閫楀彿鎷兼帴
+        private String   phones;// demoData, #鎵嬫満鍙�,澶氫釜閫楀彿鎷兼帴
+        private String   certificateNos;// demoData, #韬唤璇�,澶氫釜閫楀彿鎷兼帴
+        private String   certTypes;// 333, #璇佷欢绫诲瀷,澶氫釜閫楀彿鎷兼帴
+        private String   invoicesIds;// 5a9e731d6b9043feb665282786dd8914, #璁垮鍗昳d,澶氫釜閫楀彿鎷兼帴
+        private String   defineEventType;// 9, #浜嬩欢绫诲瀷
+        private String   plateNos;// demoData, #杞︾墝鍙风爜,澶氫釜閫楀彿鎷兼帴
+        private String   parkName;// demoData,  #鍋滆溅搴撳悕绉�
+        private String   parkIndex;// demoData, #鍋滆溅搴撶紪鍙�
+        private String   gateName;// demoData,#鍑哄叆鍙e悕绉�
+        private String   gateIndex;// demoData,  #鍑哄叆鍙g紪鍙�
+        private String   inOrOut;// 1,#杩涘嚭绫诲瀷锛�1杩涘叆2鍑哄幓
+        private String   accessType;// 1,  #浜嬩欢绫诲瀷锛�1闂ㄧ浜嬩欢2杞﹁締浜嬩欢
+        private String   regionName;// demoData#鍖哄煙鍚嶇О,
+        private String    typeId;//1 #鍓嶇璺宠浆url鐨則ypeId
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentEventInfoResponse.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentEventInfoResponse.java
new file mode 100644
index 0000000..3185d0b
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentEventInfoResponse.java
@@ -0,0 +1,28 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class AppointmentEventInfoResponse {
+
+
+    private String visitorName;//	String	false	璁垮濮撳悕
+    private String  visitorSex	;//String	false	鎬у埆,1鐢�,2濂�
+    private String      cardNum;//	String	false	鍗″彿
+    private String     cardType;//	String	false	鍗$被鍨�,0-韬唤璇佸彿 2-IC鍗″彿
+    private String     deviceIndexCode;//	String	false	璁惧缂栫爜
+    private String       deviceType;//	String	false	璁惧绫诲瀷
+    private String       deviceDesc;//	String	false	璁惧鎻忚堪
+    private String       eventName;//	String	false	浜嬩欢鍚嶇О
+    private String     eventId	;//String	false	浜嬩欢id
+    private String     phoneNum	;//String	false	鎵嬫満鍙�
+    private String    carNumber	;//String	false	杞︾墝鍙�
+    private String     identityId;//	String	false	璇佷欢绫诲瀷
+    private String     identityNum	;//String	false	璇佷欢鍙风爜
+    private String     visitorPhotoUri;//	String	false	璁垮澶村儚
+    private String     identityPhotoUri;//	String	false	璇佷欢鐓х墖
+    private String     eventTime;//	String	false	浜嬩欢鏃堕棿
+    private String      visitorId;//	String	false	璁垮id
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentIccmInfoResponse.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentIccmInfoResponse.java
new file mode 100644
index 0000000..e88eac3
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentIccmInfoResponse.java
@@ -0,0 +1,30 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppointmentIccmInfoResponse {
+
+
+    private String     campusId;//	String	false	鍥尯id
+    private String campusName;//	String	false	鍥尯鍚嶇О
+    private String deptId	;//String	false	閮ㄩ棬id
+    private String deptName;//	String	false	閮ㄩ棬鍚嶇О
+    private String visitorTypeId;//	String	false	璁垮绫诲瀷id
+    private String visitorTypeName;//	String	false	璁垮绫诲瀷
+    private String appointRecordId;//	String	false	璁垮棰勭害璁板綍id
+    private String orderId;//	String	false	璁垮鍗曞彿
+    private String visitPurpose;//String	false	鏉ヨ浜嬬敱id
+    private String visitPurposeName;//	String	false	鏉ヨ浜嬬敱
+    private String visitEndTime;//	String	false	璁块棶缁撴潫鏃堕棿
+    private String receptionistId	;//String	false	琚浜篿d
+    private String receptionistName;//	String	false	琚浜哄鍚�
+    private String  visitStartTime	;//String	false	璁块棶寮�濮嬫椂闂�
+    private String  oneOrPeople;//	String	false	閫氳鐮佺瓥鐣� 0锛氫竴浜轰竴鐮� 1锛氬浜轰竴鐮�
+
+    private List<AppointmentResInfoResponse> designatedResources;//	object	False	鏉冮檺涓嬪彂鎸囧畾鐨勮祫婧愮偣闆嗗悎
+    private String[] privilegeGroupNames;//	string[]	False	鏉冮檺缁勫悕绉伴泦鍚�
+    private List<AppointmentVisitorInfoResponse>  visitorList;// Array	false	璁垮鍒楄〃
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentVisitorInfoResponse.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentVisitorInfoResponse.java
new file mode 100644
index 0000000..3650ceb
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentVisitorInfoResponse.java
@@ -0,0 +1,34 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppointmentVisitorInfoResponse {
+
+
+    private String  appointRecordId		;//string	False	棰勭害璁板綍ID锛屽彲浣滀负淇敼棰勭害鐨勪緷鎹�
+    private Boolean  companion;//	Boolean	false	鏄惁鍚岃浜�
+    private String visitorId	;//String	false	璁垮id
+    private String phoneNo	;//String	false	璁垮鎵嬫満鍙�
+    private String visitorName;//	String	false	璁垮濮撳悕
+    private Integer gender;//	Number	false	鎬у埆(1:鐢�,2:濂�)
+    private String svrIndexCode;//	String	false	鍥剧墖瀛樺偍鏈嶅姟鐨勫敮涓�鏍囪瘑
+    private String picUri;//	String	false	璁垮澶村儚,鍥剧墖鐨勭浉瀵筓RL
+    private String identityUri;//	String	false	璇佷欢鐓�,鍥剧墖鐨勭浉瀵筓RL
+    private String identitySvrCode;//	String	false	璇佷欢鐓у搴斿浘鐗囨湇鍔″櫒serviceNodes
+    private String plateNo;//	String	false	璁垮杞︾墝鍙�
+    private String certificateNo;//	String	false	璇佷欢鍙�
+    private String visitorWorkUnit	;//String	false	鏉ヨ鍗曚綅
+    private Integer visitorStatus	;//Number	false	璁垮鐘舵��(0:鏈鍒�,1:宸茬鍒�,2:宸茬閫�,3:婊炵暀,4:鏈闂�,5:鑷姩绛剧,6:鏈閫�)
+    private String certificateType	;//;//Number	false	璇佷欢绫诲瀷
+    private String isCompanion;//	Boolean	false	鏄惁鍚岃浜�
+    private String appointmentCode	;//String	false	璁垮鐮�
+    @JsonProperty(value = "QRCode")
+    @JSONField(name = "QRCode")
+    private String  qrCode	;//String	false	鍔ㄦ�佷簩缁寸爜鍐呭
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
index 1a63ab1..654f283 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -802,6 +802,42 @@
         return  null;
     }
     /**
+     *娴峰悍璁垮棰勭害璁板綍鏌ヨICCM鐗堟湰锛堝垎椤碉級
+     * @return
+     */
+    public  static  BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>>   appointmentRecordsIccm(AppointmentListRequest param){
+        log.info("銆愭捣搴疯瀹㈤绾﹁褰曟煡璇CCM鐗堟湰銆�================寮�濮�===="+JSONObject.toJSONString(param));
+        try {
+            String res = HKTools.appointmentRecordsIccm(JSONObject.toJSONString(param));
+            TypeReference typeReference =
+                    new TypeReference<BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>>>(){};
+            BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
+            logResult(result,"娴峰悍璁垮棰勭害璁板綍鏌ヨICCM鐗堟湰");
+            return  result;
+        }catch (Exception e){
+            log.error("銆愭捣搴疯瀹㈤绾﹁褰曟煡璇CCM鐗堟湰銆�================澶辫触====锛歕n"+ e.getMessage());
+        }
+        return  null;
+    }
+    /**
+     *娴峰悍璁垮浜嬩欢浠介鏌ヨICCM鐗堟湰锛堝垎椤碉級
+     * @return
+     */
+    public  static  BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>>   appointmentEventQuery(AppointmentEventListRequest param){
+        log.info("銆愭捣搴疯瀹簨浠朵唤棰濇煡璇CCM鐗堟湰銆�================寮�濮�===="+JSONObject.toJSONString(param));
+        try {
+            String res = HKTools.appointmentEventQuery(JSONObject.toJSONString(param));
+            TypeReference typeReference =
+                    new TypeReference<BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>>>(){};
+            BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
+            logResult(result,"娴峰悍璁垮浜嬩欢浠介鏌ヨICCM鐗堟湰");
+            return  result;
+        }catch (Exception e){
+            log.error("銆愭捣搴疯瀹簨浠朵唤棰濇煡璇CCM鐗堟湰銆�================澶辫触====锛歕n"+ e.getMessage());
+        }
+        return  null;
+    }
+    /**
      *鏌ヨ璁垮鏉ヨ璁板綍锛堝凡鐧昏锛夛紙鍒嗛〉锛�
      * @return
      */
@@ -950,16 +986,16 @@
      * @return
      */
     public  static  BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>>   vehicleTimeRangeList(TimeRangeListRequest param){
-        log.info("銆愭捣搴峰閲忎汉鍛樻煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+        log.info("銆愭捣搴峰閲忚溅杈嗘煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
         try {
             String res = HKTools.vehicleTimeRangeList(JSONObject.toJSONString(param));
             TypeReference typeReference =
                     new TypeReference< BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> >(){};
             BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>>   result = JSONObject.parseObject(res, typeReference.getType());
-            logResult(result,"娴峰悍澧為噺浜哄憳鏌ヨ");
+            logResult(result,"娴峰悍澧為噺杞﹁締鏌ヨ");
             return  result;
         }catch (Exception e){
-            log.error("銆愭捣搴峰閲忎汉鍛樻煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+            log.error("銆愭捣搴峰閲忚溅杈嗘煡璇€��================澶辫触====锛歕n"+ e.getMessage());
         }
         return  null;
     }
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 2114b39..f265a0d 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
@@ -228,6 +228,16 @@
          int signout =  8;
          int invalid =9;
     }
+    public interface VisitIccmStatus{
+        //璁垮鐘舵��(0:鏈鍒�,1:宸茬鍒�,2:宸茬閫�,3:婊炵暀,4:鏈闂�,5:鑷姩绛剧,6:鏈閫�)
+         int waitSign = 0;
+         int signin= 1;
+         int signout = 2;
+         int noleave =3;
+         int novisit =4;
+         int autoOut =5;
+         int noSignout =6;
+    }
     public interface EmpowerStatus{
         //涓�鍗¢�氭巿鏉冧笅鍙戠姸鎬� 0寰呬笅鍙� 1宸蹭笅鍙� 2涓嬪彂鎴愬姛   3宸插彇娑� 4涓嬪彂澶辫触 5浠诲姟涓嬭浇宸茬粨鏉�
          int wait = 0;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java
index 01d40d7..adbe13a 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java
@@ -96,4 +96,6 @@
     long count(InterfaceLog interfaceLog);
 
     void clearThreeMonthLog();
+
+    void remainLastLogs();
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
index 7af1926..d41ca7f 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -6,6 +6,8 @@
 import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
 import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
 import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmDataRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest;
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
 import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
 import com.doumee.dao.business.model.ParkBook;
@@ -83,4 +85,10 @@
     void syncMemberFailData();
 
     void syncMemberDelData();
+
+    void syncVistAppointDataIccm(Date date);
+
+    void syncVisitRecords(Date createDate);
+
+    String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
index 9f11835..45091d7 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.InterfaceLogMapper;
 import com.doumee.dao.business.model.InterfaceLog;
@@ -13,6 +14,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.yaml.snakeyaml.scanner.Constant;
 
 import java.util.List;
 
@@ -161,4 +163,15 @@
                   .apply("to_days(create_date)+15 < to_days(now())")
                   .like(InterfaceLog::getUrl,"/artemis/api/"));
     }
+    @Override
+    public    void remainLastLogs(){
+          InterfaceLog log = interfaceLogMapper.selectOne(new QueryWrapper<InterfaceLog>()
+                  .select("max(id) as id").last("limit 1"));
+          //鍙繚鐣欒繘10w鏉℃暟鎹�
+          if(log!=null) {
+              interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda()
+                      .lt(InterfaceLog::getId, Constants.formatIntegerNum(log.getId()) - 100000));
+          }
+
+    }
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
index 9cdf479..0f9a0ab 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -1160,7 +1160,7 @@
         }catch (BusinessException e){
             throw e;
         }finally {
-            saveInterfaceLog(param,"/visitBiz/resource/approveApply",null,Constants.ZERO);
+//            saveInterfaceLog(param,"/visitBiz/resource/approveApply",null,Constants.ZERO);
         }
     }
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
index 9ed642b..17aa040 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -7,6 +7,8 @@
 import com.doumee.core.haikang.model.param.request.*;
 import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
 import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmDataRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest;
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
 import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
 import com.doumee.core.haikang.model.param.respose.TaskAdditionResponse;
@@ -76,6 +78,10 @@
     public String   dealVisitEvent(EventVisitRequest param, HttpServletResponse response){
         return  null;
     }
+    @Override
+    public String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){
+        return  null;
+    }
 
     @Override
     public String   dealParkEvent(EventParkRequest param, HttpServletResponse response){
@@ -96,6 +102,9 @@
     @Override
     public  void syncVistAppointData(Date date){
     }
+    @Override
+    public     void syncVistAppointDataIccm(Date date){
+    }
     public  void syncVehicleData(){
     }
     @Override
@@ -112,6 +121,9 @@
     public  void  syncVisitData() {
     }
     @Override
+    public  void syncVisitRecords(Date createDate){
+    }
+    @Override
     public void getOutTimeVisitRecord(){
     }
     @Override
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
index c10c289..8d25f41 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
@@ -18,7 +18,9 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.CarEventMapper;
+import com.doumee.dao.business.CarsMapper;
 import com.doumee.dao.business.ParksMapper;
+import com.doumee.dao.business.VisitsMapper;
 import com.doumee.dao.business.join.ParkBookJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -48,6 +50,10 @@
     private ParkBookJoinMapper parkBookMapper;
     @Autowired
     private CarEventMapper carEventMapper;
+    @Autowired
+    private CarsMapper carsMapper;
+    @Autowired
+    private VisitsMapper visitsMapper;
     @Override
     public  void syncParkBookData() {
         if(Constants.DEALING_HK_PARKBOOK){
@@ -405,6 +411,25 @@
             c.setParkIndex(model.getParkSyscode());
             c.setParkName(model.getParkName());
             c.setEventId(model.getCrossRecordSyscode());
+            if(StringUtils.isNotBlank(model.getPlateNo())){
+              Cars car =  carsMapper.selectOne(new QueryWrapper<Cars>().lambda()
+                        .eq(Cars::getIsdeleted,Constants.ZERO)
+                        .eq(Cars::getCode,model.getPlateNo())
+                        .last("limit 1" ));
+              if(car!=null){
+                  //濡傛灉鏄唴閮ㄤ汉鍛�
+                  c.setMemberId(car.getMemberId());
+              }
+
+                Visits visits =  visitsMapper.selectOne(new QueryWrapper<Visits>().lambda()
+                        .eq(Visits::getIsdeleted,Constants.ZERO)
+                        .eq(Visits::getCarNos,model.getPlateNo())
+                        .last("limit 1" ));
+                if(visits!=null){
+                    //濡傛灉鏄瀹�
+                    c.setMemberId(visits.getMemberId());
+                }
+            }
             c.setGateIndex(model.getEntranceSyscode());
             c.setGateName(model.getEntranceName());
             c.setIsdeleted(Constants.ZERO);
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 128d9b6..48571be 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
@@ -11,9 +11,7 @@
 import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest;
 import com.doumee.core.haikang.model.param.request.event.parks.EventParkInfoRequest;
 import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
-import com.doumee.core.haikang.model.param.request.event.visit.EventVisitDataRequest;
-import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest;
-import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.*;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.DateUtil;
@@ -263,6 +261,58 @@
      * @return
      */
     @Override
+    public String    dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){
+        log.info("銆愭捣搴疯瀹簨浠舵帹閫併��==========寮�濮�=======锛歕n"+JSONObject.toJSONString(param));
+        String result = null;
+        try {
+            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){
+                return null;
+            }
+            //闂ㄧ浜嬩欢闆嗗悎
+            List<EventVisitIccmInfoRequest> events  = param.getParams().getEvents();
+            List<VisitEvent> list = new ArrayList<>();
+            List<Integer> delRetentionLis = new ArrayList<>();
+            List<Retention> retentionList = new ArrayList<>();
+            for(EventVisitIccmInfoRequest request : events){
+                if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){
+                    continue;
+                }
+                if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){
+                    continue;
+                }
+                //娴峰悍璁垮璁板綍缂栫爜
+                dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,list);
+            }
+            if(list.size()>0){
+                //鎻掑叆闂ㄧ璁板綍
+                visitEventMapper.insertBatchSomeColumn(list);
+            }
+            if(delRetentionLis.size()>0){
+                //鍏堝垹闄ゅ師鏈夌殑鍦ㄥ満浜哄憳(鏅�氳瀹級
+                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
+                        .eq(Retention::getType,Constants.memberType.visitor)
+                        .in(Retention::getMemberId,delRetentionLis));
+            }
+            if(retentionList.size()>0){
+                //鍐嶆彃鍏ユ渶鏂扮殑鍦ㄥ巶浜哄憳
+                retentionMapper.insertBatchSomeColumn(retentionList);
+            }
+            log.error("銆愭捣搴疯瀹簨浠舵帹閫併��========鎴愬姛=======");
+        }catch (Exception e){
+
+            log.error("銆愭捣搴疯瀹簨浠舵帹閫併��========澶辫触=======锛歕n"+e.getMessage());
+        }
+        saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true);
+        return  null;
+
+    }
+    /**
+     * 娴峰悍璁垮浜嬩欢鎺ㄩ��
+     * @param param
+     * @param response
+     * @return
+     */
+    @Override
     public String   dealVisitEvent(EventVisitRequest param, HttpServletResponse response){
         log.info("銆愭捣搴疯瀹簨浠舵帹閫併��==========寮�濮�=======锛歕n"+JSONObject.toJSONString(param));
         String result = null;
@@ -314,6 +364,143 @@
     /**
      *  鏍规嵁璁垮鎺ㄩ�佽瀹㈣褰曠紪鐮侊紝澶勭悊璁垮璁板綍銆佸湪鍦轰汉鍛樼瓑淇℃伅
      */
+    private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,List<VisitEvent> list) {
+        EventVisitIccmInvoiceParamRequest data =  request.getData().getVisitorInvoices();
+        Integer memberId = null;
+        if(request.getData().getTargetPerson().getPersonId()!=null){
+            Member m = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getHkId,request.getData().getTargetPerson().getPersonId())
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .last( "limit 1"));
+            if(m!=null){
+                memberId = m.getId();
+            }
+        }
+        for(EventVisitIccmDetailParamRequest model : request.getData().getVisitorInformationList()){
+
+            Visits updateVistis = new Visits();
+            MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
+            queryWrapper.selectAll(Visits.class);
+            queryWrapper.selectAs(Member::getType,Visits::getMemberType);
+            queryWrapper.eq(Visits::getHkId,model.getVisitorId() );
+            queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId );
+            queryWrapper.last("limit 1");
+            Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper);
+            if(visits !=null) {
+                //濡傛灉浜哄憳淇℃伅瀛樺湪锛屽垯鍒犻櫎涔嬪墠鐨勬墍鏈夎繘鍦烘暟鎹紙鏃犺姝ゆ鎺ㄩ�佹槸杩涘巶杩樻槸鍑哄満鎺ㄩ�佷簨浠讹級
+                delRetentionLis.add(visits.getMemberId());
+                if (dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk) {
+                    //濡傛灉鏄紛鍒╁ぇ灞忛」鐩紝涓嶅仛澶勭悊
+                    return;
+                }
+                updateVistis.setId(visits.getId());
+                if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) {
+                    //濡傛灉鏄瀹㈢櫥璁帮紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
+                    retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()));
+                    //鏉ヨ鏃堕棿
+                    updateVistis.setStatus(Constants.VisitIccmStatus.signin);
+                    updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime()));
+                    updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime()));
+                    updateVistis.setEditDate(new Date());
+                    //鏇存柊璁垮鏉ヨ鎴栬�呯绂绘椂闂翠俊鎭�
+                    visitsMapper.updateById(updateVistis);
+                    //鏇存柊鏈�鏂版潵璁挎椂闂�
+                    Member member = new Member();
+                    member.setLastVisitDate(updateVistis.getInDate());
+                    member.setId(visits.getMemberId());
+                    memberMapper.updateById(member);
+                } else  if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey())  {
+                    //濡傛灉鏄瀹㈢绂讳簨浠�
+                    updateVistis.setStatus(Constants.VisitIccmStatus.signout);
+                    updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime()));
+                    updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime()));
+                    updateVistis.setOutType(Constants.ZERO);
+                    updateVistis.setOutInfo("璁垮姝e父绛剧");
+                    updateVistis.setEditDate(new Date());
+                    //鏇存柊璁垮鏉ヨ鎴栬�呯绂绘椂闂翠俊鎭�
+                    visitsMapper.updateById(updateVistis);
+                }else{
+                    updateVistis.setStatus(visits.getStatus());
+                }
+            }else{
+                //鏂板璁垮鐧昏鏁版嵁
+               addNewVisitInfo(request,model,updateVistis.getStatus());
+            }
+            //灏佽闂ㄧ浜嬩欢淇℃伅琛ㄥ璞�
+            list.add(getVisitEventModelByRequest(request,model));
+        }
+    }
+
+    private void addNewVisitInfo(EventVisitIccmInfoRequest request, EventVisitIccmDetailParamRequest model,Integer status) {
+        try{
+            Visits c = new Visits();
+            c.setHkId(model.getVisitorId());
+            c.setCode(model.getAppointmentCode());
+            c.setName(model.getVisitorName());
+            c.setHkStatus(Constants.ONE);
+            c.setHkDate(new Date());
+            c.setIsdeleted(Constants.ZERO);
+            c.setCreateDate(c.getHkDate());
+            c.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, model.getCertNo()));
+            c.setIdcardDecode(Constants.getTuominStr(model.getCertNo()));
+            c.setIdcardType( model.getCertType());
+            c.setStarttime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getBeginTime()));
+            c.setEndtime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getFinishTime()));
+            c.setReason(request.getData().getVisitorInvoices().getVisitReason());
+            c.setStatus(status);
+            c.setType(Constants.ONE);
+            if(StringUtils.isNotBlank(request.getData().getTargetPerson().getPersonId())){
+                //琚闂汉
+                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId
+                        ,request.getData().getTargetPerson().getPersonId()).last("limit 1"));
+                c.setReceptMemberId(member!=null?member.getId():null);
+            }
+            c.setCompanyName(model.getUnit());
+            c.setPhone(model.getPhone());
+            c.setCarNos(model.getPlateNo());
+            if(StringUtils.isNotBlank(model.getCertNo())){
+                //琚闂汉
+                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                        .eq(Member::getType,Constants.ONE)
+                        .eq(Member::getIdcardNo , c.getIdcardNo())
+                        .last("limit 1"));
+                if(member == null){
+                    member = new Member();
+                    member.setName(model.getVisitorName());
+                    member.setPhone(model.getPhone());
+                    member.setSex(model.getSex());
+                    member.setIsdeleted(Constants.ZERO);
+                    member.setType(Constants.ONE);
+                    member.setIdcardNo(c.getIdcardNo());
+                    member.setIdcardDecode(c.getIdcardDecode());
+                    member.setVisitCompanyName(model.getUnit());
+                    member.setCreateDate(new Date());
+                    if(StringUtils.isNotBlank(model.getFacePic())){
+                        member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic());
+                        member.setFaceServerIndexCode(model.getFaceDeviceId());
+                    }
+                    memberMapper.insert(member);
+                }else{
+                    member.setIsdeleted(Constants.ZERO);
+                    member.setEditDate(new Date());
+                    member.setName(model.getVisitorName());
+                    member.setPhone(model.getPhone());
+                    member.setSex(model.getSex());
+                    member.setVisitCompanyName(model.getUnit());
+                    if(StringUtils.isNotBlank(model.getFacePic())){
+                        member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic());
+                        member.setFaceServerIndexCode(model.getFaceDeviceId());
+                    }
+                    memberMapper.updateById(member);
+                }
+                c.setMemberId(member.getId());
+                visitsMapper.insert(c);
+            }
+        }catch (Exception e){
+            log.error("====================璁垮鎺ㄩ�佹柊澧炶瀹㈣褰曞け璐�:"+e.getMessage());
+        }
+    }
+
     private void dealVisitDataByRequst(EventVisitInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) {
         EventVisitDataRequest model = request.getData();
         MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
@@ -334,7 +521,7 @@
             updateVistis.setId(visits.getId());
             if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){
                 //濡傛灉鏄瀹㈢櫥璁帮紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
-                retentionList.add(getRetentionModelByVisitRequest(visits,request));
+                retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()));
                 //鏉ヨ鏃堕棿
                 updateVistis.setStatus(Constants.VisitStatus.signin);
                 updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
@@ -358,6 +545,49 @@
         }
     }
 
+    private VisitEvent getVisitEventModelByRequest(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) {
+        if(request.getData().getTargetPerson() ==null){
+            request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest());
+        }
+        VisitEvent event = new VisitEvent();
+        event.setIsdeleted(Constants.ZERO);
+        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
+        event.setVisitorWorkUint(detail.getUnit());
+        event.setVisitorId(detail.getVisitorId());
+        event.setVisitorCode(detail.getAppointmentCode());
+        event.setTimeout(request.getTimeout());
+        event.setSvrIndexCode(request.getSrcIndex());
+        event.setHappenTime(request.getHappenTime());
+        event.setStatus(request.getStatus());
+        event.setEndTime(request.getData().getVisitorInvoices().getFinishTime());
+        event.setStartTime(request.getData().getVisitorInvoices().getBeginTime());
+        event.setSrcType(request.getSrcType());
+        event.setSrcParentIndex(request.getSrcParentIndex());
+        event.setSrcName(request.getSrcName());
+        event.setSrcIndex(request.getSrcIndex());
+        event.setSex(detail.getSex());
+        event.setPurpose(request.getData().getVisitorInvoices().getVisitReason());
+        event.setPhone(detail.getPhone());
+        event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId());
+        event.setBeVisitedPersonName(request.getData().getTargetPerson().getName());
+        event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName());
+        event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName());
+        event.setPhotoUrl(getHkImgUrl(detail.getFacePic()));
+        event.setPersonName(detail.getVisitorName());
+        event.setCarNo(detail.getPlateNo());
+
+        event.setIdType(detail.getCertType());
+        String idnum = detail.getCertNo();
+        if(StringUtils.isNotBlank(idnum)){
+            //韬唤璇佸彿瀛樺偍瀵嗘枃
+            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//韬唤璇佸彿鍔犲瘑
+            //鑴辨晱鎵嬫満鍙锋樉绀簄
+            event.setIdcardDecode(Constants.getTuominStr(idnum));
+        }
+        event.setEventType(request.getEventType());
+        event.setEventId(request.getEventId());
+        return event;
+    }
     private VisitEvent getVisitEventModelByRequest(EventVisitInfoRequest request) {
         VisitEvent event = new VisitEvent();
         event.setIsdeleted(Constants.ZERO);
@@ -408,10 +638,10 @@
         return event;
     }
 
-    private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) {
+    private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) {
         Retention retention = new Retention();
         retention.setIsdeleted(Constants.ZERO);
-        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
+        retention.setCreateDate(DateUtil.getISO8601DateByStr(happentTime));
         retention.setClasses(visits.getClasses());
         retention.setCode(visits.getCode());
         retention.setIdcardNo(visits.getIdcardNo());
@@ -421,7 +651,7 @@
         retention.setType(visits.getMemberType());
         retention.setCompanyId(visits.getCompanyId());
         retention.setCompanyName(visits.getCompanyName());
-        retention.setEventCode(request.getSrcType()+"");
+        retention.setEventCode(srcType);
         retention.setEventDate(retention.getCreateDate());
         retention.setFaceImg(visits.getFaceImg());
         retention.setImgurl(visits.getImgurl());
@@ -473,7 +703,7 @@
                 //鍐嶆彃鍏ユ渶鏂扮殑鍦ㄥ巶浜哄憳
                 retentionMapper.insertBatchSomeColumn(retentionList);
             }
-            log.error("銆愭捣搴峰仠杞﹀満浜嬩欢鎺ㄩ�併��========鎴愬姛=======");
+            log.info("銆愭捣搴峰仠杞﹀満浜嬩欢鎺ㄩ�併��========鎴愬姛=======");
         }catch (Exception e){
 
             log.error("銆愭捣搴峰仠杞﹀満浜嬩欢鎺ㄩ�併��========澶辫触=======锛歕n"+e.getMessage());
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
index 8a287bf..5bdeaf0 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.DataSyncConfig;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
@@ -13,25 +14,22 @@
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest;
 import com.doumee.core.haikang.model.param.respose.*;
 import com.doumee.core.haikang.service.HKService;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.DESUtil;
-import com.doumee.core.utils.DateUtil;
-import com.doumee.core.utils.ImageBase64Util;
+import com.doumee.core.utils.*;
 import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.business.DeviceRoleMapper;
 import com.doumee.dao.business.RetentionMapper;
+import com.doumee.dao.business.VisitEventMapper;
 import com.doumee.dao.business.join.VisitsJoinMapper;
-import com.doumee.dao.business.model.DeviceRole;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.Retention;
-import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.business.model.*;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.Date;
 
 /**
  * 娴峰悍璁垮涓氬姟Service瀹炵幇
@@ -41,8 +39,13 @@
 @Service
 @Slf4j
 public class HkSyncVisitServiceImpl extends HkSyncBaseServiceImpl {
+
+    @Autowired
+    private DataSyncConfig dataSyncConfig;
     @Autowired
     private VisitsJoinMapper visitsMapper;
+    @Autowired
+    private VisitEventMapper visitEventMapper;
     @Autowired
     private RetentionMapper retentionMapper;
     @Autowired
@@ -498,6 +501,107 @@
         List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper);
         return list;
     }
+    @Override
+    @Transactional
+    public   void syncParkRecords(Date date){
+        try {
+            if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佹捣搴锋暟鎹悓姝ユ搷浣渵");
+            }
+            AppointmentEventListRequest param =  new AppointmentEventListRequest();
+            //锛堝叏閲忓悓姝ワ級
+            boolean hasNext = true;
+            int curTotal = 0;
+            int curPage = 1;
+            //鏌ヨ浠婂ぉ鐨�
+            Date start = Utils.Date.getStart(date);
+            Date end = new Date();
+            if(DateUtil.daysBetweenDates(end,start) >1){
+                end =  Utils.Date.getEnd(date);
+            }
+            param.setEventTimeBegin(DateUtil.getISO8601Timestamp2( start));
+            param.setEventTimeBegin(DateUtil.getISO8601Timestamp2( end));
 
+            List<VisitEvent>  allHkList = new ArrayList<>();
+            while (hasNext){
+                //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+                param.setPageNo(curPage);
+                param.setPageSize(100);
+                BaseResponse<BaseListPageResponse<AppointmentEventInfoResponse>> response = HKService.appointmentEventQuery(param);
+                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)  ){
+                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+                }
+                if(response.getData() == null || response.getData().getTotal() ==0){
+                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍淇℃伅锛�");
+                }
+                BaseListPageResponse<AppointmentEventInfoResponse> r = response.getData();
+                curTotal += 100;
+                if(curTotal >= r.getTotal()){
+                    hasNext = false;
+                }
+                if(r.getList() == null || r.getList().size()==0){
+                    hasNext =false;
+                }else{
+                    allHkList.addAll(getNewCarEventModelBYList(r.getList()));
+                }
+                curPage++;
+            }
+            if(allHkList .size() == 0){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍淇℃伅锛�");
+            }
+            //娓呯┖鍘熸湁褰撳ぉ鐨勬暟鎹�
+            visitEventMapper.delete(new UpdateWrapper<VisitEvent>().lambda()
+                    .ge(VisitEvent::getCreateDate,start)
+                    .le(VisitEvent::getCreateDate,end));
+            if(allHkList.size()>0){
+                int sublistSize = 500;
+
+                int startIndex = 0;
+                int endIndex = sublistSize;
+
+                while (startIndex < allHkList.size()) {
+                    if (endIndex > allHkList.size()) {
+                        endIndex = allHkList.size();
+                    }
+
+                    List<VisitEvent> sublist = allHkList.subList(startIndex, endIndex);
+                    if(sublist.size()>0){
+                        visitEventMapper.insertBatchSomeColumn(sublist);//鎻掑叆鏂版暟鎹�
+                    }
+                    startIndex = endIndex;
+                    endIndex += sublistSize;
+                }
+            }
+
+        }catch (BusinessException e){
+            throw  e;
+        }
+    }
+
+    private List<VisitEvent> getNewCarEventModelBYList(List<AppointmentEventInfoResponse> list ) {
+        List<VisitEvent> newList = new ArrayList<>();
+        if(list == null || list.size()==0){
+            return  newList;
+        }
+        for(AppointmentEventInfoResponse model :list){
+            VisitEvent c = new VisitEvent();
+            c.setHappenTime(model.getEventTime());
+            c.setCreateDate(DateUtil.getISO8601DateByStr2(model.getEventTime()));
+            c.setPersonName(model.getVisitorName());
+            c.setSex(Integer.parseInt(model.getVisitorSex()));
+            c.setCarNo(model.getCarNumber());
+            c.setIdNo(model.getIdentityNum());
+            c.setIdType(Integer.parseInt(model.getIdentityId()));
+            c.setPhone(model.getPhoneNum());
+            c.setRemark(model.getCardNum());
+            c.setPhotoUrl(model.getIdentityPhotoUri());
+            c.setVisitorId(model.getVisitorId());
+            c.setIsdeleted(Constants.ZERO);
+            c.setEventTypeName(model.getEventName());
+
+            newList.add(c);
+        }
+        return newList;
+    }
 
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java
index 4f8ce59..14a4c4d 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java
@@ -21,6 +21,7 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.CarEvent;
 import com.doumee.dao.business.model.Cars;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Visits;
@@ -49,6 +50,8 @@
     private MemberMapper memberMapper;
     @Autowired
     private ParksMapper parksMapper;
+    @Autowired
+    private CarEventMapper carEventMapper;
     @Autowired
     private CarsMapper carsMapper;
     @Autowired
@@ -176,6 +179,13 @@
                     //琚闂汉
                     Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1"));
                     c.setMemberId(member!=null?member.getId():null);
+                    if(member!=null){
+                        carEventMapper.update(null,new UpdateWrapper<CarEvent>().lambda()
+                                .set(CarEvent::getMemberId,member.getId())
+                                .eq(CarEvent::getPlateNos,c.getCode())
+                                .apply("member_id is null or member_id=''")
+                        );
+                    }
                 }
                 Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda().eq(Cars::getHkId,model.getVehicleId()).last("limit 1"));
                 if(cars!=null){
@@ -212,11 +222,17 @@
                 //琚闂汉
                 Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1"));
                 c.setMemberId(member!=null?member.getId():null);
+                if(member!=null){
+                    carEventMapper.update(null,new UpdateWrapper<CarEvent>().lambda()
+                            .set(CarEvent::getMemberId,member.getId())
+                            .eq(CarEvent::getPlateNos,c.getCode())
+                            .apply("member_id is null or member_id=''")
+                    );
+                }
             }
             newList.add(c);
         }
         return newList;
     }
-
 
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
index d92e58f..f5150c9 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
@@ -10,7 +10,9 @@
 import com.doumee.core.haikang.model.param.BaseListPageResponse;
 import com.doumee.core.haikang.model.param.BaseResponse;
 import com.doumee.core.haikang.model.param.request.AppointmentListRequest;
+import com.doumee.core.haikang.model.param.respose.AppointmentIccmInfoResponse;
 import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
+import com.doumee.core.haikang.model.param.respose.AppointmentVisitorInfoResponse;
 import com.doumee.core.haikang.service.HKService;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DESUtil;
@@ -52,6 +54,64 @@
     private SystemDictDataBiz systemDictDataBiz;
 
 
+    /**
+     * 鍚屾娴峰悍缁勭粐淇℃伅鍒颁笟鍔$郴缁�
+     */
+    @Override
+    @Transactional
+    public   void syncVistAppointDataIccm(Date date){
+        try {
+            if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佹捣搴锋暟鎹悓姝ユ搷浣渵");
+            }
+            AppointmentListRequest param =  new AppointmentListRequest();
+            //鑾峰彇ERP缁勭粐淇℃伅锛堝叏閲忓悓姝ワ級
+            boolean hasNext = true;
+            int curTotal = 0;
+            int curPage = 1;
+            //鏌ヨ浠婂ぉ鐨�
+            Date start =Utils.Date.getStart(date);
+            Date end = Utils.Date.getEnd(new Date());
+            param.setVisitStartTimeBegin(DateUtil.getISO8601Timestamp2( start));
+            param.setVisitStartTimeEnd(DateUtil.getISO8601Timestamp2( end));
+
+            List<Visits>  allHkList = new ArrayList<>();
+            while (hasNext){
+                //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+                param.setPageNo(curPage);
+                param.setPageSize(100);
+                BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>> response = HKService.appointmentRecordsIccm(param);
+                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)  ){
+                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+                }
+                if(response.getData() == null || response.getData().getTotal() ==0){
+                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍淇℃伅锛�");
+                }
+                BaseListPageResponse<AppointmentIccmInfoResponse> r = response.getData();
+                curTotal += 100;
+                if(curTotal >= r.getTotal()){
+                    hasNext = false;
+                }
+                if(r.getList() == null || r.getList().size()==0){
+                    hasNext =false;
+                }else{
+                    allHkList.addAll(getNewVisitModelBYListIccm(r.getList()));
+                }
+                curPage++;
+            }
+            if(allHkList .size() == 0){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍淇℃伅锛�");
+            }
+            //娓呯┖鍘熸湁褰撳ぉ鐨勬暟鎹�
+            visitsMapper.delete(new UpdateWrapper<Visits>().lambda()
+                    .ge(Visits::getStarttime,start)
+                    .eq(Visits::getType,Constants.ONE)
+                    .le(Visits::getStarttime,end));
+            visitsMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+        }catch (BusinessException e){
+            throw  e;
+        }
+    }
     /**
      * 鍚屾娴峰悍缁勭粐淇℃伅鍒颁笟鍔$郴缁�
      */
@@ -114,6 +174,84 @@
         }
     }
 
+    private List<Visits> getNewVisitModelBYListIccm(List<AppointmentIccmInfoResponse> list ) {
+        List<Visits> newList = new ArrayList<>();
+        if(list == null || list.size()==0){
+            return  newList;
+        }
+        for(AppointmentIccmInfoResponse data :list){
+            if(data.getVisitorList()==null || data.getVisitorList().size() ==0){
+                continue;
+            }
+            for(AppointmentVisitorInfoResponse model : data.getVisitorList()){
+                Visits c = new Visits();
+                c.setHkId(model.getVisitorId());
+                c.setCode(model.getQrCode());
+                c.setName(model.getVisitorName());
+                c.setHkStatus(Constants.ONE);
+                c.setHkDate(new Date());
+                c.setIsdeleted(Constants.ZERO);
+                c.setCreateDate(c.getHkDate());
+                c.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, model.getCertificateNo()));
+                c.setIdcardDecode(Constants.getTuominStr(model.getCertificateNo()));
+                c.setIdcardType(Integer.parseInt(model.getCertificateType()));
+                c.setStarttime(DateUtil.getISO8601DateByStr2(data.getVisitStartTime()));
+                c.setEndtime(DateUtil.getISO8601DateByStr2(data.getVisitEndTime()));
+                c.setReason(data.getVisitPurpose());
+                c.setStatus(model.getVisitorStatus());
+                c.setType(Constants.ONE);
+                if(StringUtils.isNotBlank(data.getReceptionistId())){
+                    //琚闂汉
+                    Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,data.getReceptionistId()).last("limit 1"));
+                    c.setReceptMemberId(member!=null?member.getId():null);
+                }
+                c.setCompanyName(model.getVisitorWorkUnit());
+                c.setPhone(model.getPhoneNo());
+                c.setCarNos(model.getPlateNo());
+                if(StringUtils.isNotBlank(model.getCertificateNo())){
+                    //琚闂汉
+                    Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                            .eq(Member::getType,Constants.ONE)
+                            .eq(Member::getIdcardNo , c.getIdcardNo())
+                            .last("limit 1"));
+                    if(member == null){
+                        member = new Member();
+                        member.setName(model.getVisitorName());
+                        member.setPhone(model.getPhoneNo());
+                        member.setSex(model.getGender());
+                        member.setIsdeleted(Constants.ZERO);
+                        member.setType(Constants.ONE);
+                        member.setIdcardNo(c.getIdcardNo());
+                        member.setIdcardDecode(c.getIdcardDecode());
+                        member.setVisitCompanyName(model.getVisitorWorkUnit());
+                        member.setCreateDate(new Date());
+                        if(StringUtils.isNotBlank(model.getPicUri())){
+                            member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri());
+                            member.setFaceServerIndexCode(model.getSvrIndexCode());
+                        }
+                        memberMapper.insert(member);
+                    }else{
+                        member.setIsdeleted(Constants.ZERO);
+                        member.setEditDate(new Date());
+                        member.setName(model.getVisitorName());
+                        member.setPhone(model.getPhoneNo());
+                        member.setSex(model.getGender());
+                        member.setVisitCompanyName(model.getVisitorWorkUnit());
+                        if(StringUtils.isNotBlank(model.getPicUri())){
+                            member.setFaceServerIndexCode(model.getSvrIndexCode());
+                            member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri());
+                        }
+                        memberMapper.updateById(member);
+                    }
+                    c.setMemberId(member.getId());
+
+                }
+                newList.add(c);
+            }
+
+        }
+        return newList;
+    }
     private List<Visits> getNewVisitModelBYList(List<AppointmentInfoResponse> list ) {
         List<Visits> newList = new ArrayList<>();
         if(list == null || list.size()==0){
@@ -183,4 +321,5 @@
     }
 
 
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/system/SystemLoginService.java b/server/dmvisit_service/src/main/java/com/doumee/service/system/SystemLoginService.java
index 07d70b8..dbad804 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/system/SystemLoginService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -2,6 +2,7 @@
 
 import com.doumee.dao.system.dto.LoginDTO;
 
+import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletRequest;
 
 /**
@@ -16,5 +17,6 @@
      * @author Eva.Caesar Liu
      * @date 2023/03/21 14:49
      */
+
     String loginByPassword (LoginDTO dto, HttpServletRequest request);
 }
diff --git a/server/dmvisit_service/src/main/resources/application-proYL.yml b/server/dmvisit_service/src/main/resources/application-proYL.yml
new file mode 100644
index 0000000..9c94e0d
--- /dev/null
+++ b/server/dmvisit_service/src/main/resources/application-proYL.yml
@@ -0,0 +1,80 @@
+spring:
+  # 鏁版嵁婧愰厤缃�
+  datasource:
+    url: jdbc:mysql://127.0.0.1:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    username: test1
+    password: Doumee@168
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    type: com.alibaba.druid.pool.DruidDataSource
+  redis:
+    #    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password:
+    timeout: 5000      # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+  jackson:
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
+
+#rocketmq:
+#  namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
+#  groupId: GID-wakatest
+#  topic: waka-test
+#  username: 4derRb4Sw5EkqUMI
+#  password: v50N97wf4av8Q8I4
+
+knife4j:
+  enable: true
+  basic:
+    enable: true
+    username: admin
+    password: 111111
+
+debug_model: false
+########################鍚屾鏁版嵁妯″紡  ########################
+data-sync:
+  org-user-data-origin: 2 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+  need-deal-img: false #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
+
+# Swagger閰嶇疆
+swagger:
+  host: 127.0.0.1
+  title: ${project.name}鎺ュ彛鏂囨。
+  description: ${project.name}鎺ュ彛鏂囨。
+  enabled: true
+  context-path:
+  # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
+  redirect-uri: /
+
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+  pay:
+    appId: wxfab6da18632e28de
+    appSecret: 4ee3b22afa90287834319fc3c1635271
+    mchId: 1229817002
+    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+    notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
+    keyPath: /usr/local/apiclient_cert.p12
+
+tencent:
+  map:
+    remoteHost: https://apis.map.qq.com
+    appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
+
+
+des_pwd: 123456SDFKDJF
+
+## MQTT##
+mqtt:
+  host: tcp://192.168.10.198:1883
+  userName: root
+  passWord: 123456
+  qos: 1
+  clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC  閭d綘灏变竴鐩村彨ABC  鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
+  timeout: 10
+  keepalive: 20
+  topic1: A/pick/warn/#  #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
+  topic2: A/cmd/resp
+  topic3: ABCF
+  topic4: ABCH
diff --git a/server/dmvisit_service/src/main/resources/application-testYL.yml b/server/dmvisit_service/src/main/resources/application-testYL.yml
index 4324462..9c94e0d 100644
--- a/server/dmvisit_service/src/main/resources/application-testYL.yml
+++ b/server/dmvisit_service/src/main/resources/application-testYL.yml
@@ -1,9 +1,9 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/dm_visit_yl?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: doumee
-    password: rtjgfEr@&0c0m
+    url: jdbc:mysql://127.0.0.1:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+    username: test1
+    password: Doumee@168
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
   redis:
@@ -30,7 +30,7 @@
     username: admin
     password: 111111
 
-debug_model: true
+debug_model: false
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
   org-user-data-origin: 2 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
diff --git a/server/dmvisit_web/src/main/resources/logback-spring.xml b/server/dmvisit_web/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..d79c185
--- /dev/null
+++ b/server/dmvisit_web/src/main/resources/logback-spring.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
+        </layout>
+    </appender>
+    <property name="log.path" value="/usr/local/jars/log/web"></property>
+    <property name="log.fileSize" value="100MB"></property>
+    <property name="log.historyDays" value="7"></property>
+
+    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <!--鍖归厤灏辫垗鍘�-->
+            <onMatch>DENY</onMatch>
+            <onMismatch>ACCEPT</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <!--婊氬姩绛栫暐-->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+    <!-- 寮傛鍐欏叆鏃ュ織 -->
+    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
+        <!-- 涓嶄涪澶辨棩蹇�.榛樿鐨�,濡傛灉闃熷垪鐨�80%宸叉弧,鍒欎細涓㈠純TRACT銆丏EBUG銆両NFO绾у埆鐨勬棩蹇� -->
+        <discardingThreshold >0</discardingThreshold>
+        <!-- 鏇存敼榛樿鐨勯槦鍒楃殑娣卞害,璇ュ�间細褰卞搷鎬ц兘.榛樿鍊间负256 -->
+        <queueSize>512</queueSize>
+        <!-- 娣诲姞闄勫姞鐨刟ppender,鏈�澶氬彧鑳芥坊鍔犱竴涓� -->
+        <appender-ref ref ="fileInfoLog"/>
+    </appender>
+    <root level="info">
+        <appender-ref ref="consoleLog"/>
+        <appender-ref ref="fileInfoLog"/>
+        <appender-ref ref="fileErrorLog"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/server/openapi/src/main/resources/logback-spring.xml b/server/openapi/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..63d508b
--- /dev/null
+++ b/server/openapi/src/main/resources/logback-spring.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
+        </layout>
+    </appender>
+    <property name="log.path" value="/usr/local/jars/log/erp"></property>
+    <property name="log.fileSize" value="100MB"></property>
+    <property name="log.historyDays" value="7"></property>
+
+    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <!--鍖归厤灏辫垗鍘�-->
+            <onMatch>DENY</onMatch>
+            <onMismatch>ACCEPT</onMismatch>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+        </encoder>
+        <!--婊氬姩绛栫暐-->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!--璺緞-->
+            <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern>
+            <maxFileSize>${log.fileSize}</maxFileSize>
+            <maxHistory>${log.historyDays}</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+    <!-- 寮傛鍐欏叆鏃ュ織 -->
+    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
+        <!-- 涓嶄涪澶辨棩蹇�.榛樿鐨�,濡傛灉闃熷垪鐨�80%宸叉弧,鍒欎細涓㈠純TRACT銆丏EBUG銆両NFO绾у埆鐨勬棩蹇� -->
+        <discardingThreshold >0</discardingThreshold>
+        <!-- 鏇存敼榛樿鐨勯槦鍒楃殑娣卞害,璇ュ�间細褰卞搷鎬ц兘.榛樿鍊间负256 -->
+        <queueSize>512</queueSize>
+        <!-- 娣诲姞闄勫姞鐨刟ppender,鏈�澶氬彧鑳芥坊鍔犱竴涓� -->
+        <appender-ref ref ="fileInfoLog"/>
+    </appender>
+    <root level="info">
+        <appender-ref ref="consoleLog"/>
+        <appender-ref ref="fileInfoLog"/>
+        <appender-ref ref="fileErrorLog"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/server/pom.xml b/server/pom.xml
index c46240c..8eeb1ee 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -17,6 +17,7 @@
     <module>openapi</module>
       <module>admin_timer</module>
       <module>admin_sys_timer</module>
+      <module>dmvisit_screen</module>
   </modules>
 
 

--
Gitblit v1.9.3