From 57639dfd35931021cdab41964f08297ae302ef0a Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 26 二月 2024 18:37:47 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java                            |   66 ++++++
 server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java                              |    7 
 server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                          |   10 
 server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java                       |    3 
 admin/src/views/business/visits.vue                                                                          |   20 +
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java                            |    9 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java                           |   70 ++++---
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java                        |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java                 |   78 +++++--
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java      |   73 ++++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                 |   65 +++++
 server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java                                    |   13 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java     |    7 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java                               |   15 
 server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java                          |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java                |    9 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java                             |    7 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java                         |    4 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java                              |    9 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java |    4 
 admin/src/views/business/visitEvent.vue                                                                      |   13 
 server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java                      |    4 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java             |   52 +---
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java                        |   47 ++++
 24 files changed, 434 insertions(+), 155 deletions(-)

diff --git a/admin/src/views/business/visitEvent.vue b/admin/src/views/business/visitEvent.vue
index 5cf8c69..f3b0c33 100644
--- a/admin/src/views/business/visitEvent.vue
+++ b/admin/src/views/business/visitEvent.vue
@@ -50,22 +50,23 @@
                 stripe
             >
                 <el-table-column prop="personName" label="濮撳悕" min-width="100px"></el-table-column>
-                <el-table-column prop="personPhone" label="鎵嬫満鍙风爜" min-width="100px"></el-table-column>
+                <el-table-column prop="phone" label="鎵嬫満鍙风爜" min-width="100px"></el-table-column>
                 <el-table-column prop="idNo" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
-                <el-table-column prop="personCompanyName" 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="鎶撴媿鍥緐ri" min-width="100px">
                     <template slot-scope="{row}">
-                        <el-image
+                        <el-image v-if="row.captureUrlFull!=null"
                             style="width: 80px; height: 80px"
-                            :src="row.captureUrl"
-                            :preview-src-list="[row.captureUrl]">
+                            :src="row.captureUrlFull"
+                            :preview-src-list="[row.captureUrlFull]">
                         </el-image>
                     </template>
                 </el-table-column>
-                <el-table-column prop="happenTime" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="createDate" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
             </el-table>
             <pagination
                 @size-change="handleSizeChange"
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
index 0e35462..50209e2 100644
--- a/admin/src/views/business/visits.vue
+++ b/admin/src/views/business/visits.vue
@@ -13,13 +13,15 @@
             </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="宸叉彁浜RP瀹℃壒" value="1"></el-option>
+                    <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-option label="棰勭害鎴愬姛" value="5"></el-option>
+                    <el-option label="棰勭害澶辫触" value="6"></el-option>
+                    <el-option label="鎷滆涓�" value="7"></el-option>
+                    <el-option label="宸茬绂�" value="8"></el-option>
                 </el-select>
             </el-form-item>
             <section>
@@ -64,13 +66,15 @@
                 </el-table-column>
                 <el-table-column prop="status" fixed="right" label="鐘舵��" min-width="100px">
                     <template slot-scope="{row}">
-                        <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">寰呭鏍�</span>
-                        <span v-if="row.status === 1">宸叉彁浜RP瀹℃壒</span>
+                        <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">寰呮彁浜ゅ鎵�</span>
+                        <span v-if="row.status === 1">瀹℃壒涓�</span>
                         <span v-if="row.status === 2">瀹℃牳閫氳繃</span>
                         <span style="color: red;" 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>
+                        <span v-if="row.status === 5">棰勭害鎴愬姛</span>
+                        <span v-if="row.status === 6">棰勭害澶辫触</span>
+                        <span v-if="row.status === 7">鎷滆涓�</span>
+                        <span v-if="row.status === 8">宸茬绂�</span>
                     </template>
                 </el-table-column>
                 <el-table-column
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 66055b0..98132b6 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
@@ -16,6 +16,7 @@
 import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -46,7 +47,7 @@
     @PreventRepeat
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ラ棬绂佽澶囨帴鍙�")
     @PostMapping("/syncDevices")
-//    @RequiresPermissions("business:hksync:device")
+    @RequiresPermissions("business:hksync:device")
     public ApiResponse syncHkDevices(@RequestBody AcsDeviceListRequest param) {
         String result = hkSyncDeviceService.syncHkDevices(param);
         return ApiResponse.success(result);
@@ -54,7 +55,7 @@
     @PreventRepeat
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ュ仠杞﹀簱鎺ュ彛")
     @PostMapping("/syncParks")
-//    @RequiresPermissions("business:hksync:park")
+    @RequiresPermissions("business:hksync:park")
     public ApiResponse syncHkParks(@RequestBody ParkListRequest param) {
         String result = hkSyncParkService.syncHkParks(param);
         return ApiResponse.success(result);
@@ -62,7 +63,7 @@
     @PreventRepeat
     @ApiOperation("銆愭捣搴枫�戝叏閲忓悓姝ヨ瀹㈡潈闄愮粍鎺ュ彛")
     @PostMapping("/syncPrivilege")
-//    @RequiresPermissions("business:hksync:privilege")
+    @RequiresPermissions("business:hksync:privilege")
     public ApiResponse syncPrivilege(@RequestBody PrivilegeGroupRequest param) {
         String result = hkSyncPrivilegeService.syncPrivilege(param);
         return ApiResponse.success(result);
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java
new file mode 100644
index 0000000..ad9f02c
--- /dev/null
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java
@@ -0,0 +1,66 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.admin.response.StagingDataVO;
+import com.doumee.dao.business.model.Visits;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.VisitsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/2/26 11:00
+ */
+@Api(tags = "宸ヤ綔鍙版暟鎹�")
+@RestController
+@RequestMapping("/business/staging")
+public class StagingController  extends BaseController {
+
+
+    @Autowired
+    private MemberService memberService;
+
+    @Autowired
+    private VisitsService visitsService;
+
+
+
+    @ApiOperation("澶撮儴鏁版嵁")
+    @GetMapping("/head")
+    public ApiResponse<StagingDataVO> head() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",memberService.stagingHead(new StagingDataVO()));
+    }
+
+
+    @ApiOperation("涓讳綋鏁版嵁")
+    @GetMapping("/body")
+    public ApiResponse<StagingDataVO> body() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",memberService.stagingBody(new StagingDataVO()));
+    }
+
+
+    @ApiOperation("瓒呮椂棰勮浜哄憳")
+    @PostMapping("/timeoutPage")
+    public ApiResponse<PageData<Visits>> timeoutPage (@RequestBody PageWrap<Visits> pageWrap) {
+        pageWrap.getModel().setLevelStatus(Constants.ZERO);
+        return ApiResponse.success(visitsService.retentionPage(pageWrap));
+    }
+
+    @ApiOperation("瓒呮椂棰勮浜哄憳绂诲満")
+    @GetMapping("/level")
+    public ApiResponse level (@RequestParam Integer visitId) {
+        visitsService.visitLevel(visitId);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+}
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 e65e0b2..6a629fa 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
@@ -72,7 +72,7 @@
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     //@RequiresPermissions("business:visitevent:query")
-    public ApiResponse<PageData<VisitEventDTO>> findPage (@RequestBody PageWrap<VisitEvent> pageWrap) {
+    public ApiResponse<PageData<VisitEvent>> findPage (@RequestBody PageWrap<VisitEvent> pageWrap) {
         return ApiResponse.success(visitEventService.findVisitPage(pageWrap));
     }
 
@@ -80,7 +80,7 @@
     @PostMapping("/exportExcel")
     //@RequiresPermissions("business:visitevent:exportExcel")
     public void exportExcel (@RequestBody PageWrap<VisitEvent> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(VisitEventVo.class).export(visitEventService.findPageExcel(pageWrap), "璁垮浜嬩欢鎺ㄩ�佽褰曡〃", response);
+        ExcelExporter.build(VisitEvent.class).export(visitEventService.findPageExcel(pageWrap), "璁垮浜嬩欢鎺ㄩ�佽褰曡〃", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
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 d31fad0..3c8935d 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
@@ -86,7 +86,7 @@
         HKService.eventSub(param);//鍋滆溅鍦轰簨浠�
 
         param.setEventDest(path+"/visit");
-        param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()
+        param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_IN.getKey()
                 ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()});
         HKService.cancelEventSub(param);//鍏堝彇娑�
         HKService.eventSub(param);//璁垮浜嬩欢
@@ -107,6 +107,7 @@
                 ,HKConstants.EventTypes.PARK_LINE_OUT.getKey()
                 ,HKConstants.EventTypes.PARK_PASS_IN.getKey()
                 ,HKConstants.EventTypes.PARK_PASS_OUT.getKey()
+                ,HKConstants.EventTypes.VISIT_SIGN_IN.getKey()
                 ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey(),
                 HKConstants.EventTypes.DOOR_FACE_AUTH_SUCCESS.getKey()});
         String path =systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_PUSH_URL).getCode();
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 22b4a0f..d5a038b 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
@@ -100,6 +100,8 @@
     // 鍐呴儴浜哄憳鍐荤粨閰嶇疆鏃堕棿
     public static final String TIMEOUT_FREEZE = "TIMEOUT_FREEZE";
 
+    // 瓒呮椂棰勮閰嶇疆
+    public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
     // FTP鏂囦欢鏈嶅姟鍣ㄨ祫婧愯闂湴鍧�
 
     public static  Date  getBirthdyByCardNo(String idCard){
@@ -133,7 +135,7 @@
      *   鍒ゆ柇鏄惁涓烘湁鏁堣溅鐗屽彿
      */
     public static boolean checkCarNo(String str) {
-        String patt="^[浜触娌唨鏅嬭窘鍚夐粦鑻忔禉鐨栭椊璧i瞾璞剛婀樼菠妗傜惣宸濋粩浜戞笣钘忛檿闄囬潚瀹佹柊闂界菠鏅嬬惣浣块A_Z]{1}[A_Z]{1}[A-Z0-9]{4}[A-Z0-9鎸傚璀︽腐婢砞{1}$";
+        String patt="^[浜触娌笣鍐�璞簯杈介粦婀樼殩椴佹柊鑻忔禉璧i剛妗傜敇鏅嬭挋闄曞悏闂借吹宸濋潚钘忕惣瀹佺Е宸漖\\\\d{5}[A-Z]$";
         Pattern r = Pattern.compile(patt);
         Matcher matcher = r.matcher(str);
         return matcher.find();
@@ -190,7 +192,7 @@
          int nb = 2;//鍐呴儴璁垮
     }
     public interface VisitStatus{
-        //瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7宸茬绂�
+        //瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7宸茬櫥璁� 8宸茬绂�
          int waitCheck = 0;
          int submitCheck = 1;
          int pass = 2;
@@ -198,7 +200,8 @@
          int cancel = 4;
          int xfSuccess = 5;
          int xfFail = 6;
-         int signout = 7;
+         int signin= 7;
+         int signout =  8;
     }
     public interface EmpowerStatus{
         //涓�鍗¢�氭巿鏉冧笅鍙戠姸鎬� 0寰呬笅鍙� 1宸蹭笅鍙� 2涓嬪彂鎴愬姛   3宸插彇娑� 4涓嬪彂澶辫触 5浠诲姟涓嬭浇宸茬粨鏉�
@@ -327,8 +330,8 @@
 
 
     public static void main(String[] args) {
-        String t = URLDecoder.decode("https://lsqw.gtja.com/qwcos/v-index.html#/loginforProperty?corpId=ww4b7aefafeb430e4b&corpId=ww4b7aefafeb430e4b&agentId=1000005&agentId=1000005&fromRoute=&userCode=013561&userCode=&userId=zz&userId=&encryptUserCode=&custQwId=wmIUuSDgAAR8MhtVY8w90EyKltvoK5fA&custCode=&openId=op1wZwD1dKuBQywmWWS5957zUOJI&name=%E8%B9%84%E8%B9%84&headUrl=http%3A%2F%2Fwx.qlogo.cn%2Fmmhead%2FQ3auHgzwzM4QlibSOAvYcvRMdsoyF3Ua7duLOYSJfB3dsGsYxIYonBw%2F0&dbHeadUrl=https%3A%2F%2Ftgf.gtja.com%2Ff%2F%2Fqwoms%2F2022512%2Fqwoms_1652332606613_8.jpg");
-        System.out.println(t);
+        System.out.println(Constants.checkCarNo("婀楤40D17"));
+        System.out.println(Constants.checkCarNo("鐨朅P0637"));
     }
 
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java b/server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java
index 327f16c..0ee1cc5 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java
@@ -91,7 +91,8 @@
                 outStream.write(buffer, 0, len);
             }
             // 瀵瑰瓧鑺傛暟缁凚ase64缂栫爜
-            return new BASE64Encoder().encode(outStream.toByteArray());
+            return  Base64.encodeBase64String(outStream.toByteArray());
+//            return new BASE64Encoder().encode(outStream.toByteArray());
         }catch (Exception e) {
             e.printStackTrace();
         }
@@ -121,9 +122,9 @@
     }
 
     public static void main(String[] args) {
-        String url= "http://doumeetest.oss-cn-beijing.aliyuncs.com/member/20210515/de923f81-b417-47fc-a702-472d60d7870a.png";// 寰呭鐞嗙殑鍥剧墖
+        String url= "http://175.27.187.84/file4/member/20223402/DM1005.png";// 寰呭鐞嗙殑鍥剧墖
         String imgbese = Image2Base64(url);
-        System.out.println(imgbese);
+        System.out.println(imgbese.replace("\r\n", ""));
 
 //        String url= "D:\\1.jpg";// 鏂扮敓鎴愮殑鍥剧墖
 //        generateImage(imgbese, url);
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java
new file mode 100644
index 0000000..6ece8b1
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java
@@ -0,0 +1,47 @@
+package com.doumee.dao.admin.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/2/26 11:02
+ */
+@Data
+@ApiModel("宸ヤ綔鍙版暟鎹�")
+public class StagingDataVO {
+
+    @ApiModelProperty(value = "鍐呴儴鍛樺伐")
+    private Long workerCount;
+
+    @ApiModelProperty(value = "璁垮浜哄憳")
+    private Long visitorCount;
+
+    @ApiModelProperty(value = "鍔冲姟浜哄憳")
+    private Long lwCount;
+
+    @ApiModelProperty(value = "鍦ㄥ満杞﹁締")
+    private Integer presenceCarCount;
+
+    @ApiModelProperty(value = "棰勭害杞﹁締")
+    private Integer visitorCarCount;
+
+    @ApiModelProperty(value = "闀挎湡杞﹁締")
+    private Integer longCarCount;
+
+    @ApiModelProperty(value = "渚涘簲鍟嗘暟閲�")
+    private Integer supplierCount;
+
+    @ApiModelProperty(value = "鍔冲姟鍏徃浜哄憳鏁�")
+    private List<Map<String,Object>> companyUsers;
+
+    @ApiModelProperty(value = "婊炵暀浜哄憳鏁版嵁")
+    private List<Map<String,Object>> retentionUsers;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
index d6f9cb7..09f4d91 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
@@ -68,7 +68,7 @@
 
 
     @ApiModelProperty(value = "鎵嬫満鍙�")
-    private String personPhone;
+    private String phone;
 
     @ApiModelProperty(value = "浜哄憳绫诲瀷")
     private String personType;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
index 5f9a4fb..b7a30a9 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
@@ -174,4 +174,13 @@
     @TableField(exist = false)
     private List<Company> childList;
 
+    @ApiModelProperty(value = "娴峰悍閮ㄩ棬绾у埆璺緞", example = "1")
+    @ExcelColumn(name="娴峰悍閮ㄩ棬绾у埆璺緞")
+    private String hk_company_path;
+    @ApiModelProperty(value = "鑷缓閮ㄩ棬绾у埆璺緞", example = "1")
+    @ExcelColumn(name="鑷缓閮ㄩ棬绾у埆璺緞")
+    private String company_path;
+    @ApiModelProperty(value = "erp閮ㄩ棬绾у埆璺緞", example = "1")
+    @ExcelColumn(name="erp閮ㄩ棬绾у埆璺緞")
+    private String erp_company_path;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
index 717a1f0..0a26680 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
@@ -64,8 +64,8 @@
     @ExcelColumn(name="鍋ュ悍鐮�")
     private String imgurl;
 
-    @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴鍛樺伐")
-    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴鍛樺伐")
+    @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴鍛樺伐 3杞﹁締淇℃伅")
+    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴鍛樺伐 3杞﹁締淇℃伅")
     private Integer type;
 
     @ApiModelProperty(value = "璁垮鍚嶇О")
@@ -115,6 +115,11 @@
     @ExcelColumn(name="浜嬩欢绫诲瀷鐮�")
     private String eventCode;
 
+
+    @ApiModelProperty(value = "杞︾墝鍙凤紙type=3浣跨敤锛�")
+    @ExcelColumn(name="杞︾墝鍙凤紙type=3浣跨敤锛�")
+    private String carNo;
+
     @ApiModelProperty(value = "鍏徃缁勭粐")
     @ExcelColumn(name="鍏徃缁勭粐")
     @TableField(exist = false)
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
index 5a55fa1..c45977c 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
@@ -23,73 +23,73 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
+//    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+//    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="鍒涘缓鏃堕棿" )
+//    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+//    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @ExcelColumn(name="鏇存柊鏃堕棿")
+//    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+//    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
+//    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "浜嬩欢鍞竴鏍囪瘑锛屽悓涓�浜嬩欢鑻ヤ笂鎶ュ娆★紝鍒欎笂鎶ヤ簨浠剁殑eventId鐩稿悓")
-    @ExcelColumn(name="浜嬩欢鍞竴鏍囪瘑锛屽悓涓�浜嬩欢鑻ヤ笂鎶ュ娆★紝鍒欎笂鎶ヤ簨浠剁殑eventId鐩稿悓")
+//    @ExcelColumn(name="浜嬩欢鍞竴鏍囪瘑")
     private String eventId;
 
     @ApiModelProperty(value = "浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�")
-    @ExcelColumn(name="浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�")
+//    @ExcelColumn(name="浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�")
     private String srcIndex;
 
     @ApiModelProperty(value = "浜嬩欢婧愮被鍨�")
-    @ExcelColumn(name="浜嬩欢婧愮被鍨�")
+//    @ExcelColumn(name="浜嬩欢婧愮被鍨�")
     private String srcType;
 
     @ApiModelProperty(value = "浜嬩欢婧愬悕绉�")
-    @ExcelColumn(name="浜嬩欢婧愬悕绉�")
+//    @ExcelColumn(name="浜嬩欢婧愬悕绉�")
     private String srcName;
 
     @ApiModelProperty(value = "浜嬩欢绫诲瀷锛堢櫥璁� 绛剧锛�")
-    @ExcelColumn(name="浜嬩欢绫诲瀷")
+//    @ExcelColumn(name="浜嬩欢绫诲瀷")
     private Integer eventType;
 
     @ApiModelProperty(value = "浜嬩欢鐘舵��,0-鐬椂1-寮�濮�2-鍋滄4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-浜嬩欢鍥剧墖寮傛涓婁紶", example = "1")
-    @ExcelColumn(name="浜嬩欢鐘舵��,0-鐬椂1-寮�濮�2-鍋滄4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-浜嬩欢鍥剧墖寮傛涓婁紶")
+//    @ExcelColumn(name="浜嬩欢鐘舵��,0-鐬椂1-寮�濮�2-鍋滄4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-浜嬩欢鍥剧墖寮傛涓婁紶")
     private Integer status;
 
     @ApiModelProperty(value = "鑴夊啿瓒呮椂鏃堕棿")
-    @ExcelColumn(name="鑴夊啿瓒呮椂鏃堕棿")
+//    @ExcelColumn(name="鑴夊啿瓒呮椂鏃堕棿")
     private Integer timeout;
 
     @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
-    @ExcelColumn(name="浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+//    @ExcelColumn(name="浜嬩欢鍙戠敓鏃堕棿")
     private String happenTime;
 
     @ApiModelProperty(value = "浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶�")
-    @ExcelColumn(name="浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶�")
+//    @ExcelColumn(name="浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶�")
     private String srcParentIndex;
 
     @ApiModelProperty(value = "璁垮Is锛�,瀵瑰簲璁垮鏉ヨ璁板綍涓殑orderId瀛楁")
-    @ExcelColumn(name="璁垮Is锛�,瀵瑰簲璁垮鏉ヨ璁板綍涓殑orderId瀛楁")
+//    @ExcelColumn(name="璁垮Is锛�,瀵瑰簲璁垮鏉ヨ璁板綍涓殑orderId瀛楁")
     private String visitorId;
 
     @ApiModelProperty(value = "濮撳悕")
@@ -97,15 +97,15 @@
     private String personName;
 
     @ApiModelProperty(value = "鎬у埆 1-鐢�2-濂�", example = "1")
-    @ExcelColumn(name="鎬у埆 1-鐢�2-濂�")
+//    @ExcelColumn(name="鎬у埆 1-鐢�2-濂�")
     private Integer sex;
 
     @ApiModelProperty(value = "璇佷欢绫诲瀷 111韬唤璇�")
-    @ExcelColumn(name="璇佷欢绫诲瀷 111韬唤璇�")
+//    @ExcelColumn(name="璇佷欢绫诲瀷 111韬唤璇�")
     private Integer idType;
 
     @ApiModelProperty(value = "璇佷欢鍙� ")
-    @ExcelColumn(name="璇佷欢鍙� ")
+    @ExcelColumn(name="璇佷欢鍙�")
     private String idNo;
 
     @ApiModelProperty(value = "琚闂汉濮撳悕")
@@ -121,7 +121,7 @@
     private String visitorWorkUint;
 
     @ApiModelProperty(value = "璁垮楠岃瘉鐮�")
-    @ExcelColumn(name="璁垮楠岃瘉鐮�")
+//    @ExcelColumn(name="璁垮楠岃瘉鐮�")
     private String visitorCode;
 
     @ApiModelProperty(value = "鏉ヨ浜嬬敱")
@@ -129,7 +129,7 @@
     private String purpose;
 
     @ApiModelProperty(value = "璇佷欢绛惧彂鏈哄叧")
-    @ExcelColumn(name="璇佷欢绛惧彂鏈哄叧")
+//    @ExcelColumn(name="璇佷欢绛惧彂鏈哄叧")
     private String signOrg;
 
     @ApiModelProperty(value = "鏉ヨ鏃堕棿")
@@ -148,27 +148,27 @@
     private String carNo;
 
     @ApiModelProperty(value = "鐓х墖uri")
-    @ExcelColumn(name="鐓х墖uri")
+//    @ExcelColumn(name="鐓х墖uri")
     private String photoUrl;
 
     @ApiModelProperty(value = "鎶撴媿鍥緐ri")
-    @ExcelColumn(name="鎶撴媿鍥緐ri")
+//    @ExcelColumn(name="鎶撴媿鍥緐ri")
     private String captureUrl;
 
     @ApiModelProperty(value = "鍥剧墖瀛樺偍鏈嶅姟鍣ㄥ敮涓�鏍囪瘑")
-    @ExcelColumn(name="鍥剧墖瀛樺偍鏈嶅姟鍣ㄥ敮涓�鏍囪瘑")
+//    @ExcelColumn(name="鍥剧墖瀛樺偍鏈嶅姟鍣ㄥ敮涓�鏍囪瘑")
     private String svrIndexCode;
 
     @ApiModelProperty(value = "琚闂汉id")
-    @ExcelColumn(name="琚闂汉id")
+//    @ExcelColumn(name="琚闂汉id")
     private String beVisitedPersonId;
 
     @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁噄d")
-    @ExcelColumn(name="琚闂汉鎵�灞炵粍缁噄d")
+//    @ExcelColumn(name="琚闂汉鎵�灞炵粍缁噄d")
     private String beVisitedPersonOrgId;
 
     @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁噄d")
-    @ExcelColumn(name="琚闂汉鎵�灞炵粍缁噄d")
+//    @ExcelColumn(name="琚闂汉鎵�灞炵粍缁噄d")
     private String idcardDecode;
 
     // 鏉′欢鏌ヨ鍙傛暟
@@ -183,4 +183,14 @@
     @ApiModelProperty(value = "缁熻鏁伴噺 ")
     @TableField(exist = false)
     private int num  ;
+
+    @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+    @TableField(exist = false)
+    @ExcelColumn(name="浜嬩欢绫诲瀷")
+    private String eventTypeName;
+
+    @ApiModelProperty(value = "鎶撴媿鍥緐ri瀹屾暣")
+    @TableField(exist = false)
+//    @ExcelColumn(name="鎶撴媿鍥緐ri")
+    private String captureUrlFull;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
index 5105d1c..3118a34 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -107,14 +107,11 @@
     @ApiModelProperty(value = "闅忕▼浜哄憳鏁�", example = "1")
     @ExcelColumn(name="闅忕▼浜哄憳鏁�")
     private Integer memberNum;
-
-
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熷紑濮�")
     @ExcelColumn(name="闂ㄧ鏈夋晥鏈熷紑濮�")
     private Date starttime;
-
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熸埅姝�")
@@ -123,7 +120,6 @@
     @ApiModelProperty(value = "杩涘巶鏃堕棿")
     @ExcelColumn(name="杩涘巶鏃堕棿")
     private Date inDate;
-
     @ApiModelProperty(value = "绂诲満鏃堕棿")
     @ExcelColumn(name="绂诲満鏃堕棿")
     private Date outDate;
@@ -153,8 +149,8 @@
     @ExcelColumn(name="鎺ュ緟浜哄憳")
     private Integer receptMemberId;
 
-    @ApiModelProperty(value = "瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触", example = "1")
-    @ExcelColumn(name="瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触")
+    @ApiModelProperty(value = "瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�", example = "1")
+    @ExcelColumn(name="瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�")
     private Integer status;
 
     @ApiModelProperty(value = "鍒濆浜虹紪鐮�", example = "1")
@@ -276,8 +272,15 @@
     @TableField(exist = false)
     private Integer timeOut;
 
+    @ApiModelProperty(value = "闅忚杞﹁締鏁伴噺", example = "1")
+    @TableField(exist = false)
+    private Integer carNum;
+
     @ApiModelProperty(value = "瓒呮椂鐘舵��0鏈秴鏃讹紝1宸茶秴鏃讹紝2鍗冲皢瓒呮椂", example = "1")
     @TableField(exist = false)
     private Integer outStatus;
 
+    @ApiModelProperty(value = "绂诲満鐘舵�侊紱0=鏈鍦�", example = "1",hidden = true)
+    @TableField(exist = false)
+    private Integer levelStatus;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index b306c56..a329b1d 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -1,13 +1,12 @@
 package com.doumee.service.business;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.core.erp.model.openapi.response.AccessTokenResponse;
 import com.doumee.dao.admin.request.LaborEmpowerDTO;
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.request.MemberQuery;
 import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.admin.response.StagingDataVO;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.web.reqeust.AccountLoginDTO;
 import com.doumee.dao.web.reqeust.CheckVisitedDTO;
@@ -194,4 +193,11 @@
      * @return
      */
     PageData<MemberVO> getVisitedMemberList(PageWrap<VisitMemberDTO> param);
+
+    /**
+     * 琛ュ厖鏁版嵁
+     */
+    StagingDataVO stagingHead(StagingDataVO stagingHeadVO);
+
+    StagingDataVO stagingBody(StagingDataVO stagingHeadVO);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
index 6d07749..6b496dd 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
@@ -106,7 +106,7 @@
      * @param pageWrap 鍒嗛〉瀵硅薄
      * @return PageData<VisitEvent>
      */
-    PageData<VisitEventDTO> findVisitPage(PageWrap<VisitEvent> pageWrap);
+    PageData<VisitEvent> findVisitPage(PageWrap<VisitEvent> pageWrap);
 
 
     /**
@@ -114,5 +114,5 @@
      * @param pageWrap 鍒嗛〉瀵硅薄
      * @return PageData<VisitEventVo>
      */
-    List<VisitEventVo> findPageExcel(PageWrap<VisitEvent> pageWrap);
+    List<VisitEvent> findPageExcel(PageWrap<VisitEvent> pageWrap);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
index 0094acb..dd95a92 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -124,4 +124,6 @@
      * @param auditApproveDTO
      */
     void auditApprove(AuditApproveDTO auditApproveDTO);
+
+    void  visitLevel(Integer visitId);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index a827a1b..19b9e48 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -460,14 +460,13 @@
         int  origin =Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin());
         List<Company> collect = null;
         if(origin == DataSyncConfig.origin.erp){
-            companies.stream().filter(s -> ( StringUtils.equals(s.getErpParentId()+"", parentId))).collect(Collectors.toList());
+            collect=  companies.stream().filter(s -> ( StringUtils.defaultString(s.getErpParentId(),"").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
         }else if(origin == DataSyncConfig.origin.hk){
-            companies.stream().filter(s -> ( StringUtils.equals(s.getHkParentId()+"", parentId))).collect(Collectors.toList());
+            collect= companies.stream().filter(s -> ( StringUtils.defaultString(s.getHkParentId(),"").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
         }else{
-            companies.stream().filter(s -> ( StringUtils.equals(s.getParentId()+"", parentId))).collect(Collectors.toList());
+            collect=  companies.stream().filter(s -> (StringUtils.defaultString(s.getParentId()+"","").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
         }
-
-        if (CollectionUtils.isEmpty(companies)){
+        if (CollectionUtils.isEmpty(collect)){
             return null;
         }
         List<CompanyDTO> companyDTOList = new ArrayList<>();
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index dfc80bd..5d16abd 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,11 +2,8 @@
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.lang.PatternPool;
-import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.PhoneUtil;
-import cn.hutool.core.util.ReUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.DataSyncConfig;
@@ -15,7 +12,6 @@
 import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
-import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
@@ -29,18 +25,17 @@
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.request.MemberQuery;
 import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.admin.response.StagingDataVO;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.MemberJoinMapper;
+import com.doumee.dao.business.join.RetentionJoinMapper;
 import com.doumee.dao.business.join.UserActionJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.reqeust.AccountLoginDTO;
 import com.doumee.dao.web.reqeust.CheckVisitedDTO;
 import com.doumee.dao.web.reqeust.VisitMemberDTO;
-import com.doumee.dao.web.reqeust.VisitRecordDTO;
 import com.doumee.dao.web.response.MemberVO;
-import com.doumee.dao.web.response.VisitRecordVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -50,7 +45,6 @@
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.time.DateUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -96,9 +90,18 @@
     private UserActionJoinMapper userActionJoinMapper;
 
     @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
     private RedisTemplate<String, Object> redisTemplate;
     @Autowired
     private DataSyncConfig dataSyncConfig;
+
+    @Autowired
+    private RetentionJoinMapper retentionJoinMapper;
+
+    @Autowired
+    private VisitsMapper visitsMapper;
 
 
     @Override
@@ -583,6 +586,7 @@
         MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
 
         queryWrapper.selectAll(Member.class);
+        queryWrapper.selectAs(Company::getName,Member::getCompanyName);
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,
                         Member::getCompanyId,pageWrap.getModel().getCompanyIds())
@@ -706,6 +710,7 @@
                         .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
                 .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
                 .eq(Member::getStatus,Constants.Status.FREEZE.getValue())
+                .eq(pageWrap.getModel().getCompanyId()!=null,Company::getId,pageWrap.getModel().getCompanyId())
                 .eq(Objects.nonNull(pageWrap.getModel().getCode()),Member::getCode,pageWrap.getModel().getCode())
                 .orderByDesc(Member::getCreateDate);
 
@@ -881,13 +886,16 @@
                 .eq(Member::getPhone,checkVisitedDTO.getMobile())
                 .eq(validType.equals(Constants.ONE),Member::getName,checkVisitedDTO.getName())
                 .eq(Member::getIsdeleted,Constants.ZERO)
-                .eq(Member::getStatus,Constants.ZERO)
+//                .eq(Member::getStatus,Constants.ZERO)
                 .eq(Member::getCanVisit,Constants.ONE)
                 .eq(Member::getType,Constants.memberType.internal)
                 .last(" limit 1 ")
         );
         MemberVO memberVO = new MemberVO();
         if(!Objects.isNull(member)){
+            if(!member.getStatus().equals(Constants.ZERO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"琚浜鸿处鍙峰紓甯革紝璇风‘璁ゅ悗鍐嶈瘯");
+            }
             BeanUtils.copyProperties(member,memberVO);
         }else{
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -980,6 +988,45 @@
 
 
 
+    @Override
+    public StagingDataVO stagingHead(StagingDataVO stagingHeadVO){
+        //浜哄憳淇℃伅
+        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO));
+        if(CollectionUtils.isNotEmpty(memberList)){
+            stagingHeadVO.setWorkerCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.internal)).count());
+            stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.lw_visitor)).count());
+            stagingHeadVO.setVisitorCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.visitor)).count());
+        }
+        //鍦ㄥ満杞﹁締
+        stagingHeadVO.setPresenceCarCount(retentionJoinMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,3)));
+        //闀挎湡杞﹁締
+        stagingHeadVO.setLongCarCount(retentionJoinMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,3)
+                .exists(" select 1 from park_book p where p.origin = 0 and p.car_code = retention.car_no and p.ISDELETED = 0  ")
+        ));
+        stagingHeadVO.setVisitorCarCount(stagingHeadVO.getPresenceCarCount() - stagingHeadVO.getLongCarCount());
+        stagingHeadVO.setSupplierCount(companyMapper.selectCount(new QueryWrapper<Company>().lambda().eq(Company::getIsdeleted,Constants.ZERO)));
+        return stagingHeadVO;
+    }
+
+
+    @Override
+    public StagingDataVO stagingBody(StagingDataVO stagingHeadVO){
+        List<Map<String,Object>> companyMaps = memberJoinMapper.selectJoinMaps(
+                new MPJLambdaWrapper<Member>()
+                        .select("count(1) as memberCount, t1.name as companyName")
+                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                        .eq(Member::getType,Constants.memberType.lw_visitor)
+                        .groupBy(Company::getId,Company::getName)
+        );
+        List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
+                        .select(" count(1) as memberCount, type as memberType ")
+                        .ne(Retention::getType,3)
+                .groupBy(Retention::getType)
+        );
+        stagingHeadVO.setCompanyUsers(companyMaps);
+        stagingHeadVO.setRetentionUsers(retentionMaps);
+        return stagingHeadVO;
+    }
 
 
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
index 11ae971..5bbd244 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
@@ -235,9 +235,9 @@
     }
 
     @Override
-    public PageData<VisitEventDTO> findVisitPage(PageWrap<VisitEvent> pageWrap) {
+    public PageData<VisitEvent> findVisitPage(PageWrap<VisitEvent> pageWrap) {
 
-        IPage<VisitEventDTO> visitEventDTOIPage = getDataInfo(pageWrap);
+        IPage<VisitEvent> visitEventDTOIPage = getDataInfo(pageWrap);
         if(null != visitEventDTOIPage && visitEventDTOIPage.getRecords().size() > 0) {
             visitEventDTOIPage.setRecords(newVisitEvent(visitEventDTOIPage.getRecords()));
         }
@@ -245,27 +245,12 @@
     }
 
     @Override
-    public List<VisitEventVo> findPageExcel(PageWrap<VisitEvent> pageWrap) {
-        IPage<VisitEventDTO> visitEventExcel = getDataInfo(pageWrap);
-        List<VisitEventVo> voList = new ArrayList<>();
-        if(null != visitEventExcel && visitEventExcel.getRecords().size() > 0) {
-            visitEventExcel.getRecords().stream().forEach(obj->{
-                VisitEventVo eventVo = new VisitEventVo();
-                eventVo.setPersonName(obj.getPersonName());
-                eventVo.setPersonPhone(obj.getPersonPhone());
-                eventVo.setIdNo(obj.getIdNo());
-                eventVo.setPersonCompanyName(obj.getPersonCompanyName());
-                eventVo.setCarNo(obj.getCarNo());
-                eventVo.setBeVisitedPersonName(obj.getBeVisitedPersonName()+"-"+obj.getBeVisitedPersonOrg());
-                eventVo.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType()));
-                eventVo.setHappenTime(obj.getHappenTime());
-                voList.add(eventVo);
-            });
-        }
-        return voList;
+    public List<VisitEvent> findPageExcel(PageWrap<VisitEvent> pageWrap) {
+        IPage<VisitEvent> visitEventExcel = getDataInfo(pageWrap);
+        return newVisitEvent(visitEventExcel.getRecords());
     }
 
-    private IPage<VisitEventDTO> getDataInfo(PageWrap<VisitEvent> pageWrap) {
+    private IPage<VisitEvent> getDataInfo(PageWrap<VisitEvent> pageWrap) {
         //鏄惁鏄暟瀛�
         boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
         //鏄惁鍖呭惈涓枃
@@ -275,9 +260,7 @@
 
         IPage<VisitEvent> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<VisitEvent> queryWrapper = new MPJLambdaWrapper<>();
-        queryWrapper .leftJoin(Visits.class,Visits::getHkId,VisitEvent::getVisitorId);
-        queryWrapper.selectAll(VisitEvent.class)
-                .selectAs(Visits::getCompanyName,VisitEventDTO::getPersonCompanyName);
+        queryWrapper.selectAll(VisitEvent.class);
         queryWrapper.like(number,
                 VisitEvent::getPhone,
                 pageWrap.getModel().getKeyWords())
@@ -293,37 +276,36 @@
                 .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
                         VisitEvent::getEventType,
                         pageWrap.getModel().getEventType())
-                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
+                .ge(StringUtils.isNotBlank(pageWrap.getModel().getStartTime()),
                         VisitEvent::getHappenTime,
                         pageWrap.getModel().getStartTime())
-                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
+                .le(StringUtils.isNotBlank(pageWrap.getModel().getEndTime()),
                         VisitEvent::getHappenTime,
-                        pageWrap.getModel().getEndTime());
+                        pageWrap.getModel().getEndTime())
+                .eq(VisitEvent::getIsdeleted,Constants.ZERO);
         queryWrapper.orderByDesc(VisitEvent::getHappenTime);
-        IPage<VisitEventDTO> visitEventDTOIPage = visitEventJoinMapper.selectJoinPage(page, VisitEventDTO.class, queryWrapper);
+        IPage<VisitEvent> visitEventDTOIPage = visitEventJoinMapper.selectJoinPage(page, VisitEvent.class, queryWrapper);
         return visitEventDTOIPage;
     }
 
 
-    private List<VisitEventDTO> newVisitEvent(List<VisitEventDTO> VisitEventDTOList) {
+    private List<VisitEvent> newVisitEvent(List<VisitEvent> VisitEventDTOList) {
         List<String> codes = Arrays.asList(Constants.FTP_RESOURCE_PATH,Constants.MEMBER_IMG);
         List<SystemDictData> list = systemDictDataMapper.list(codes);
         Map<String,SystemDictData> dataMap = list.stream().collect(Collectors.toMap(SystemDictData::getLabel, Function.identity()));
-        List<VisitEventDTO> newDataList = new ArrayList<>();
         VisitEventDTOList.stream().forEach(obj->{
 
             if(StringUtils.isNotBlank( obj.getCaptureUrl())
                     && !obj.getCaptureUrl().startsWith(HKConstants.IMG_INDEX)
                     && !obj.getCaptureUrl().startsWith(HKConstants.IMG_INDEX_ERROR)) {
                 if(null != list && list.size() > 0) {
-                    obj.setCaptureUrl(dataMap.get(Constants.FTP_RESOURCE_PATH).getCode()
-                            +dataMap.get(Constants.MEMBER_IMG).getCode()
+                    obj.setCaptureUrlFull(dataMap.get(Constants.FTP_RESOURCE_PATH).getCode()
+                            +dataMap.get(Constants.VISIT_EVENT_IMG).getCode()
                             +obj.getCaptureUrl());
                 }
             }
-            obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())) ;
-            newDataList.add(obj);
+            obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())); ;
         });
-        return newDataList;
+        return  VisitEventDTOList;
     }
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index e42296e..8a1521d 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -476,7 +476,7 @@
     private void isValidBaseParam(Visits visits) {
         if(visits.getEndtime() == null
                 || visits.getStarttime() == null
-                ||  StringUtils.isBlank(visits.getReason())
+//                ||  StringUtils.isBlank(visits.getReason())
                 ||  StringUtils.isBlank( visits.getName())
                 ||  StringUtils.isBlank( visits.getPhone())
                 ||  visits.getIdcardType() == null
@@ -543,7 +543,11 @@
                 v.setIdcardDecode(Constants.getTuominStr(v.getIdcardNo()));//鑴辨晱韬唤璇佸彿
                 v.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, v.getIdcardNo()));//韬唤璇佸彿鍔犲瘑
                 v.setErpId(visits.getErpId());
+                v.setReceptMemberId(visits.getReceptMemberId());
+                v.setMemberNum(Constants.ZERO);
                 v.setHkStatus(Constants.ZERO);
+                v.setReason(visits.getReason());
+                v.setDoors(visits.getDoors());
                 v.setStatus(Constants.VisitStatus.submitCheck);
             }
             //鎵归噺鎻掑叆鏁版嵁
@@ -660,25 +664,28 @@
                 //鏍¢獙闅忚浜哄憳濉姤鏁版嵁鍚堟硶鎬�
                 isValidWithVisitParam(model,addList,editList);
                 model.setCreateDate(visits.getCreateDate());
-                getMemberListParam(model.getIdcardNo(),model,addList,editList);
+                Member visitsMember = getMemberListParam(model.getIdcardNo(),model,addList,editList);
+                model.setMemberId(visitsMember.getId());
             }
         }
 
-        if(CollectionUtils.isNotEmpty(addList)){
-            memberMapper.insertBatchSomeColumn(addList);
-        }
-        if(CollectionUtils.isNotEmpty(editList)){
-            editList.forEach(i->{
-                memberMapper.updateById(i);
-            });
-
-        }
+//        if(CollectionUtils.isNotEmpty(addList)){
+//            memberMapper.insertBatchSomeColumn(addList);
+//        }
+//        if(CollectionUtils.isNotEmpty(editList)){
+//            editList.forEach(i->{
+//                memberMapper.updateById(i);
+//            });
+//
+//        }
 
         return  m;
     }
 
     private Member getMemberListParam(String cardno, Visits visits, List<Member> addList, List<Member> editList) {
-        if(StringUtils.isNotBlank(visits.getCarNos())&&!Constants.checkCarNo(visits.getCarNos())){
+        if(!StringUtils.isNotBlank(visits.getCarNos())
+//                &&!Constants.checkCarNo(visits.getCarNos())
+        ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝杞︾墝鍙枫��"+visits.getCarNos()+"銆戜笉鍚堟硶锛岃鏍稿疄鍚庨噸璇晘");
         }
         if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&cardno.length()!=18
@@ -714,8 +721,9 @@
             member.setHkStatus(Constants.ZERO);
             member.setErpStatus(Constants.ZERO);
             member.setVisitCompanyName(visits.getCompanyName());
-            // 鏂板璁垮璁板綍
-            addList.add(member);
+            memberMapper.insert(member);
+            // 鏂板璁垮
+//            addList.add(member);
         }else{
             if(!Constants.equalsInteger(Constants.ZERO,member.getStatus() )){
                 //濡傛灉鐢ㄦ埛鐘舵�佸紓甯革紝鍒欐彁绀�
@@ -737,11 +745,13 @@
             member.setHkStatus(Constants.ZERO);
             member.setErpStatus(Constants.ZERO);
             member.setVisitCompanyName(visits.getCompanyName());
+            memberMapper.updateById(member);
             // 鏇存柊璁垮淇℃伅,
-            editList.add(member);
+//            editList.add(member);
         }
         //鏍规嵁鎵嬫満鍙峰拰韬唤璇佸彿鐮佹煡璇� 褰撳墠棰勭害鐨勬椂闂存槸鍚︿笌鍏朵粬棰勭害璁板綍鏈夊啿绐�
         if (visitsMapper.selectCount(new QueryWrapper<Visits>().lambda()
+                        .notIn(Visits::getStatus,Constants.VisitStatus.cancel,Constants.VisitStatus.cancel,Constants.VisitStatus.noPass,Constants.VisitStatus.xfFail)
                 .and(ms -> ms.eq(Visits::getPhone, visits.getPhone())
                         .or().eq(Visits::getIdcardDecode, Constants.getTuominStr(cardno)))
                 .and(ms -> ms.apply(" visits.STARTTIME <= '" + DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss") + "' and visits.ENDTIME >= '" + DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss") + "' ")
@@ -968,6 +978,7 @@
         MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
 
         queryWrapper.selectAll(Visits.class);
+        queryWrapper.select("  ( select count(distinct(v.CAR_NOS)) from visits v where v.PARENT_ID = t.ID and v.CAR_NOS is not null  and v.CAR_NOS != ''  and v.CAR_NOS != t.CAR_NOS ) as carNum  ");
         queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName);
         queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment);
         queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
@@ -983,6 +994,12 @@
         queryWrapper.isNull(Visits::getParentId);
         queryWrapper.orderByDesc(Visits::getCreateDate);
         IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
+
+        for (Visits visits:result.getRecords()) {
+            if(StringUtils.isNotBlank(visits.getCarNos())){
+                visits.setCarNum(visits.getCarNum() + Constants.ONE);
+            }
+        }
         return PageData.from(result);
     }
 
@@ -995,17 +1012,21 @@
 
     @Override
     public PageData<Visits> retentionPage(PageWrap<Visits> pageWrap) {
+        String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_WARNING).getCode();
         IPage<Visits> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
-
         queryWrapper.selectAll(Visits.class);
         queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName);
-        queryWrapper.select("TIMESTAMPDIFF(MINUTE,t.ENDTIME , NOW()) AS timeOut");
+        queryWrapper.select("TIMESTAMPDIFF( MINUTE, NOW(), t.ENDTIME) AS timeOut");
         queryWrapper.selectAs(Member::getType,Visits::getMemberType);
         queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment);
         queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.leftJoin(" member m on m.id=t.MEMBER_ID");
+
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getLevelStatus()),Visits::getStatus,Constants.VisitStatus.signin);
+
+        queryWrapper.apply(Objects.nonNull(pageWrap.getModel().getLevelStatus())," TIMESTAMPDIFF( MINUTE, NOW(), t.ENDTIME) <= "+code+"  ");
 
         queryWrapper.ne("m.type ",Constants.TWO);
         queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
@@ -1017,16 +1038,15 @@
                 .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Visits::getStatus,pageWrap.getModel().getStatus());
         queryWrapper.isNull(Visits::getOutDate);
         queryWrapper.orderByDesc(Visits::getEditDate);
-       String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_FREEZE).getCode();
         IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
         if(result!=null&&result.getRecords()!=null){
             result.getRecords().stream().forEach(s ->{
-                if(s.getTimeOut()>=Constants.ZERO){
-                    s.setOutStatus(Constants.ONE);
-                }else if(s.getTimeOut()<=Integer.valueOf(code)&&s.getTimeOut()>0){
+                if(s.getTimeOut()<=Integer.valueOf(code)&&s.getTimeOut()>=0){
                     s.setOutStatus(Constants.TWO);
-                }else{
+                }else if(s.getTimeOut()>Constants.ZERO){
                     s.setOutStatus(Constants.ZERO);
+                }else{
+                    s.setOutStatus(Constants.ONE);
                 }
 
             });
@@ -1121,4 +1141,18 @@
 
 
 
+    @Override
+    public void  visitLevel(Integer visitId){
+        Visits visits = visitsMapper.selectById(visitId);
+        if(Objects.isNull(visits)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!visits.getStatus().equals(Constants.VisitStatus.signin)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁垮璁板綍鐘舵�侀敊璇紝璇峰埛鏂伴噸璇�");
+        }
+        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout)
+                .eq(Visits::getId,visitId));
+
+    }
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
index df5556f..60d05d1 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
@@ -141,9 +141,9 @@
         model.setHkId(device.getPrivilegeGroupId());
         model.setName(device.getPrivilegeGroupName());
         model.setHkStatus(Constants.ONE);
-        model.setIsdeleted(Constants.ZERO);
+        model.setStatus(Constants.ONE);
         model.setIsDefault(device.getIsDefault());
-        model.setType(String.valueOf(Constants.ZERO));
+        model.setType(String.valueOf(Constants.ONE));
         return  model;
     }
 
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 fe0d178..d872e52 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
@@ -50,6 +50,8 @@
     @Autowired
     private CarsMapper carsMapper;
     @Autowired
+    private ParkBookMapper parkBookMapper;
+    @Autowired
     private DeviceEventMapper deviceEventMapper;
     @Autowired
     private MemberMapper memberMapper;
@@ -307,7 +309,9 @@
         EventVisitDataRequest model = request.getData();
         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){
@@ -319,9 +323,13 @@
                 //濡傛灉鏄瀹㈢櫥璁帮紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
                 retentionList.add(getRetentionModelByVisitRequest(visits,request));
                 //鏉ヨ鏃堕棿
-                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
+                updateVistis.setStatus(Constants.VisitStatus.signin);
+                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
+                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime()));
             }else {
                 //濡傛灉鏄瀹㈢绂讳簨浠�
+                updateVistis.setStatus(Constants.VisitStatus.signout);
+                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
                 updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime()));
                 updateVistis.setOutType(Constants.ZERO);
                 updateVistis.setOutInfo("璁垮姝e父绛剧");
@@ -341,7 +349,9 @@
         event.setVisitorCode(request.getData().getVisitorCode());
         event.setTimeout(request.getTimeout());
         event.setSvrIndexCode(request.getData().getSvrIndexCode());
+        event.setHappenTime(request.getHappenTime());
         event.setStatus(request.getStatus());
+        event.setEndTime(request.getData().getEndTime());
         event.setStartTime(request.getData().getStartTime());
         event.setSrcType(request.getSrcType());
         event.setSrcParentIndex(request.getSrcParentIndex());
@@ -350,8 +360,23 @@
         event.setSignOrg(request.getData().getSignOrg());
         event.setSex(request.getData().getSex());
         event.setPurpose(request.getData().getPurpose());
+        event.setPhone(request.getData().getPhone());
+        event.setBeVisitedPersonId(request.getData().getBeVisitedPersonId());
+        event.setBeVisitedPersonName(request.getData().getBeVisitedPersonName());
+        event.setBeVisitedPersonOrg(request.getData().getBeVisitedPersonOrg());
+        event.setBeVisitedPersonOrgId(request.getData().getBeVisitedPersonOrgId());
+        event.setVisitorWorkUint(request.getData().getVisitorWorkUint());
         event.setPhotoUrl(getHkImgUrl(request.getData().getPhotoUrl()));
         event.setPersonName(request.getData().getPersonName());
+        event.setCarNo(request.getData().getCarNo());
+        event.setCaptureUrl(request.getData().getCaptureUrl());
+        if(StringUtils.isNotBlank(request.getData().getCaptureUrl())){
+            event.setCaptureUrl(HKConstants.IMG_INDEX+request.getData().getCaptureUrl());
+        }
+        if(StringUtils.isNotBlank(request.getData().getPhotoUrl())){
+
+            event.setPhotoUrl(HKConstants.IMG_INDEX+request.getData().getPhotoUrl());
+        }
         event.setIdType(request.getData().getIdType());
         String idnum =request.getData().getIdNo();
         if(StringUtils.isNotBlank(idnum)){
@@ -362,8 +387,6 @@
         }
         event.setEventType(request.getEventType());
         event.setEventId(request.getEventId());
-        event.setHappenTime(event.getHappenTime());
-
         return event;
     }
 
@@ -409,16 +432,28 @@
             //闂ㄧ浜嬩欢闆嗗悎
             List<EventParkInfoRequest> events  = param.getParams().getEvents();
             List<CarEvent> list = new ArrayList<>();
+            List<Retention> retentionList = new ArrayList<>();
+            List<String> delRetentionList = new ArrayList<>();
             for(EventParkInfoRequest request : events){
                 if(request.getData() ==null ||StringUtils.isBlank(request.getData().getPlateNo())){
                     continue;
                 }
                 //灏佽浜嬩欢淇℃伅琛ㄥ璞�
-                list.add(getParkEventModelByRequest(request));
+                list.add(getParkEventModelByRequest(request,delRetentionList,retentionList));
             }
             if(list.size()>0){
                 //鎻掑叆闂ㄧ璁板綍
                 carEventMapper.insertBatchSomeColumn(list);
+            }
+            if(delRetentionList.size()>0){
+                //鍏堝垹闄ゅ師鏈夌殑鍦ㄥ満浜哄憳(鍐呴儴浜哄憳锛�
+                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
+                        .eq(Retention::getType,Constants.THREE)
+                        .in(Retention::getCarNo,delRetentionList));
+            }
+            if(retentionList.size()>0){
+                //鍐嶆彃鍏ユ渶鏂扮殑鍦ㄥ巶浜哄憳
+                retentionMapper.insertBatchSomeColumn(retentionList);
             }
             log.error("銆愭捣搴峰仠杞﹀満浜嬩欢鎺ㄩ�併��========鎴愬姛=======");
         }catch (Exception e){
@@ -434,7 +469,7 @@
      * @param request
      * @return
      */
-    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request) {
+    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request, List<String> delRetentionList , List<Retention> retentionList ) {
         CarEvent event = new CarEvent();
         event.setIsdeleted(Constants.ZERO);
         event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
@@ -488,18 +523,40 @@
             event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl()));
         }
         if(StringUtils.isNotBlank(event.getPlateNos())){
-                Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda()
-                        .eq(Cars::getCode,event.getPlateNos())
-                                .eq(Cars::getIsdeleted,Constants.ONE )
+                ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda()
+                        .eq(ParkBook::getCarCode,event.getPlateNos())
+                                .eq(ParkBook::getIsdeleted,Constants.ONE )
                         .last("limit 1" ));
                 if(cars!=null){
                     event.setMemberId(cars.getMemberId());
                 }
+
+            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
+                //濡傛灉鏄叆鍘傛斁琛�
+                delRetentionList.add(event.getPlateNos());
+                retentionList.add(getRetentionModelByParkRequest(request));
+            }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){
+                //濡傛灉鏄嚭鍦烘斁琛�
+                delRetentionList.add(event.getPlateNos());
+            }
         }
+
         return event;
 
     }
 
+    private Retention getRetentionModelByParkRequest(EventParkInfoRequest request) {
+        Retention retention = new Retention();
+        retention.setIsdeleted(Constants.ZERO);
+        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
+        retention.setCarNo(request.getData().getPlateNo());
+        retention.setType(Constants.THREE);
+//        retention.setDeviceName(request.getSrcName());
+//        retention.setDeviceIndex(request.getSrcIndex());
+
+        return retention;
+    }
+
     private void saveInterfaceLog(Object param, String path,String result) {
         InterfaceLog hkMonitoryLogDO=new InterfaceLog();
         hkMonitoryLogDO.setType(1);
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 02a711f..4a44285 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
@@ -180,8 +180,8 @@
             //浜鸿劯涓虹┖锛屼笉鑳借繘琛屾帹閫�
             return  null;
         }
-        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
-        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
+        request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
+        request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
         request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮�
         request.setVisitPurpose(c.getReason());
         request.setVisitorInfo(info);
@@ -248,6 +248,7 @@
         info.setVisitorWorkUnit(c.getCompanyName());
         info.setPhoneNo(c.getPhone());
         info.setPlateNo(c.getCarNos());
+        info.setGender(c.getSex()+"");
         if(Constants.equalsInteger(c.getIdcardType(),Constants.ZERO)){
             info.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
             info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
@@ -283,7 +284,7 @@
         MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper.selectAll(Visits.class);
         queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName)
-                .select("t1.hk_id as receptMemberHkId")
+                .selectAs(Member::getHkId,Visits::getReceptMemberHkId)
                 .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
         queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//瀹℃壒閫氳繃
                 .eq(Visits::getHkStatus,Constants.ZERO)//鏈悓姝ュ埌娴峰悍

--
Gitblit v1.9.3