From 9645ca1ea0ca880eff9bb0ba2138fad2b012f3e1 Mon Sep 17 00:00:00 2001
From: lishuai <260038442@qq.com>
Date: 星期一, 18 十二月 2023 17:30:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java             |    5 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java                               |   10 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java                               |   36 +
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java                                 |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java                      |   83 +++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java                 |  130 +++++
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java |    1 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java                          |   13 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java        |  172 +++++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java                               |    3 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java        |   82 +++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java                     |  132 ++---
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java                                   |  112 +++-
 server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DoorEventListResponse.java        |    2 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java                                  |    7 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentMDJResponse.java |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java           |    6 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                                    |   10 
 server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java                                   |  131 ++++++
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserDelRequest.java              |   13 
 server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/UserListRespone.java          |    5 
 server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java                                              |   11 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java           |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java                               |    3 
 server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java                                        |    5 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                      |   28 
 server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java                                         |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java          |  220 ++++++++++
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java                                    |   12 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java                                |   12 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java                                    |    3 
 31 files changed, 1,076 insertions(+), 179 deletions(-)

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 890a6af..355479e 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
@@ -87,4 +87,11 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(visitsService.findById(id));
     }
+
+    @ApiOperation("婊炵暀浜哄憳")
+    @PostMapping("/retentionPage")
+  //  @RequiresPermissions("business:visits:query")
+    public ApiResponse<PageData<Visits>> retentionPage (@RequestBody PageWrap<Visits> pageWrap) {
+        return ApiResponse.success(visitsService.retentionPage(pageWrap));
+    }
 }
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java b/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
index 3ad095e..8818ff7 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -3,6 +3,7 @@
 
 import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl;
 import com.doumee.service.business.impl.hksync.HkSyncOrgUserServiceImpl;
+import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -23,6 +24,8 @@
     private HkSyncImgServiceImpl hkSyncImgService;
     @Autowired
     private HkSyncOrgUserServiceImpl hkSyncOrgUserService;
+    @Autowired
+    private HkSyncVisitServiceImpl hkSyncVisitService;
     /**
      * 鏄惁寮�鍙戣��
      */
@@ -47,6 +50,14 @@
         hkSyncOrgUserService.syncOrgData();
     }
     /**
+     * 瀹氭椂鍚屾缁勭粐淇℃伅鍒版捣搴风郴缁�
+     * @throws Exception
+     */
+    @Scheduled(fixedDelay= 60*1000)
+    public void syncVisitData() {
+        hkSyncVisitService.syncVisitData();
+    }
+    /**
      * 瀹氭椂鍚屾鐢ㄦ埛淇℃伅鍒版捣搴风郴缁�
      * @throws Exception
      */
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
index 5f60374..e82c1a1 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
@@ -43,5 +43,8 @@
     private List<String> cardList;
     @ApiModelProperty(value = "鎺堟潈闂ㄧ缁勭紪鐮侀泦鍚�,銆愯瀹㈢銆戝敮涓�鏍囪瘑" )
     private Integer[] roleIds;
-
+    @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙寮�濮嬫椂闂达級锛屼负绌烘椂榛樿闀挎湡鏈夋晥锛屽2023-11-24 11:39:23"  )
+    private Date validStartTime;
+    @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙鎴鏃堕棿锛夛紝涓虹┖鏃堕粯璁ら暱鏈熸湁鏁堬紝濡�2023-11-24 11:39:23"  )
+    private Date validEndTime;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DoorEventListResponse.java b/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DoorEventListResponse.java
index 4acbb65..e8d7889 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DoorEventListResponse.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DoorEventListResponse.java
@@ -14,7 +14,7 @@
 public class DoorEventListResponse {
 
     @ApiModelProperty(value = "鍞竴鏍囪瘑" ,example = "1")
-    private Integer eventId;
+    private String eventId;
     @ApiModelProperty(value = "浜嬩欢绫诲瀷 0-浜鸿劯璁よ瘉閫氳繃锛�196893锛� 1-鍒峰崱璁よ瘉閫氳繃锛�198915锛�" )
     private String eventType;
     @ApiModelProperty(value = "鎬у埆 1-鐢� 2-濂�" ,example = "1")
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/UserListRespone.java b/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/UserListRespone.java
index 165f570..2b7159f 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/UserListRespone.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/UserListRespone.java
@@ -22,7 +22,7 @@
 @ApiModel("浜哄憳淇℃伅鍚屾杩斿洖淇℃伅")
 public class UserListRespone {
     @ApiModelProperty(value = "鍞竴鏍囪瘑" ,example = "1")
-    private Integer id;
+    private String id;
     @ApiModelProperty(value = "濮撳悕" )
     private String name;
     @ApiModelProperty(value = "韬唤璇佸彿" )
@@ -40,12 +40,11 @@
     @ApiModelProperty(value = "鏇存柊鏃堕棿,濡�2023-11-24 09:47:36")
     private Date editDate;
     @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�")
-    private String orgId;
+    private Integer orgId;
     @ApiModelProperty(value = "浜鸿劯鐓х墖鍦板潃,鍥剧墖鍏綉璁块棶鍦板潃")
     private String faceImg;
     @ApiModelProperty(value = "宸ュ彿")
     private String code;
-
     @ApiModelProperty(value = "鎵嬫満鍙�" , required = true)
     private String phone;
     @ApiModelProperty(value = "鍗″彿闆嗗悎" )
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 9d6d3c8..74a05c3 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
@@ -9,7 +9,8 @@
 public class HKConstants {
     public static final String IMG_INDEX ="HKIMG=" ;
     public static final String IMG_INDEX_ERROR ="HKIMG_ERROR=" ;
-    public static final String RES_INDEX = "DM_";
+    public static final String RES_ORG_INDEX = "DMO";
+    public static final String RES_USER_INDEX = "DMU";
     private Logger logger = LoggerFactory.getLogger(HKConstants.class);
     //娴峰悍骞冲彴鏍规嵁鐜板満鐜閰嶇疆http杩樻槸https
     public static final String RESPONSE_SUCCEE = "0";
@@ -102,6 +103,39 @@
         }
 
     }
+    public  enum ReturnCode {
+
+        PARK_LINE_IN("0x00072001", "璧勬簮淇℃伅涓嶅瓨鍦�"  )
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private String key;
+
+        // 鏋勯�犳柟娉�
+        ReturnCode(String key, String name ) {
+            this.name = name;
+            this.key = key;
+        }
+
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getKey() {
+            return key;
+        }
+
+        public void setKey(String key) {
+            this.key = key;
+        }
+
+    }
     /**
      * 椤旇壊鏋氫妇
      */
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserDelRequest.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserDelRequest.java
new file mode 100644
index 0000000..50b72ea
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserDelRequest.java
@@ -0,0 +1,13 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏂板璇锋眰鍙傛暟
+ */
+@Data
+public class UserDelRequest {
+    private String[]   personIds;//	string[]	True	浜哄憳Id锛屽崟娆℃搷浣滀笂闄愪负1000鏉°��    鑾峰彇浜哄憳鍒楄〃v2 鎺ュ彛鑾峰彇杩斿洖鍙傛暟personId
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java
index 2902311..dd1c680 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java
@@ -7,4 +7,5 @@
 
   private String clientId;//	number	False	璋冪敤鏂规寚瀹欼d
   private String  orgIndexCode;//	string	False	鏈嶅姟绔敓鎴愮殑鍞竴鏍囪瘑
+  private String personId;//	string	False	鏈嶅姟绔敓鎴愮殑鍞竴鏍囪瘑
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentVistorResponse.java b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentMDJResponse.java
similarity index 95%
rename from server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentVistorResponse.java
rename to server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentMDJResponse.java
index a611d64..65f7e11 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentVistorResponse.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentMDJResponse.java
@@ -3,7 +3,7 @@
 import lombok.Data;
 
 @Data
-public class VisitAppointmentVistorResponse {
+public class VisitAppointmentMDJResponse {
 
     private String   visitorName		;//string	False	璁垮濮撳悕锛屾敮鎸佷腑鑻辨枃瀛楃锛屼笉鑳藉寘鍚� 鈥� / \ : * ? " < >
     private String appointRecordId	;//	string	False 棰勭害璁板綍ID
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 d7ae35b..488cfb3 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
@@ -151,13 +151,13 @@
      *鎵归噺鍒犻櫎浜哄憳淇℃伅
      * @return
      */
-    public  static  BaseResponse<OrgOrUserAddFailureResponse>  delBatchUser(List<UserAddRequest> param){
+    public  static  BaseResponse<List<UserDelResponse>>  delBatchUser(UserDelRequest param){
         log.info("銆愭捣搴锋壒閲忔柊澧炰汉鍛樸��================寮�濮�===="+JSONObject.toJSONString(param));
         try {
             String res = HKTools.delBatchUser(JSONObject.toJSONString(param));
             TypeReference typeReference =
                     new TypeReference< BaseResponse<OrgOrUserAddFailureResponse>>(){};
-            BaseResponse<OrgOrUserAddFailureResponse> result = JSONObject.parseObject(res, typeReference.getType());
+            BaseResponse<List<UserDelResponse >> result = JSONObject.parseObject(res, typeReference.getType());
             logResult(result,"娴峰悍鎵归噺鏂板浜哄憳");
             return  result;
         }catch (Exception e){
@@ -446,13 +446,13 @@
      *璁垮鍏嶇櫥璁伴绾�
      * @return
      */
-    public  static  BaseResponse<VisitAppointmentVistorResponse>   visitAppiontmentMDJ(VisitAppointmentMDJRequest param){
+    public  static  BaseResponse<VisitAppointmentMDJResponse>   visitAppiontmentMDJ(VisitAppointmentMDJRequest param){
         log.info("銆愭捣搴疯瀹㈠厤鐧昏棰勭害銆�================寮�濮�===="+JSONObject.toJSONString(param));
         try {
             String res = HKTools.visitAppiontmentMDJ(JSONObject.toJSONString(param));
             TypeReference typeReference =
-                    new TypeReference< BaseResponse<VisitAppointmentVistorResponse> >(){};
-            BaseResponse<VisitAppointmentVistorResponse>   result = JSONObject.parseObject(res, typeReference.getType());
+                    new TypeReference< BaseResponse<VisitAppointmentMDJResponse> >(){};
+            BaseResponse<VisitAppointmentMDJResponse>   result = JSONObject.parseObject(res, typeReference.getType());
             logResult(result,"娴峰悍璁垮鍏嶇櫥璁伴绾�");
             return  result;
         }catch (Exception e){
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 4fe02c2..643d8cc 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
@@ -66,6 +66,8 @@
     public static  boolean DEALING_HK_IMG = false;
     public static  boolean DEALING_HK_ORG = false;
     public static  boolean DEALING_HK_USER = false;
+    public static  boolean DEALING_HK_VISIT = false;
+    public static  boolean DEALING_HK_EMPOWER = false;
     // ERP鎺ュ彛閰嶇疆
     public static final String ERP_CONFIG = "ERP_CONFIG";
     // ERP ACCESS_KEY
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
new file mode 100644
index 0000000..327f16c
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java
@@ -0,0 +1,131 @@
+package com.doumee.core.utils;
+
+import org.apache.commons.codec.binary.Base64;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class ImageBase64Util {
+
+    /**
+     * 灏嗗浘鐗囪浆鎹㈡垚Base64缂栫爜
+     * @param imgFile 寰呭鐞嗗浘鐗�
+     * @return
+     */
+    public static String getImgStr(String imgFile) {
+        // 灏嗗浘鐗囨枃浠惰浆鍖栦负瀛楄妭鏁扮粍瀛楃涓诧紝骞跺鍏惰繘琛孊ase64缂栫爜澶勭悊
+
+        InputStream in = null;
+        byte[] data = null;
+        // 璇诲彇鍥剧墖瀛楄妭鏁扮粍
+        try {
+            in = new FileInputStream(imgFile);
+            data = new byte[in.available()];
+            in.read(data);
+            in.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return Base64.encodeBase64String(data);
+    }
+
+    /**
+     * 瀵瑰瓧鑺傛暟缁勫瓧绗︿覆杩涜Base64瑙g爜骞剁敓鎴愬浘鐗�
+     * @param imgStr 鍥剧墖鏁版嵁
+     * @param imgFilePath 淇濆瓨鍥剧墖鍏ㄨ矾寰勫湴鍧�
+     * @return
+     */
+    public static boolean generateImage(String imgStr, String imgFilePath) {
+        //
+        if (imgStr == null) // 鍥惧儚鏁版嵁涓虹┖
+            return false;
+        BASE64Decoder decoder = new BASE64Decoder();
+        try {
+            // Base64瑙g爜
+            byte[] b = decoder.decodeBuffer(imgStr);
+            for (int i = 0; i < b.length; ++i) {
+                if (b[i] < 0) {// 璋冩暣寮傚父鏁版嵁
+                    b[i] += 256;
+                }
+            }
+            // 鐢熸垚jpg鍥剧墖
+            OutputStream out = new FileOutputStream(imgFilePath);
+            out.write(b);
+            out.flush();
+            out.close();
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+
+    /**
+     * 杩滅▼璇诲彇image杞崲涓築ase64瀛楃涓�
+     * @param imgUrl
+     * @return
+     */
+    public static String Image2Base64(String imgUrl) {
+        URL url = null;
+        InputStream is = null;
+        ByteArrayOutputStream outStream = null;
+        HttpURLConnection httpUrl = null;
+        try{
+            url = new URL(imgUrl);
+            httpUrl = (HttpURLConnection) url.openConnection();
+            httpUrl.connect();
+            httpUrl.getInputStream();
+            is = httpUrl.getInputStream();
+
+            outStream = new ByteArrayOutputStream();
+            //鍒涘缓涓�涓狟uffer瀛楃涓�
+            byte[] buffer = new byte[1024];
+            //姣忔璇诲彇鐨勫瓧绗︿覆闀垮害锛屽鏋滀负-1锛屼唬琛ㄥ叏閮ㄨ鍙栧畬姣�
+            int len = 0;
+            //浣跨敤涓�涓緭鍏ユ祦浠巄uffer閲屾妸鏁版嵁璇诲彇鍑烘潵
+            while( (len=is.read(buffer)) != -1 ){
+                //鐢ㄨ緭鍑烘祦寰�buffer閲屽啓鍏ユ暟鎹紝涓棿鍙傛暟浠h〃浠庡摢涓綅缃紑濮嬭锛宭en浠h〃璇诲彇鐨勯暱搴�
+                outStream.write(buffer, 0, len);
+            }
+            // 瀵瑰瓧鑺傛暟缁凚ase64缂栫爜
+            return new BASE64Encoder().encode(outStream.toByteArray());
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        finally{
+            if(is != null)
+            {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if(outStream != null)
+            {
+                try {
+                    outStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if(httpUrl != null)
+            {
+                httpUrl.disconnect();
+            }
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        String url= "http://doumeetest.oss-cn-beijing.aliyuncs.com/member/20210515/de923f81-b417-47fc-a702-472d60d7870a.png";// 寰呭鐞嗙殑鍥剧墖
+        String imgbese = Image2Base64(url);
+        System.out.println(imgbese);
+
+//        String url= "D:\\1.jpg";// 鏂扮敓鎴愮殑鍥剧墖
+//        generateImage(imgbese, url);
+    }
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
index 951d47b..8ef6f07 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.business.model.CarEvent;
 import com.doumee.dao.business.model.Member;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -28,5 +29,5 @@
     IPage<MemberInfoDTO> getPage(IPage<MemberInfoDTO> page, @Param(Constants.WRAPPER) Wrapper wrapper);
 
 
-
+    void insertBatchSomeColumn(List<Member> list);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
new file mode 100644
index 0000000..7b7548b
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Empower;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface EmpowerJoinMapper extends MPJJoinMapper<Empower> {
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
index 41e5093..a174a5c 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -22,95 +23,130 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private String creator;
 
-    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date createDate;
+
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private String edirot;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "棰勭害鏍囪瘑", example = "1")
-    @ExcelColumn(name="棰勭害鏍囪瘑")
     private String hkId;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "浜哄憳缂栫爜", example = "1")
-    @ExcelColumn(name="浜哄憳缂栫爜")
     private Integer memberId;
 
-    @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熷紑濮�")
-    @ExcelColumn(name="闂ㄧ鏈夋晥鏈熷紑濮�")
-    private Date startTime;
 
-    @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熺粨鏉�", example = "1")
-    @ExcelColumn(name="闂ㄧ鏈夋晥鏈熺粨鏉�")
-    private Date endTime;
 
     @ApiModelProperty(value = "瀵煎叆鐘舵��", example = "1")
-    @ExcelColumn(name="瀵煎叆鐘舵��")
     private Integer importStatus;
 
     @ApiModelProperty(value = "瀵煎叆澶囨敞")
-    @ExcelColumn(name="瀵煎叆澶囨敞")
     private String importInfo;
 
-    @ApiModelProperty(value = "涓嬪彂鐘舵�� 0寰呬笅鍙� 1宸蹭笅鍙� 2宸插彇娑�", example = "1")
-    @ExcelColumn(name="涓嬪彂鐘舵�� 0寰呬笅鍙� 1宸蹭笅鍙� 2宸插彇娑�")
-    private Integer sendStatus;
 
-    @ApiModelProperty(value = "涓嬪彂绫诲瀷 0瀹炴椂 1瀹氭椂 ", example = "1")
-    @ExcelColumn(name="涓嬪彂绫诲瀷 0瀹炴椂 1瀹氭椂 ")
-    private Integer sendType;
 
-    @ApiModelProperty(value = "涓嬪彂澶囨敞")
-    @ExcelColumn(name="涓嬪彂澶囨敞")
-    private String sendInfo;
 
-    @ApiModelProperty(value = "涓嬪彂鏃堕棿")
-    @ExcelColumn(name="涓嬪彂鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date sendDate;
 
     @ApiModelProperty(value = "涓嬪彂浜哄憳", example = "1")
-    @ExcelColumn(name="涓嬪彂浜哄憳")
     private Integer sendUserId;
 
     @ApiModelProperty(value = "鍙栨秷浜哄憳", example = "1")
-    @ExcelColumn(name="鍙栨秷浜哄憳")
     private Integer cancelUserId;
 
     @ApiModelProperty(value = "鍙栨秷鏃堕棿")
-    @ExcelColumn(name="鍙栨秷鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date cancelDate;
 
     @ApiModelProperty(value = "鍙栨秷澶囨敞")
-    @ExcelColumn(name="鍙栨秷澶囨敞")
     private String cANCElInfo;
 
+    @ApiModelProperty(value = "鎵�灞炲叕鍙哥紪鐮�")
+    @TableField(exist = false)
+    private String companyId;
+
+    @ApiModelProperty(value = "濮撳悕")
+    @ExcelColumn(name="濮撳悕",index = 1)
+    @TableField(exist = false)
+    private String memberName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    @ExcelColumn(name="鎵嬫満鍙�" ,index = 2)
+    @TableField(exist = false)
+    private String memberPhone;
+
+    @ApiModelProperty(value = "韬唤璇�")
+    @ExcelColumn(name="韬唤璇�",index= 3)
+    @TableField(exist = false)
+    private String memberidCard;
+
+    @ApiModelProperty(value = "鎵�灞炲叕鍙�")
+    @ExcelColumn(name="鎵�灞炲叕鍙�",index= 4)
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熷紑濮�")
+    @ExcelColumn(name="闂ㄧ鏈夋晥鏈熷紑濮�",index= 5,dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熺粨鏉�", example = "1")
+    @ExcelColumn(name="闂ㄧ鏈夋晥鏈熺粨鏉�",index= 6,dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",index= 7,dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鎿嶄綔浜�")
+    @ExcelColumn(name="鎿嶄綔浜�",index= 7)
+    @TableField(exist = false)
+    private String createrName;
+
+    @ApiModelProperty(value = "涓嬪彂鐘舵�� 0寰呬笅鍙� 1宸蹭笅鍙� 2宸插彇娑�", example = "1")
+    @ExcelColumn(name="涓嬪彂鐘舵��",index= 8,valueMapping ="0=寰呬笅鍙�;1=宸蹭笅鍙�;2=宸插彇娑�" )
+    private Integer sendStatus;
+
+    @ApiModelProperty(value = "涓嬪彂绫诲瀷 0瀹炴椂 1瀹氭椂 ", example = "1")
+    @ExcelColumn(name="涓嬪彂绫诲瀷",index= 9,valueMapping ="0=瀹炴椂;1=瀹氭椂" )
+    private Integer sendType;
+
+
+
+    @ApiModelProperty(value = "涓嬪彂鏃堕棿")
+    @ExcelColumn(name="涓嬪彂鏃堕棿",index= 10,dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date sendDate;
+
+    @ApiModelProperty(value = "涓嬪彂澶囨敞")
+    @ExcelColumn(name="涓嬪彂澶囨敞",index= 11)
+    private String sendInfo;
+
+    @ApiModelProperty(value = "涓嬪彂寮�濮嬫椂闂�")
+    @TableField(exist = false)
+    private String sendStartDate;
+    @ApiModelProperty(value = "涓嬪彂缁撴潫鏃堕棿")
+    @TableField(exist = false)
+    private String sendEndDate;
+
+    @ApiModelProperty(value = "鏃堕棿娈�0锛�7,30")
+    @TableField(exist = false)
+    private Integer timeDn;
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index de1a53f..2dd81ff 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -106,9 +106,9 @@
     @ExcelColumn(name="宸ュ彿")
     private String code;
 
-    @ApiModelProperty(value = "鐝")
-    @ExcelColumn(name="鐝")
-    private String classes;
+    @ApiModelProperty(value = "鐝 0鐧界彮 1澶滅彮")
+    @ExcelColumn(name="鐝 0鐧界彮 1澶滅彮")
+    private Integer classes;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤 2鎷夐粦/鍐荤粨", example = "1")
     @ExcelColumn(name="鐘舵�� 0姝e父 1绂佺敤 2鎷夐粦/鍐荤粨")
@@ -203,5 +203,7 @@
     @ApiModelProperty(value = "缁勭粐鍚嶇О")
     @TableField(exist = false)
     private String companyName;
-
+    @ApiModelProperty(value = "缁勭粐娴峰悍缂栫爜")
+    @TableField(exist = false)
+    private String companyHkId;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java
index 9b97e1d..7e9d836 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java
@@ -59,4 +59,16 @@
     @ExcelColumn(name="瑙掕壊缂栫爜锛堝叧鑱攄oor_role)")
     private String roleId;
 
+    @ApiModelProperty(value = "娴峰悍鏍囪瘑")
+    @ExcelColumn(name="娴峰悍鏍囪瘑")
+    private String hkId;
+
+    @ApiModelProperty(value = "娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
+    @ExcelColumn(name="娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
+    private Integer hkStatus;
+
+    @ApiModelProperty(value = "娴峰悍鏈�杩戝悓姝ユ椂闂�")
+    @ExcelColumn(name="娴峰悍鏈�杩戝悓姝ユ椂闂�")
+    private Date hkDate;
+
 }
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 62fb83f..984e2f4 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
@@ -95,7 +95,7 @@
 
     @ApiModelProperty(value = "鐝")
     @ExcelColumn(name="鐝")
-    private String classes;
+    private Integer classes;
     @ApiModelProperty(value = "娴峰悍闂ㄧ鍚嶇О")
     @ExcelColumn(name="娴峰悍闂ㄧ鍚嶇О")
     private String deviceName;
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 f9866dc..be60fde 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
@@ -218,8 +218,8 @@
     @ApiModelProperty(value = "鏅�氳瀹㈢敵璇烽殢璁夸汉鍛�")
     @TableField(exist = false)
     private List<Visits> withUserList;
-    @ApiModelProperty(value = "鐝")
-    private String memberClasses;
+//    @ApiModelProperty(value = "鐝")
+//    private String memberClasses;
 
     @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳", example = "1")
     @TableField(exist = false)
@@ -232,6 +232,10 @@
     @ExcelColumn(name="琚浜哄憳濮撳悕")
     @TableField(exist = false)
     private String receptMemberName;
+    @ApiModelProperty(value = "琚浜哄憳娴峰悍缂栫爜", example = "1")
+    @ExcelColumn(name="琚浜哄憳濮撳悕")
+    @TableField(exist = false)
+    private String receptMemberHkId;
 
     @ApiModelProperty(value = "琚浜哄憳閮ㄩ棬", example = "1")
     @ExcelColumn(name="琚浜哄憳閮ㄩ棬")
@@ -248,4 +252,8 @@
     @TableField(exist = false)
     private List<Visits> visitsList;
 
+    @ApiModelProperty(value = "瓒呮椂鏃堕暱", example = "1")
+    @TableField(exist = false)
+    private Integer timeOut;
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java
index 89b0912..7d6c554 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java
@@ -57,4 +57,7 @@
     void syncOrgData();
 
     void syncUserData();
+
+    void syncVisitData();
+    void syncEmpowerData();
 }
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 9ecbab1..0d0e2f9 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
@@ -19,6 +19,7 @@
      * @return Integer
      */
     Integer create(Visits visits);
+
     Integer createFk(Visits visits);
 
     /**
@@ -88,6 +89,8 @@
      */
     PageData<Visits> findPage(PageWrap<Visits> pageWrap);
 
+    PageData<Visits> retentionPage(PageWrap<Visits> pageWrap);
+
     /**
      * 鏉′欢缁熻
      *
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
index a5bceb9..d75a56b 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
@@ -2,19 +2,31 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Date;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.response.MemberInfoDTO;
 import com.doumee.dao.business.EmpowerMapper;
+import com.doumee.dao.business.join.EmpowerJoinMapper;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.Empower;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.EmpowerService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 浜哄憳鎺堟潈瀵煎叆璁板綍Service瀹炵幇
@@ -26,6 +38,10 @@
 
     @Autowired
     private EmpowerMapper empowerMapper;
+
+    @Autowired
+    private EmpowerJoinMapper empowerJoinMapper;
+
 
     @Override
     public Integer create(Empower empower) {
@@ -87,86 +103,46 @@
     @Override
     public PageData<Empower> findPage(PageWrap<Empower> pageWrap) {
         IPage<Empower> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<Empower> queryWrapper = new QueryWrapper<>();
-        Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(Empower::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(Empower::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(Empower::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(Empower::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEdirot() != null) {
-            queryWrapper.lambda().eq(Empower::getEdirot, pageWrap.getModel().getEdirot());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(Empower::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(Empower::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(Empower::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(Empower::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getHkId() != null) {
-            queryWrapper.lambda().eq(Empower::getHkId, pageWrap.getModel().getHkId());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(Empower::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getMemberId() != null) {
-            queryWrapper.lambda().eq(Empower::getMemberId, pageWrap.getModel().getMemberId());
-        }
-        if (pageWrap.getModel().getStartTime() != null) {
-            queryWrapper.lambda().eq(Empower::getStartTime, pageWrap.getModel().getStartTime());
-        }
-        if (pageWrap.getModel().getEndTime() != null) {
-            queryWrapper.lambda().eq(Empower::getEndTime, pageWrap.getModel().getEndTime());
-        }
-        if (pageWrap.getModel().getImportStatus() != null) {
-            queryWrapper.lambda().eq(Empower::getImportStatus, pageWrap.getModel().getImportStatus());
-        }
-        if (pageWrap.getModel().getImportInfo() != null) {
-            queryWrapper.lambda().eq(Empower::getImportInfo, pageWrap.getModel().getImportInfo());
-        }
-        if (pageWrap.getModel().getSendStatus() != null) {
-            queryWrapper.lambda().eq(Empower::getSendStatus, pageWrap.getModel().getSendStatus());
-        }
-        if (pageWrap.getModel().getSendType() != null) {
-            queryWrapper.lambda().eq(Empower::getSendType, pageWrap.getModel().getSendType());
-        }
-        if (pageWrap.getModel().getSendInfo() != null) {
-            queryWrapper.lambda().eq(Empower::getSendInfo, pageWrap.getModel().getSendInfo());
-        }
-        if (pageWrap.getModel().getSendDate() != null) {
-            queryWrapper.lambda().ge(Empower::getSendDate, Utils.Date.getStart(pageWrap.getModel().getSendDate()));
-            queryWrapper.lambda().le(Empower::getSendDate, Utils.Date.getEnd(pageWrap.getModel().getSendDate()));
-        }
-        if (pageWrap.getModel().getSendUserId() != null) {
-            queryWrapper.lambda().eq(Empower::getSendUserId, pageWrap.getModel().getSendUserId());
-        }
-        if (pageWrap.getModel().getCancelUserId() != null) {
-            queryWrapper.lambda().eq(Empower::getCancelUserId, pageWrap.getModel().getCancelUserId());
-        }
-        if (pageWrap.getModel().getCancelDate() != null) {
-            queryWrapper.lambda().ge(Empower::getCancelDate, Utils.Date.getStart(pageWrap.getModel().getCancelDate()));
-            queryWrapper.lambda().le(Empower::getCancelDate, Utils.Date.getEnd(pageWrap.getModel().getCancelDate()));
-        }
-        if (pageWrap.getModel().getCANCElInfo() != null) {
-            queryWrapper.lambda().eq(Empower::getCANCElInfo, pageWrap.getModel().getCANCElInfo());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>();
+
+        queryWrapper.selectAll(Empower.class);
+        queryWrapper.selectAs(Member::getName,Empower::getMemberName);
+        queryWrapper.selectAs(Member::getPhone,Empower::getMemberPhone);
+        queryWrapper.selectAs(Member::getIdcardNo,Empower::getMemberidCard);
+        queryWrapper.selectAs(Company::getName,Empower::getCompanyName);
+        queryWrapper.selectAs(SystemUser::getUsername,Empower::getCreaterName);
+        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId);
+        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Empower::getCreator);
+
+        queryWrapper.eq(Empower::getIsdeleted, Constants.ZERO)
+                .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
+                .or().like(Member::getPhone,pageWrap.getModel().getCompanyName()));
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getSendStatus()),Empower::getSendStatus,pageWrap.getModel().getSendStatus());
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCompanyId()),Company::getId,pageWrap.getModel().getCompanyId());
+        queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getSendStartDate()),Empower::getSendDate,pageWrap.getModel().getSendStartDate());
+        queryWrapper.le(Objects.nonNull(pageWrap.getModel().getSendEndDate()),Empower::getSendDate,pageWrap.getModel().getSendEndDate());
+
+        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
+        Calendar cal=Calendar.getInstance();
+        if(Objects.nonNull(pageWrap.getModel().getTimeDn())){
+            if(Constants.equalsInteger(pageWrap.getModel().getTimeDn(),0)){
+                String now=format.format(cal.getTime())+" :00:00:00";
+                queryWrapper.ge(Empower::getSendDate,now);
+            }
+            if(Constants.equalsInteger(pageWrap.getModel().getTimeDn(),7)){
+
+                cal.add(Calendar.DAY_OF_MONTH,-7);
+                queryWrapper.ge(Empower::getSendDate,cal.getTime());
+            }
+            if(Constants.equalsInteger(pageWrap.getModel().getTimeDn(),30)){
+                cal.add(Calendar.DAY_OF_MONTH,-30);
+                queryWrapper.ge(Empower::getSendDate,cal.getTime());
             }
         }
-        return PageData.from(empowerMapper.selectPage(page, queryWrapper));
+        queryWrapper.orderByDesc(Empower::getCreateDate);
+        IPage<Empower> result = empowerJoinMapper.selectJoinPage(page, Empower.class,queryWrapper);
+        return PageData.from(result);
     }
 
     @Override
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 9677c71..d962bf3 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
@@ -524,19 +524,23 @@
         if (!CollectionUtils.isEmpty(memberIPage.getRecords())){
             memberIPage.getRecords().forEach(s->s.setSex(IdcardUtil.getGenderByIdCard(s.getIdcardDecode())));
         }*/
-        IPage<MemberInfoDTO> memberIPage = memberMapper.getPage(pageWrap.toPage(),new QueryWrapper<MemberInfoDTO>()
-                .in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,"m.COMPANY_ID",pageWrap.getModel().getCompanyIds())
-                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),ms->ms.like("m.ohone",pageWrap.getModel().getKeyWords())
-                        .or().like("m.name",pageWrap.getModel().getKeyWords())
-                        .or().like("m.code",pageWrap.getModel().getKeyWords()))
-                .isNull(Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ZERO),"m.FACE_ID")
-                .isNotNull(Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ONE),"m.FACE_ID")
-                .eq(Objects.nonNull(pageWrap.getModel().getCanVisit()),"m.CAN_VISIT",pageWrap.getModel().getCanVisit())
-                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),"m.CAN_VISIT",pageWrap.getModel().getStatus())
-                .eq("m.ISDELETED",0)
-                .orderByDesc("m.CREATE_DATE")
-        );
+        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
 
+        queryWrapper.selectAll(Member.class);
+        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())
+                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),ms->ms.like(Member::getPhone,pageWrap.getModel().getKeyWords())
+                        .or().like(Member::getName,pageWrap.getModel().getKeyWords())
+                        .or().like(Member::getCode,pageWrap.getModel().getKeyWords()))
+                .isNull(Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ZERO),Member::getFaceId)
+                .isNotNull(Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ONE),Member::getFaceId)
+                .eq(Objects.nonNull(pageWrap.getModel().getCanVisit()),Member::getCanVisit,pageWrap.getModel().getCanVisit())
+                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Member::getCanVisit,pageWrap.getModel().getStatus())
+                .eq(Member::getIsdeleted,0)
+                .orderByDesc(Member::getCreateDate);
+
+        IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
         return PageData.from(memberIPage);
     }
 
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 af53c9d..1ba1259 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
@@ -3,7 +3,11 @@
 import cn.hutool.core.util.IdcardUtil;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.erp.ErpConstants;
 import com.doumee.core.erp.ErpTool;
+import com.doumee.core.erp.model.openapi.request.erp.ApproveAddRequest;
+import com.doumee.core.erp.model.openapi.request.erp.UserInfoRequest;
+import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.haikang.model.HKTools;
@@ -32,6 +36,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -40,6 +45,7 @@
 import org.springframework.util.DigestUtils;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 璁垮鐢宠淇℃伅琛⊿ervice瀹炵幇
@@ -86,7 +92,7 @@
         //鑾峰彇鐢宠鐨勬捣搴疯闂棬绂佺粍淇℃伅
         String[] hkIds = getHkDeviceRoles(visits);
         //妫�楠屾嫓璁夸汉鏄惁鍚堟硶
-        isValideVisitedUser(visits.getReceptMemberId());
+        Member visitMember = isValideVisitedUser(visits.getReceptMemberId());
         if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType()) &&!IdcardUtil.isValidCard(visits.getIdcardNo())){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿鐮佹湁璇紝璇锋牳瀹炲悗閲嶈瘯锛�");
         }
@@ -96,9 +102,9 @@
         //鍒濆鍖栬瀹俊鎭�
         initVisitInfo(visits,date);
         //鍙戣捣ERP瀹℃壒鐢宠
-        String erpid = startSendErpCheck(visits);
-        if(StringUtils.isNotBlank(erpid)){
-            visits.setErpId(erpid);
+        String erpId = startSendErpCheck(visits,visitMember);
+        if(StringUtils.isNotBlank(erpId)){
+            visits.setErpId(erpId);
         }else{
             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鍙戣捣鎷滆瀹℃壒鐢宠澶辫触锛�");
         }
@@ -196,9 +202,43 @@
         visits.setCreateDate(date);
     }
 
-    private String startSendErpCheck(Visits visits) {
-        //TODO ------------RK--------------
-//        ErpTool.submitApprove()
+    private String startSendErpCheck(Visits visits,Member visitMember) {
+        ApproveAddRequest param = new ApproveAddRequest();
+        List<Visits> withUserVisitsList = visits.getWithUserList();
+        List<UserInfoRequest> withUserList = new ArrayList<>();
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(withUserVisitsList)){
+            for (Visits v:withUserVisitsList) {
+                UserInfoRequest userInfoRequest = new UserInfoRequest();
+                userInfoRequest.setName(v.getName());
+                userInfoRequest.setIdNo(v.getIdcardNo());
+                userInfoRequest.setSex(v.getSex());
+                userInfoRequest.setPhone(v.getPhone());
+                userInfoRequest.setFaceImg(v.getFaceImg());
+                userInfoRequest.setHealthImg(v.getImgurl());
+                withUserList.add(userInfoRequest);
+            }
+            param.setWithUserList(withUserList);
+        }
+        param.setId(visits.getId());
+        param.setBeVisitedUserId(visitMember.getErpId());
+        param.setVisitorWorkUint(visits.getCompanyName());
+        param.setPurpose(visits.getReason());
+        param.setStartTime(DateUtil.getDate(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss"));
+        param.setEndTime(DateUtil.getDate(visits.getEndtime(),"yyyy-MM-dd HH:mm:ss"));
+        if(StringUtils.isNotBlank(visits.getCarNos())){
+            param.setCarNo(Arrays.asList(visits.getCarNos().split(",")));
+        }
+        if(StringUtils.isNotBlank(visits.getDoors())){
+             List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda().in(DeviceRole::getId,Arrays.asList(visits.getDoors().split(","))));
+             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceRoleList)){
+                 param.setRoleIds(deviceRoleList.stream().map(m->m.getId()).collect(Collectors.toList()));
+                 param.setRoleNames(deviceRoleList.stream().map(m->m.getName()).collect(Collectors.toList()));
+             }
+        }
+        ApproveInfoResponse response = ErpTool.submitApprove(ErpConstants.approveUrl,param);
+        if(!Objects.isNull(response)){
+            return response.getId().toString();
+        }
         return  null;
     }
 
@@ -525,4 +565,33 @@
         QueryWrapper<Visits> wrapper = new QueryWrapper<>(visits);
         return visitsMapper.selectCount(wrapper);
     }
+
+
+    @Override
+    public PageData<Visits> retentionPage(PageWrap<Visits> pageWrap) {
+        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.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.eq(Visits::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Visits::getType,pageWrap.getModel().getType());
+        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Visits::getPhone,pageWrap.getModel().getName())
+                .or().like(Visits::getPhone,pageWrap.getModel().getName()))
+                .eq(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Visits::getIdcardNo,StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()))
+                .eq(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Visits::getCompanyName,pageWrap.getModel().getCompanyName())
+                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Visits::getStatus,pageWrap.getModel().getStatus());
+        queryWrapper.isNull(Visits::getOutDate);
+        queryWrapper.orderByDesc(Visits::getEditDate);
+        IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
+
+        return PageData.from(result);
+    }
+
 }
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 88c30a0..8dd1de3 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
@@ -251,17 +251,127 @@
         return  null;
     }
 
+
+
+
     /**
      * 鍚屾ERP浜哄憳淇℃伅
      * @param param
      * @return
      */
     @Override
-    public    String syncUsers(UserListRequest param){
-        //TODO----------------RK------------------
-        List<UserListRespone>  allList = ErpTool.getErpUserList(ErpConstants.userListUrl,param);
+    public  String syncUsers(UserListRequest param){
+        List<UserListRespone>  list = ErpTool.getErpUserList(ErpConstants.userListUrl,param);
+        if(list !=null && list.size()>0) {
+            List<Member> addList = new ArrayList<>();
+            List<Member> updateList = new ArrayList<>();
+            List<Integer> delIds = new ArrayList<>(); 
+            List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .eq(Member::getType, Constants.memberType.internal));
+            dealUserChangeList(list,addList,updateList,delIds,allList);
+
+            if(addList.size()>0){
+                memberMapper.insertBatchSomeColumn(addList);
+            }
+            if(updateList.size()>0){
+                for(Member c : updateList){
+                    memberMapper.updateById(c);
+                }
+            }
+            if(delIds.size()>0){
+                //鍒犻櫎鎵�鏈夐渶瑕佸垹闄ょ殑缁勭粐淇℃伅(閫昏緫鍒犻櫎锛�
+                memberMapper.update(null,new UpdateWrapper<Member>().lambda().set(Member::getHkStatus,Constants.ZERO)
+                        .set(Member::getIsdeleted, Constants.ONE).in(Member::getId,delIds));
+            }
+
+        }else{
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾ERP鏁版嵁涓虹┖锛�");
+        }
         return  null;
     }
+
+    private void dealUserChangeList(List<UserListRespone> list, List<Member> addList, List<Member> updateList, List<Integer> delIds, List<Member> allList) {
+        Date date = new Date();
+        for(UserListRespone response : list){
+            //鏍规嵁 erpId 鏌ヨ鐢ㄦ埛淇℃伅锛屽垽鏂槸鏂板杩樻槸鏇存柊
+            Member member = findUserByERPId(allList,response.getId());
+            if(member == null){
+                //濡傛灉鏄柊澧�
+                if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){
+                    continue;
+                }
+                //灏佽鏂板缁勭粐瀵硅薄鏁版嵁
+                addList.add(getAddMemberModel(response,date));
+            }else{
+                //濡傛灉鏄洿鏂�
+                if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){
+                    //濡傛灉宸插垹闄わ紝鍔犲叆鍒犻櫎闆嗗悎涓�
+                    delIds.add(member.getId());
+                    continue;
+                }
+                updateList.add(addUpdateMemberModel(response,member,date));
+            }
+        }
+        if(allList!=null && allList.size()>0){
+            for(Member  c : allList){
+                if(isUserDeleted(c,list)){
+                    delIds.add(c.getId());
+                }
+            }
+        }
+    }
+
+    private Member getAddMemberModel(UserListRespone param, Date date) {
+        Member member = new Member();
+        BeanUtils.copyProperties(param,member);
+        member.setCreateDate(new Date());
+        member.setHkStatus(Constants.ZERO);
+        member.setErpStatus(Constants.ONE);
+        member.setErpDate(new Date());
+        member.setErpId(param.getId());
+        member.setFsStatus(Constants.ZERO);
+        member.setType(Constants.memberType.internal);
+        String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
+        member.setIdcardNo(encryptIdNo);
+        member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
+        member.setCompanyId(param.getOrgId());
+        member.setHkStatus(Constants.ZERO);
+        return  member;
+    }
+
+    private Member addUpdateMemberModel(UserListRespone param,Member member,Date date) {
+        BeanUtils.copyProperties(param,member);
+        String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
+        member.setIdcardNo(encryptIdNo);
+        member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
+        member.setCompanyId(param.getOrgId());
+        member.setEditDate(new Date());
+        member.setErpDate(new Date());
+        member.setHkStatus(Constants.ZERO);
+        return  member;
+    }
+
+    private boolean isUserDeleted(Member c, List<UserListRespone> list) {
+        for(UserListRespone m : list){
+            if(StringUtils.equals(c.getErpId(),m.getId().toString())){
+                return  true;
+            }
+        }
+        return false;
+    }
+
+    private Member findUserByERPId(List<Member> allList, String id) {
+        if(allList!=null){
+            for(Member com :allList){
+                if(StringUtils.equals(com.getErpId(),id)){
+                    return com;
+                }
+            }
+        }
+        return  null;
+    }
+
 
 
     /**
@@ -572,21 +682,29 @@
             Company company = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,param.getId()).last("limit 1"));
             if(Objects.isNull(company)){
                 company = new Company();
-                BeanUtils.copyProperties(param,company);
+//                BeanUtils.copyProperties(param,company);
                 company.setId(null);
                 company.setCreateDate(new Date());
                 company.setHkStatus(Constants.ZERO);
                 company.setErpStatus(Constants.ONE);
                 company.setErpDate(new Date());
                 company.setErpId(param.getId());
+                company.setErpParentId(param.getParentId());
                 company.setFsStatus(Constants.ZERO);
                 company.setType(Constants.ONE);
+                company.setLinkName(param.getLinkName());
+                company.setLinkPhone(param.getLinkPhone());
                 companyMapper.insert(company);
                 //TODO 娴峰悍鏁版嵁鍒涘缓
             }else{
-                BeanUtils.copyProperties(param,company);
+//                BeanUtils.copyProperties(param,company);
                 company.setEditDate(new Date());
+                company.setErpId(param.getId());
+                company.setHkStatus(Constants.ZERO);
                 company.setErpDate(new Date());
+                company.setErpParentId(param.getParentId());
+                company.setLinkName(param.getLinkName());
+                company.setLinkPhone(param.getLinkPhone());
                 companyMapper.updateById(company);
                 //TODO 娴峰悍鏁版嵁鏇存柊
             }
@@ -632,7 +750,6 @@
                 member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                 member.setCompanyId(param.getOrgId());
                 memberMapper.insert(member);
-
                 //TODO 娴峰悍鏁版嵁鍒涘缓
             }else{
                 BeanUtils.copyProperties(param,member);
@@ -711,6 +828,7 @@
                 visitsList.forEach(i->{
                     i.setStatus(param.getStatus().equals(Constants.ZERO)?Constants.VisitStatus.pass:Constants.VisitStatus.noPass);
                     i.setEndCheckDate(DateUtil.StringToDate(param.getApproveDate(),"yyyy-MM-dd HH:mm:ss"));
+                    i.setHkStatus(Constants.ZERO);
                     visitsMapper.updateById(i);
                 });
             }
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 5e03224..e243cd2 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
@@ -79,5 +79,11 @@
     @Override
     public  void syncOrgData( ){
     }
+    @Override
+    public  void  syncVisitData() {
+    }
+    @Override
+    public  void syncEmpowerData() {
+    }
 
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
new file mode 100644
index 0000000..2e89198
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -0,0 +1,82 @@
+package com.doumee.service.business.impl.hksync;
+
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest;
+import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.join.EmpowerJoinMapper;
+import com.doumee.dao.business.join.VisitsJoinMapper;
+import com.doumee.dao.business.model.Empower;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Visits;
+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 java.util.Date;
+import java.util.List;
+
+/**
+ * 娴峰悍闂ㄧ鎺堟潈涓氬姟Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+@Slf4j
+public class HkSyncEmpowerServiceImpl extends HkSyncBaseServiceImpl {
+    @Autowired
+    private EmpowerJoinMapper empowerJoinMapper;
+
+    /**
+     * 鍚屾娴峰悍缁勭粐淇℃伅,鏍规嵁erp鍚屾缁勭粐缁撴灉锛屽畾鏃舵鏌ラ渶瑕佷笅鍙戝埌娴峰悍鐨勭粍缁囦俊鎭�
+     */
+    @Override
+    public  void syncEmpowerData(){
+        if(Constants.DEALING_HK_EMPOWER){
+            return   ;
+        }
+        Constants.DEALING_HK_EMPOWER =true;
+        try {
+            //鏌ヨ鎵�鏈夐渶瑕佸悓姝ョ殑浼佷笟鏁版嵁
+
+            MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>();
+            queryWrapper.selectAll(Empower.class);
+            queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName)
+                        .select("t1.hk_id as receptMemberHkId")
+                        .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
+            queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//瀹℃壒閫氳繃
+                    .eq(Visits::getHkStatus,Constants.ZERO)//鏈悓姝ュ埌娴峰悍
+                    .orderByAsc(Visits::getCreateDate);
+            List<Empower> list = empowerJoinMapper.selectJoinList(Empower.class,queryWrapper);
+            if(list ==null || list.size()==0){
+                return;
+            }
+            Date date = new Date();
+            for(Empower c : list) {
+                //鍒犻櫎鐨勬暟鎹紝杩涜鍒犻櫎
+                VisitAppointmentRequest request = new VisitAppointmentRequest();
+                BaseResponse<VisitAppointmentResponse> response = HKService.visitAppiontment(request);
+                if (response != null
+                        && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
+                        &&response.getData()!=null
+                        &&StringUtils.isNotBlank(response.getData().getAppointRecordId())) {
+                    //娴峰悍涓嬪彂鎴愬姛
+                    c.setHkId( response.getData().getAppointRecordId());//棰勭害鏍囪瘑
+                } else {
+                    //娴峰悍涓嬪彂鎴愬姛
+                }
+                empowerJoinMapper.updateById(c);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            Constants.DEALING_HK_EMPOWER =false;
+        }
+    }
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
index 9aea7de..6f4a268 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -4,26 +4,28 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.erp.model.openapi.request.erp.UserFailRequest;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.HKTools;
 import com.doumee.core.haikang.model.param.BaseResponse;
-import com.doumee.core.haikang.model.param.request.OrgAddRequest;
-import com.doumee.core.haikang.model.param.request.OrgDelRequest;
-import com.doumee.core.haikang.model.param.request.ParkListRequest;
-import com.doumee.core.haikang.model.param.respose.OrgOrUserAddResponse;
-import com.doumee.core.haikang.model.param.respose.OrgOrUserAddSuccessResponse;
-import com.doumee.core.haikang.model.param.respose.OrgUpdateFailureResponse;
-import com.doumee.core.haikang.model.param.respose.ParkListResponse;
+import com.doumee.core.haikang.model.param.request.*;
+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.DateUtil;
+import com.doumee.core.utils.ImageBase64Util;
 import com.doumee.dao.business.CompanyMapper;
+import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.ParksMapper;
 import com.doumee.dao.business.join.CompanyJoinMapper;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Parks;
+import com.doumee.service.business.ERPSyncService;
 import com.github.yulichang.query.MPJQueryWrapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,21 +37,24 @@
 import java.util.UUID;
 
 /**
- * 娴峰悍鍋滆溅搴撳悓姝ervice瀹炵幇
+ * 娴峰悍缁勭粐浜哄憳閫氳繃姝ervice瀹炵幇
  * @author 姹熻箘韫�
  * @date 2023/11/30 15:33
  */
 @Service
+@Slf4j
 public class HkSyncOrgUserServiceImpl extends HkSyncBaseServiceImpl {
-
     @Autowired
     private CompanyMapper companyMapper;
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
+    private ERPSyncService erpSyncService;
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
     /**
-     * 鍚屾娴峰悍缁勭粐淇℃伅
-     * @return
+     * 鍚屾娴峰悍缁勭粐淇℃伅,鏍规嵁erp鍚屾缁勭粐缁撴灉锛屽畾鏃舵鏌ラ渶瑕佷笅鍙戝埌娴峰悍鐨勭粍缁囦俊鎭�
      */
     @Override
     public   void syncOrgData(){
@@ -64,7 +69,7 @@
                     .select("*,(select b.hk_id from company b where company.erp_parent_id = b.id limit 1) as hkParentId")
                     .lambda()
                     .eq(Company::getHkStatus,Constants.ZERO)
-                    .orderByDesc(Company::getErpDate));
+                    .orderByAsc(Company::getErpDate));
             if(list ==null || list.size()==0){
                 return;
             }
@@ -124,6 +129,7 @@
      */
     private void doHkAddOrg(List<Company> updateList, List<OrgAddRequest> addList) {
         Date date = new Date();
+
         BaseResponse<OrgOrUserAddResponse> result =  HKService.addBatchOrg(addList);
         if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
             OrgOrUserAddResponse data = result.getData();
@@ -156,10 +162,10 @@
 
     private OrgAddRequest getOrgAddModel(Company c,String rootOrgId) {
         OrgAddRequest model = new OrgAddRequest();
-        model.setOrgIndexCode(HKConstants.RES_INDEX+UUID.randomUUID().toString());
+        model.setOrgIndexCode(HKConstants.RES_ORG_INDEX+UUID.randomUUID().toString().replace("-",""));
         model.setOrgName(c.getName());
-        model.setOrgCode(c.getCode());
-        model.setOrgIndexCode(c.getHkParentId());
+//        model.setOrgCode(c.getCode());
+        model.setParentIndexCode(c.getHkParentId());
         return  model;
 
     }
@@ -170,14 +176,20 @@
      * @param date
      */
     private void doHkDeleteOrg(List<Integer> delIds,List<String> delHkIds,  Date date) {
+       if(delHkIds.size() == 0){
+           return;
+       }
         OrgDelRequest request = new OrgDelRequest();
-        request.setIndexCodes((String[]) delHkIds.toArray());
+        request.setIndexCodes( delHkIds.toArray(new String[]{}));
         BaseResponse<List<OrgUpdateFailureResponse>> result =  HKService.delBatchOrg(request);
         if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
             List<String> fIds = new ArrayList<>();
             if(result.getData()!=null){
                 for(OrgUpdateFailureResponse r : result.getData()){
-                    fIds.add(r.getOrgIndexCode());//鍒犻櫎澶辫触鐨勬暟鎹泦鍚�
+                    if(!r.getCode().equals("0x00072001")){
+                        //涓嶅瓨鍦ㄧ殑涔熺畻鍒犻櫎鎴愬姛
+                        fIds.add(r.getOrgIndexCode());//鍒犻櫎澶辫触鐨勬暟鎹泦鍚�
+                    }
                 }
             }
             //鏍囪鍒犻櫎鎴愬姛鐨勬暟鎹紙娴峰悍瀵规帴鐘舵�佷负宸插悓姝ワ紝锛屽悓姝ュけ璐ョ殑浠嶄负寰呭悓姝ワ紝绛変笅涓�娆$户缁鐞嗭紝鐭ラ亾鍏ㄩ儴鍒犻櫎瀹屾瘯锛�
@@ -195,7 +207,133 @@
      */
     @Override
     public   void syncUserData(){
+        if(Constants.DEALING_HK_USER){
+            return   ;
+        }
+        Constants.DEALING_HK_USER =true;
+        try {
+            //鏌ヨ鎵�鏈夐渶瑕佸悓姝ョ殑浼佷笟鏁版嵁
+            List<Member> list = memberMapper.selectList(new QueryWrapper<Member>()
+                    .lambda()
+                    .eq(Member::getHkStatus,Constants.ZERO)
+                    .orderByAsc(Member::getErpDate));
+            if(list ==null || list.size()==0){
+                return;
+            }
+            Date date = new Date();
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+            for(Member c : list){
+                if( c.getCompanyId() == null){
+                    //濡傛灉娌℃湁缁勭粐涓嶅仛澶勭悊
+                    continue;
+                }
+                UserAddRequest  addHkModel = new UserAddRequest();
+                if(StringUtils.isBlank(c.getHkId())){
+                    //濡傛灉鏂板鍚屾鏁告摎
+                    if(Constants.equalsInteger(Constants.ONE,c.getIsdeleted())){
+                        //鍒犻櫎鐨勭粍缁囷紝涓嶅仛澶勭悊,娴峰悍鐘舵�佹洿鏂颁负涓嶅鐞嗭紝涓嬫涓嶅啀澶勭悊杩欎釜璁板綍
+                        c.setHkStatus(Constants.TWO);
+                        memberMapper.updateById(c);
+                        continue ;
+                    }
+                    addHkModel = getUserAddModel(c,path);
+                    c.setHkId(addHkModel.getPersonId());
+                }else{
+                    //鍒犻櫎娴峰悍鍘熸湁鐨勬暟鎹紝鍐嶆柊澧炵粍缁�
+                    addHkModel = getUserAddModel(c,path);
+                    c.setHkId(addHkModel.getPersonId());
+                }
+                if(addHkModel == null){
+                    //濡傛灉浜鸿劯鏁版嵁涓嶆纭紝涓嬭浇澶辫触绛夊師鍥�
+                    noticeErpFail(c,Constants.ZERO,"浜鸿劯鐓х墖涓嶅瓨鍦紝鑾峰彇澶辫触锛�");
+                    continue;
+                }
+                //澶勭悊鍒犻櫎鏁版嵁锛堝垹闄や箣鍓嶄笅鍙戠殑娴峰悍浜哄憳淇℃伅锛岀劧鍚庢柊澧烇級
+                doHkDeleteUser(c.getId(),c.getHkId(),date);
+                //澶勭悊鏂板鏁版嵁
+                BaseResponse<UserAddResponse> result =  HKService.addUser(addHkModel);
+                if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
+                    c.setFaceId(result.getData().getFaceId());
+                    memberMapper.updateById(c);
+                }else{
+                    noticeErpFail(c,Constants.ZERO,"浜哄憳淇℃伅鍚屾瀹夐槻骞冲彴澶辫触锛岃淇鍚庨噸璇曪紒"+result.getCode()+result.getMsg());
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            Constants.DEALING_HK_USER =false;
+        }
+    }
+
+    /**
+     * 閫氱煡erp绯荤粺锛屼汉鍛樹笅鍙戝悓姝ヤ俊鎭姸鎬佸け璐�
+     * @param c
+     * @param type
+     * @param s
+     */
+    private void noticeErpFail(Member c, int type, String s) {
+        UserFailRequest r = new UserFailRequest();
+        r.setUserId(c.getErpId());
+        r.setInfo(s);
+        r.setType(type);
+        //閫氱煡ERP浜鸿劯鏁版嵁涓嶆纭�
+        erpSyncService.noticeUserFail(r);
+    }
+
+    /**
+     * 瀵规捣搴峰垹闄ょ粍缁囦俊鎭�
+     * @param id
+     * @param date
+     */
+    private void doHkDeleteUser(Integer  id,String delHkIds,  Date date) {
+        if(StringUtils.isBlank(delHkIds)){
+            return;
+        }
+        UserDelRequest request = new UserDelRequest();
+        request.setPersonIds(new String[]{delHkIds});
+        BaseResponse<List<UserDelResponse>> result =  HKService.delBatchUser(request);
+        if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
+            List<String> fIds = new ArrayList<>();
+            if(result.getData()!=null && result.getData().size()>0){
+                log.info("娴峰悍鍒犻櫎鐢ㄦ埛澶辫触锛�==============="+result.getData().get(0).getPersonId());
+               /*   for(UserDelResponse r : result.getData()){
+                  if(!r.getCode().equals("0x00072001")){
+                        //涓嶅瓨鍦ㄧ殑涔熺畻鍒犻櫎鎴愬姛
+                         fIds.add(r.getPersonId());//鍒犻櫎澶辫触鐨勬暟鎹泦鍚�
+                    }
+                }}*/
+            }else{
+                //鏍囪鍒犻櫎鎴愬姛鐨勬暟鎹紙娴峰悍瀵规帴鐘舵�佷负宸插悓姝ワ紝锛屽悓姝ュけ璐ョ殑浠嶄负寰呭悓姝ワ紝绛変笅涓�娆$户缁鐞嗭紝鐭ラ亾鍏ㄩ儴鍒犻櫎瀹屾瘯锛�
+                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
+                        .set(Company::getHkStatus,Constants.ONE)
+                        .set(Company::getHkDate,date)
+                        .in(Company::getId, id));
+            }
+        }
+    }
+
+    private UserAddRequest getUserAddModel(Member c,String path) {
+        UserAddRequest model = new UserAddRequest();
+        model.setOrgIndexCode(c.getCompanyHkId());
+        model.setPersonId(HKConstants.RES_USER_INDEX+UUID.randomUUID().toString().replace("-", ""));
+        model.setGender(Constants.formatIntegerNum(c.getSex())+"");
+        model.setPersonName(c.getName());
+        if(StringUtils.isNotBlank(c.getFaceImg())){
+            model.setFaces(new ArrayList<>());
+            UserAddFaceRequest face = new UserAddFaceRequest();
+            String imageBase = ImageBase64Util.Image2Base64(path+c.getFaceImg());
+            if(face.getFaceData() == null){
+                //浜鸿劯鏁版嵁涓嶆纭紝
+                return  null;
+            }
+            model.getFaces().add(face);
+
+        }
+        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 c8884e4..144216f 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
@@ -368,7 +368,7 @@
         Retention retention = new Retention();
         retention.setIsdeleted(Constants.ZERO);
         retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
-        retention.setClasses(visits.getMemberClasses());
+        retention.setClasses(visits.getClasses());
         retention.setCode(visits.getCode());
         retention.setIdcardNo(visits.getIdcardNo());
         retention.setIdcardDecode(visits.getIdcardDecode());
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
new file mode 100644
index 0000000..b9aa525
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -0,0 +1,220 @@
+package com.doumee.service.business.impl.hksync;
+
+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.core.erp.model.openapi.request.erp.UserFailRequest;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.*;
+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.DateUtil;
+import com.doumee.core.utils.ImageBase64Util;
+import com.doumee.dao.business.CompanyMapper;
+import com.doumee.dao.business.DeviceRoleMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.VisitsMapper;
+import com.doumee.dao.business.join.VisitsJoinMapper;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.DeviceRole;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Visits;
+import com.doumee.service.business.ERPSyncService;
+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 java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 娴峰悍璁垮涓氬姟Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+@Slf4j
+public class HkSyncVisitServiceImpl extends HkSyncBaseServiceImpl {
+    @Autowired
+    private VisitsJoinMapper visitsMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private DeviceRoleMapper deviceRoleMapper;
+
+    /**
+     * 鍚屾娴峰悍缁勭粐淇℃伅,鏍规嵁erp鍚屾缁勭粐缁撴灉锛屽畾鏃舵鏌ラ渶瑕佷笅鍙戝埌娴峰悍鐨勭粍缁囦俊鎭�
+     */
+    @Override
+    public  void syncVisitData(){
+        if(Constants.DEALING_HK_VISIT){
+            return   ;
+        }
+        Constants.DEALING_HK_VISIT =true;
+        List<DeviceRole> roleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+                .eq(DeviceRole::getType, Constants.ONE));
+        //鏍囪鏄惁璧板厤鐧昏棰勭害
+        String applyType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_VISIT_REQUIRED).getCode();
+        String applyLwType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_LW_REQUIRED).getCode();
+        try {
+            //鏌ヨ鎵�鏈夐渶瑕佸悓姝ョ殑鏁版嵁
+            List<Visits> alllist = getVisitList();
+            //鎸夌収鐖剁骇鐢宠鍒嗘壒澶勭悊姣忔鐢宠鏁版嵁
+            List<Visits> list = getParentList(alllist);
+            if(list ==null || list.size()==0){
+                return;
+            }
+            Date date = new Date();
+            for(Visits c : list) {
+                //鍙戣捣娴峰悍棰勭害鎺ュ彛锛堥渶瑕佺櫥璁帮級锛屾牴鎹绾﹁繑鍥炴帴鍙e皝瑁呯敵璇疯褰曟洿鏂板瓧娈�
+                String type = Constants.equalsInteger(c.getType(),Constants.ONE)?applyType:applyLwType;
+                getUpdateModelByResponse(c,date,type,roleList);
+                visitsMapper.updateById(c);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            Constants.DEALING_HK_VISIT =false;
+        }
+    }
+
+    private List<Visits> getParentList(List<Visits> alllist) {
+        if(alllist ==null || alllist.size()==0){
+            return null;
+        }
+        List<Visits> list = new ArrayList<>();
+
+        for (Visits v : alllist){
+            if(v.getParentId() == null){
+                v.setVisitsList(getChildListByParentId(v.getId(),alllist));
+                list.add(v);
+            }
+        }
+        return  list;
+    }
+
+    private List<Visits> getChildListByParentId(Integer id, List<Visits> alllist) {
+
+        List<Visits> list = new ArrayList<>();
+
+        for (Visits v : alllist){
+            if(Constants.equalsInteger(v.getParentId(),id)){
+                list.add(v);
+            }
+        }
+        return  list;
+    }
+
+    /**
+     * 鏍规嵁棰勭害杩斿洖鎺ュ彛灏佽鐢宠璁板綍鏇存柊瀛楁
+     * @param c
+     * @param date
+     * @param type 0闇�瑕佺櫥璁� 1鍏嶇櫥璁�
+     */
+    private void getUpdateModelByResponse(  Visits c,Date date,String type,List<DeviceRole> roleList ) {
+        String code = null;
+        String id = null;
+        //鍙戣捣娴峰悍棰勭害鎺ュ彛
+        if(StringUtils.equals(type,"0")){
+            //锛堥渶瑕佺櫥璁帮級
+            BaseResponse<VisitAppointmentResponse> response =  HKService.visitAppiontment(getHkRequestPara(c,roleList));
+        }else{
+            //鍏嶇櫥璁�
+            BaseResponse<VisitAppointmentMDJResponse> response = HKService.visitAppiontmentMDJ(getHkMDJRequestPara(c) );
+        }
+
+        if (code!= null && id!=null) {
+            //娴峰悍涓嬪彂鎴愬姛
+            c.setHkId( id);//棰勭害鏍囪瘑
+            c.setStatus(Constants.VisitStatus.xfSuccess);//涓嬪彂娴峰悍鎴愬姛
+        } else {
+            //娴峰悍涓嬪彂鎴愬姛
+            c.setStatus(Constants.VisitStatus.xfFail);//涓嬪彂娴峰悍澶辫触
+        }
+        c.setHkStatus(Constants.ONE);
+        c.setHkDate(date);
+    }
+
+    private VisitAppointmentMDJRequest getHkMDJRequestPara(Visits c) {
+        return  null;
+    }
+
+    private VisitAppointmentRequest getHkRequestPara(Visits c,List<DeviceRole> roleList ) {
+        VisitAppointmentRequest request = new VisitAppointmentRequest();
+        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
+        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
+        request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮�
+        request.setVisitPurpose(c.getReason());
+        request.setVisitorPermissionSet(new VisitAppointmentPermissonRequest());
+        //鑾峰彇鏉冮檺缁勯泦鍚�
+        String[] roles = getHkRoles(c.getDoors(),roleList);
+        if(roles==null || roles.length ==0){
+            //浣跨敤榛樿璁垮鏉冮檺缁�
+            request.getVisitorPermissionSet().setDefaultPrivilegeGroupFlag(Constants.ONE+"");
+        }else{
+            //鎸囧畾鏈夋晥娴峰悍璁垮鏉冮檺缁勬暟鎹�
+            request.getVisitorPermissionSet().setDefaultPrivilegeGroupFlag(Constants.ZERO+"");
+            request.getVisitorPermissionSet().setPrivilegeGroupIds(roles);
+        }
+        List<VisitAppointmentVistorRequest> infolist = new ArrayList<>();
+        //鐢宠浜�
+        infolist.add(getRequestInfoByVisit(c));
+        if(c.getVisitsList() != null){
+            //闅忚浜�
+            for(Visits v : c.getVisitsList()){
+                infolist.add(getRequestInfoByVisit(v));
+            }
+        }
+        request.setVisitorInfoList(infolist);
+        return  request;
+    }
+
+    private VisitAppointmentVistorRequest getRequestInfoByVisit(Visits c) {
+        VisitAppointmentVistorRequest info = new VisitAppointmentVistorRequest();
+        info.setVisitorName(c.getName());
+        info.setVisitorWorkUnit(c.getCompanyName());
+        info.setPhoneNo(c.getPhone());
+
+        return info;
+    }
+
+    private String[] getHkRoles(String doors, List<DeviceRole> roleList) {
+        if(StringUtils.isBlank(doors) || roleList.size()==0|| roleList.size()==0){
+            return null;
+        }
+        String[] ids = doors.split(",");
+        List<String> roles = new ArrayList<>();
+        for (String s : ids){
+            for(DeviceRole r : roleList){
+                if(StringUtils.isNotBlank(r.getHkId()) && StringUtils.equals(s,r.getId().toString())){
+                    roles.add(r.getHkId());
+                }
+            }
+        }
+        return  roles.toArray(new String[]{});
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夐渶瑕佸悓姝ョ殑鏁版嵁
+     * @return
+     */
+    private List<Visits> getVisitList() {
+        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(Visits.class);
+        queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName)
+                .select("t1.hk_id as receptMemberHkId")
+                .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
+        queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//瀹℃壒閫氳繃
+                .eq(Visits::getHkStatus,Constants.ZERO)//鏈悓姝ュ埌娴峰悍
+                .orderByAsc(Visits::getCreateDate);
+        List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper);
+        return list;
+    }
+
+}
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
index b98b733..6dd7a94 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -7,11 +7,13 @@
 import com.doumee.dao.web.response.MemberVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
+import com.doumee.service.business.VisitsService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,6 +36,9 @@
     @Autowired
     private MemberService memberService;
 
+    @Autowired
+    private VisitsService visitsService;
+
 
     @ApiOperation(value = "璁垮寰俊鎺堟潈", notes = "璁垮寰俊鎺堟潈鑾峰彇openId")
     @GetMapping("/wxAuthorize")

--
Gitblit v1.9.3