From c18b8f0f12f9c3965fee72ea2ae668c2fc89d908 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 18 十二月 2023 17:24:58 +0800
Subject: [PATCH] 海康接口对接开发

---
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                                    |   10 
 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/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/haikang/model/HKConstants.java                               |   36 ++
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java                                 |    2 
 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/impl/erp/ErpSyncServiceImpl.java                 |   14 
 server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java                               |    3 
 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java |    1 
 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/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java        |  172 +++++++++++-
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java                                    |    8 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java        |   82 ++++++
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java                                |   12 
 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 
 20 files changed, 706 insertions(+), 36 deletions(-)

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/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/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 c9bfb19..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="琚浜哄憳閮ㄩ棬")
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/impl/erp/ErpSyncServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
index 245bb9e..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
@@ -682,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 娴峰悍鏁版嵁鏇存柊
             }
@@ -742,7 +750,6 @@
                 member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                 member.setCompanyId(param.getOrgId());
                 memberMapper.insert(member);
-
                 //TODO 娴峰悍鏁版嵁鍒涘缓
             }else{
                 BeanUtils.copyProperties(param,member);
@@ -821,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;
+    }
+
+}

--
Gitblit v1.9.3