jiangping
2024-01-09 857a1e6ddac0a5cfdd82c78218b2483534ab397f
整理
已添加10个文件
已删除1个文件
已修改10个文件
已重命名1个文件
643 ■■■■ 文件已修改
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AuthItemListRequest.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AuthItemListTimeRequest.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardBingdingRequest.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardInfoRequest.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SortRequest.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskPersonDetailRequest.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListDetailResponse.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/CardInfoResponse.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardFaceResponse.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardInfoResponse.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailFaceInfoResponse.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailListResponse.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailResponse.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -66,6 +66,11 @@
        String taskProgressNum= "/api/acps/v1/authDownload/task/progress";//查詢下载任务进度
        String taskProgress= "/api/acps/v2/download_record/person/detail/search";//查询设备通道的人员权限下载详情总数v2
        String authItemList= "/api/acps/v1/auth_item/list/search";//查询权限条目列表
        String cardBingding= "/api/cis/v1/card/bindings";//批量开卡
        String cardDeletion= "/api/cis/v1/card/deletion";//卡片退卡
        String cardLoss= "/api/cis/v1/card/batch/loss";//批量挂失
        String cardUnloss= "/api/cis/v1/card/batch/unLoss";//批量解挂
        String taskPersoDetail= "/api/acps/v1/download_record/person/detail/search";//查询设备通道的人员权限下载详情
    }
    /**
@@ -74,7 +79,8 @@
    public  enum TASK_TYPE {
        CARD(1, "卡片"  ),
        FACE(4, "人脸"  )
        FACE(4, "人脸"  ),
        CARD_FACE(5, "卡片+人脸(组合)"  ),
        ;
        // æˆå‘˜å˜é‡
        private String name;
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -525,5 +525,65 @@
        saveInterfaceLog(body,result,path);
        return  result;
    }
    /**
     * æ‰¹é‡å¼€å¡
     * @param body
     * @return
     */
    public static String cardBingding(String body) {
        Map<String, String> path = getPath(HKConstants.InterfacePath.cardBingding);
        Map<String, String> header = new HashMap<>();
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post请求application/json类型参数
        saveInterfaceLog(body,result,path);
        return  result;
    }
    /**
     * é€€å¡
     * @param body
     * @return
     */
    public static String cardDeletion(String body) {
        Map<String, String> path = getPath(HKConstants.InterfacePath.cardDeletion);
        Map<String, String> header = new HashMap<>();
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post请求application/json类型参数
        saveInterfaceLog(body,result,path);
        return  result;
    }
    /**
     * æ‰¹é‡æŒ‚失
     * @param body
     * @return
     */
    public static String cardLoss(String body) {
        Map<String, String> path = getPath(HKConstants.InterfacePath.cardLoss);
        Map<String, String> header = new HashMap<>();
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post请求application/json类型参数
        saveInterfaceLog(body,result,path);
        return  result;
    }
    /**
     * æ‰¹é‡è§£æŒ‚
     * @param body
     * @return
     */
    public static String cardUnloss(String body) {
        Map<String, String> path = getPath(HKConstants.InterfacePath.cardUnloss);
        Map<String, String> header = new HashMap<>();
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post请求application/json类型参数
        saveInterfaceLog(body,result,path);
        return  result;
    }
    /**
     * æŸ¥è¯¢è®¾å¤‡é€šé“的人员权限下载详情
     * @param body
     * @return
     */
    public static String taskPersoDetail(String body) {
        Map<String, String> path = getPath(HKConstants.InterfacePath.taskPersoDetail);
        Map<String, String> header = new HashMap<>();
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", header);// post请求application/json类型参数
        saveInterfaceLog(body,result,path);
        return  result;
    }
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AuthItemListRequest.java
@@ -14,8 +14,8 @@
   private Integer[]   personStatus;//    number[]    False    äººå‘˜çŠ¶æ€0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
   private Integer[]   cardStatus;//    number[]    False    å¡ç‰‡çŠ¶æ€0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
   private Integer[]   faceStatus    ;//number[]    False    äººè„¸çŠ¶æ€0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
   private AuthItemListTimeRequest  configTime;//;    object    False    é…ç½®æ—¶é—´æŸ¥è¯¢å¯¹è±¡
   private AuthItemListSortRequest sortObjects    ;//object[]    False    ç›®å‰åªæ”¯æŒé…ç½®æ—¶é—´
   private TimeRangeRequest configTime;//;    object    False    é…ç½®æ—¶é—´æŸ¥è¯¢å¯¹è±¡
   private List<SortRequest> sortObjects    ;//object[]    False    ç›®å‰åªæ”¯æŒé…ç½®æ—¶é—´
   private Integer pageNo    ;//number    True    é¡µç ,pageNo>0
   private Integer pageSize    ;//number    True    é¡µå¤§å°,0<pageSize<=1000
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AuthItemListTimeRequest.java
ÎļþÒÑɾ³ý
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardBingdingRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class CardBingdingRequest {
   private String startDate    ;//string    False    å¡ç‰‡å¼€å§‹æœ‰æ•ˆæ—¶é—´ï¼Œæ—¶é—´æ ¼å¼ï¼šyyyy-MM-dd
   private String endDate;//    string    False    å¡ç‰‡æˆªæ­¢æœ‰æ•ˆæ—¶é—´,时间格式:yyyy-MM-dd       ä¸èƒ½å¤§äºŽ2037å¹´12月31日
   private List<CardInfoRequest> cardList    ;//object[]    True    å¾…开卡列表,最大支持50张卡,为空返回公共错误码,超过范围返回业务错误码,参考附录E.other.3 å¡ç‰‡é”™è¯¯ç 
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardInfoRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class CardInfoRequest {
   private String   cardNo        ;//string    True    å¡å·,8~20个字符,支持数字和大写字母。 å»ºè®®æ˜¯ç”±è¯»å¡å™¨ç›´æŽ¥è¯»å‡ºæ¥çš„。 å¦‚果是三方系统同步过来,需要提前调研卡号的规则所购买的设备上是否兼容
   private String  personId    ;//    string    True    äººå‘˜ID,根据 èŽ·å–äººå‘˜åˆ—è¡¨v2 æŽ¥å£èŽ·å–è¿”å›žå‚æ•°personId
   private String  orgIndexCode    ;//    string    False    äººå‘˜æ‰€å±žç»„织IndexCode,不传默认使用根组织,  ä»ŽèŽ·å–ç»„ç»‡åˆ—è¡¨ æŽ¥å£èŽ·å–è¿”å›žå‚æ•°orgIndexCode
   private Integer  cardType        ;//number    False    å¡ç‰‡ç±»åž‹ï¼Œé»˜è®¤æ˜¯1:IC卡1:IC卡2:CPU卡3:远距离卡4:M卡
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SortRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class SortRequest {
    private String  field    ;//    string    False    æŽ’序字段,对应查询用的参数名称
    private String sort    ;//    string    False    æŽ’序规则,asc:正序,    desc:倒序
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskPersonDetailRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
import java.util.List;
@Data
public class TaskPersonDetailRequest {
   private String  downloadResultId;//        string    False    ä¸‹è½½è®°å½•唯一ID,使用downloadResultId查询设备通道下载记录详情时,忽略taskId与resourceInfo字段(“下载记录唯一ID”和“下载任务标识+设备通道对象”两者必须有一个不为空),从查询设备通道权限下载记录列表接口获取返回参数downloadResultId
   private String taskId;//        string    False    ä¸‹è½½ä»»åŠ¡å”¯ä¸€æ ‡è¯†ï¼Œä»ŽæŸ¥è¯¢è®¾å¤‡é€šé“æƒé™ä¸‹è½½è®°å½•åˆ—è¡¨æŽ¥å£èŽ·å–è¿”å›žå‚æ•°taskId
   private  TaskDataAdditionResourceRequest   resourceInfo    ;//    object    False    è®¾å¤‡é€šé“对象
   private  String[] personIds;//        string[]    False    äººå‘˜ç¼–号列表,查询人员列表v2接口获取返回报文中的personId字段,最大长度1000
   private String[]  orgIds;//        string[]    False    ç»„织编号,查询组织列表v2接口获取返回报文中的orgIndexCode字段,最大长度1000
   private Integer downloadResult;//    integer    False    ä¸‹è½½ç»“果,           0 æˆåŠŸï¼Œ           1 å¤±è´¥ï¼Œ           2 éƒ¨åˆ†æˆåŠŸ
   private TimeRangeRequest downloadTime;//    object    False    ä¸‹è½½æ—¶é—´æŸ¥è¯¢å¯¹è±¡
   private List<SortRequest> sortObjects    ;//object[]    False    ç›®å‰åªæ”¯æŒé…ç½®æ—¶é—´
   private Integer pageNo    ;//number    True    é¡µç ,pageNo>0
   private Integer pageSize    ;//number    True    é¡µå¤§å°,0<pageSize<=1000
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeRequest.java
ÎļþÃû´Ó server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AuthItemListSortRequest.java ÐÞ¸Ä
@@ -3,7 +3,7 @@
import lombok.Data;
@Data
public class AuthItemListSortRequest {
public class TimeRangeRequest {
    private String startTime;//    string    False    å¼€å§‹æ—¥æœŸ,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
    private String endTime    ;//string    False    ç»“束日期,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListDetailResponse.java
@@ -1,6 +1,6 @@
package com.doumee.core.haikang.model.param.respose;
import com.doumee.core.haikang.model.param.request.AuthItemListTimeRequest;
import com.doumee.core.haikang.model.param.request.TimeRangeRequest;
import lombok.Data;
@Data
@@ -10,14 +10,14 @@
  private String resourceIndexCode;//    string    False    èµ„源的唯一标识
  private Integer channelNo;//    number    False    é€šé“号
  private String channelIndexCode    ;//string    False    èµ„源通道唯一标识(在权限下载和配置接口入参时对应查询接口会返回,不作为查询接口的查询条件)
             private AuthItemListTimeRequest templateConfigInfos;//    Object[]    False    è®¡åˆ’模板信息
  private TimeRangeRequest templateConfigInfos;//    Object[]    False    è®¡åˆ’模板信息
  private Integer personStatus;//    number    False    äººå‘˜çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
  private Integer cardStatus    ;//number    False    å¡ç‰‡çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
  private Integer faceStatus    ;//number    False    äººè„¸çŠ¶æ€,0:已配置未下载1:更新待下载2:更新待删除3:已下载4:未配置
  private String cardJson    ;//string    False    è®°å½•已下载到设备的卡号(Map格式(卡号:状态),其中状态(0改变表示下载后卡片的信息又变化了,1已下载))
             private String configTime    ;//string    False    é…ç½®æ—¶é—´,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
             private String startTime;//    string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始时间,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
             private String endTime    ;//string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始日期,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
             private String personExtendJson;//    body    string    å¦
 private String configTime    ;//string    False    é…ç½®æ—¶é—´,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
 private String startTime;//    string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始时间,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
 private String endTime    ;//string    False    äººå‘˜æƒé™æœ‰æ•ˆæœŸï¼ˆä»¥äººä¸ºä¸­å¿ƒè®¾å¤‡æ—¶ä½¿ç”¨ï¼‰,开始日期,采用ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
 private String personExtendJson;//    body    string    å¦
           
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/CardInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class CardInfoResponse {
   private String   cardNo        ;//string    True    å¡å·,8~20个字符,支持数字和大写字母。 å»ºè®®æ˜¯ç”±è¯»å¡å™¨ç›´æŽ¥è¯»å‡ºæ¥çš„。 å¦‚果是三方系统同步过来,需要提前调研卡号的规则所购买的设备上是否兼容
   private String  personId    ;//    string    True    äººå‘˜ID,根据 èŽ·å–äººå‘˜åˆ—è¡¨v2 æŽ¥å£èŽ·å–è¿”å›žå‚æ•°personId
   private String  orgIndexCode    ;//    string    False    äººå‘˜æ‰€å±žç»„织IndexCode,不传默认使用根组织,  ä»ŽèŽ·å–ç»„ç»‡åˆ—è¡¨ æŽ¥å£èŽ·å–è¿”å›žå‚æ•°orgIndexCode
   private Integer  cardType        ;//number    False    å¡ç‰‡ç±»åž‹ï¼Œé»˜è®¤æ˜¯1:IC卡1:IC卡2:CPU卡3:远距离卡4:M卡
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardFaceResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class TaskPersonDetailCardFaceResponse {
    private List<TaskPersonDetailCardInfoResponse> cards;//        object[]    False    å¡ç‰‡ä¸‹è½½è®°å½•
    private List<TaskPersonDetailFaceInfoResponse> faces;//        object[]    False äººè„¸ä¸‹è½½è®°å½•
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class TaskPersonDetailCardInfoResponse {
    private  String id;//    string    False    å¡å·
    private  String  operatorType;//    number    False    æ“ä½œç±»åž‹ï¼Œ1. ä¸‹è½½æƒé™ 2. åˆ é™¤æƒé™
    private  String  errorCode;//    string    False    é”™è¯¯ç ï¼Œ0 â€“ æˆåŠŸï¼Œå…¶ä»–- å¤±è´¥ï¼Œå‚考附录E.2.3 å‡ºå…¥æŽ§åˆ¶æƒé™é”™è¯¯ç 
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailFaceInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class TaskPersonDetailFaceInfoResponse {
    private  String id;//    string    False    å¡å·
    private  String  operatorType;//    number    False    æ“ä½œç±»åž‹ï¼Œ1. ä¸‹è½½æƒé™ 2. åˆ é™¤æƒé™
    private  String  errorCode;//    string    False    é”™è¯¯ç ï¼Œ0 â€“ æˆåŠŸï¼Œå…¶ä»–- å¤±è´¥ï¼Œå‚考附录E.2.3 å‡ºå…¥æŽ§åˆ¶æƒé™é”™è¯¯ç 
    private  String errorMsg;//    string    False    é”™è¯¯æè¿°ï¼Œæ¯”如:当出现人脸重复,指纹重复时,该字段返回重复的卡号。
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class TaskPersonDetailListResponse {
   private Integer  total;//    number    False    æ€»æ¡æ•°
   private List<TaskPersonDetailResponse> list;//object[]    False    è®¾å¤‡é€šé“的下载记录
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class TaskPersonDetailResponse {
    private String  downloadResultId;//    string    False    ä¸‹è½½è®°å½•唯一ID
    private String  personId;//    string    False    äººå‘˜ç¼–码
    private String  persondownloadResult;//    string    False    ä¸‹è½½è®°å½•状态(只有成功/失败状态,0:成功,1:失败)
    private String  downloadTime;//    string    False    ä¸‹è½½æ—¶é—´ï¼Œé‡‡ç”¨ISO8601时间格式,最大长度32个字符,如2018-09-03T17:30:08.000+08:00
    private TaskPersonDetailCardFaceResponse personDownloadDetail;//    object    False    ä¸‹è½½çš„详细描述
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -156,7 +156,7 @@
        try {
            String res = HKTools.delBatchUser(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse<OrgOrUserAddFailureResponse>>(){};
                    new TypeReference< BaseResponse<List<UserDelResponse>>>(){};
            BaseResponse<List<UserDelResponse >> result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康批量新增人员");
            return  result;
@@ -682,6 +682,46 @@
        }
        return  null;
    }
    /**
     *海康批量开卡
     * @return
     */
    public  static  BaseResponse<List<CardInfoResponse>>     cardBingding(CardBingdingRequest param){
        log.info("【海康批量开卡】================开始===="+JSONObject.toJSONString(param));
        String res = null;
        try {
            res = HKTools.cardBingding(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse <List<CardInfoResponse>>  >(){};
            BaseResponse<List<CardInfoResponse>>    result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康批量开卡");
            return  result;
        }catch (Exception e){
            log.error("【海康批量开卡】================失败====:\n"+ e.getMessage());
        }finally {
        }
        return  null;
    }
    /**
     *海康查询设备通道的人员权限下载详情
     * @return
     */
    public  static  BaseResponse<TaskPersonDetailListResponse>  taskPersoDetail(TaskPersonDetailRequest param){
        log.info("【海康查询设备通道的人员权限下载详情】================开始===="+JSONObject.toJSONString(param));
        String res = null;
        try {
            res = HKTools.taskPersoDetail(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse <TaskPersonDetailListResponse>>(){};
            BaseResponse<TaskPersonDetailListResponse>    result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康查询设备通道的人员权限下载详情");
            return  result;
        }catch (Exception e){
            log.error("【海康查询设备通道的人员权限下载详情】================失败====:\n"+ e.getMessage());
        }finally {
        }
        return  null;
    }
    private static void logResult(BaseResponse res,String name) {
        if(StringUtils.equals(res.getCode(),HKConstants.RESPONSE_SUCCEE)){
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java
@@ -114,6 +114,7 @@
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客  2内部人员", example = "1")
    @ExcelColumn(name="类型 0劳务访客 1普通访客  2内部人员")
    @TableField(exist = false)
    private String typeName;
    @ApiModelProperty(value = "关键字")
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -214,6 +214,7 @@
        }
        company.setErpDate(date);
        company.setHkStatus(Constants.ZERO);
        company.setRemark("待同步安防平台");
        return  company;
    }
    /**
@@ -236,6 +237,7 @@
        }
        company.setErpDate(date);
        company.setHkStatus(Constants.ZERO);
        company.setRemark("待同步安防平台");
        return  company;
    }
@@ -282,23 +284,24 @@
            List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .eq(Member::getType, Constants.memberType.internal));
            dealUserChangeList(list,addList,updateList,delList,allList);
            dealUserChangeList(list,addList,updateList,delList,allList,param);
            if(addList.size()>0){
                memberMapper.insertBatchSomeColumn(addList);
                for (Member member:addList) {
                    dealRoleEmpower(member,param.getStartTime(), param.getEndTime());
                    dealRoleEmpower(member );
                }
            }
            if(updateList.size()>0){
                for(Member c : updateList){
                     dealRoleEmpower(c,param.getStartTime(), param.getEndTime());
                     dealRoleEmpower(c );
                    c.setHkStatus(Constants.ZERO);
                    c.setRemark("待同步安防平台");
                    memberMapper.updateById(c);
                }
            }
            if(delList.size()>0){
                for (Member member:delList) {
                    dealRoleEmpower(member,param.getStartTime(), param.getEndTime());
                    dealRoleEmpower(member );
                }
                delIds = delList.stream().map(m->m.getId()).collect(Collectors.toList());
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
@@ -311,15 +314,13 @@
        }
    }
    public void dealRoleEmpower(Member member,Date startTime , Date endTime){
        List<Integer> doorIds = null;
        doorIds = getRoleIdByParam(member.getRoleIds(),member);
        //如果有授权门禁数据,进行用户授权数据下发任务创建
        dealMemberRoleEmpower(member,doorIds,startTime,endTime);
   public void dealRoleEmpower(Member member ){
        List<Integer> doorIds = getRoleIdByParam(member.getRoleIds(),member);
        //添加人员卡片数据
        dealMemberCard(member,new UserUpdateRequest());
    }
    private void dealUserChangeList(List<ErpUserListResponse> list, List<Member> addList, List<Member> updateList, List<Member> delList, List<Member> allList) {
    private void dealUserChangeList(List<ErpUserListResponse> list, List<Member> addList, List<Member> updateList, List<Member> delList, List<Member> allList,UserListRequest param) {
        Date date = new Date();
        for(ErpUserListResponse response : list){
            Company company =  new Company();
@@ -337,7 +338,7 @@
                    continue;
                }
                //封装新增组织对象数据
                addList.add(getAddMemberModel(response,date,company));
                addList.add(getAddMemberModel(response,date,company,param));
            }else{
                //如果是更新
                if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){
@@ -347,7 +348,7 @@
//                    delIds.add(member.getId());
                    continue;
                }
                updateList.add(addUpdateMemberModel(response,member,date,company));
                updateList.add(addUpdateMemberModel(response,member,date,company,param));
            }
        }
        if(allList!=null && allList.size()>0){
@@ -359,17 +360,18 @@
        }
    }
    private Member getAddMemberModel(ErpUserListResponse param, Date date,Company company) {
    private Member getAddMemberModel(ErpUserListResponse param, Date date,Company company,UserListRequest request) {
        Member member = new Member();
        BeanUtils.copyProperties(param,member);
        member.setCreateDate(new Date());
        member.setCreateDate(date);
        if(StringUtils.isBlank(param.getFaceImg())){
            member.setHkStatus(Constants.THREE);
        }else{
            member.setHkStatus(Constants.ZERO);
            member.setRemark("待同步安防平台");
        }
        member.setErpStatus(Constants.ONE);
        member.setErpDate(new Date());
        member.setErpDate(date);
        member.setErpId(param.getId());
        member.setIdcardType(param.getIdType());
        member.setFsStatus(Constants.ZERO);
@@ -381,20 +383,25 @@
        member.setRoleIds(param.getRoleIds());
        member.setCompanyId(Objects.isNull(company)?null:company.getId());
        member.setErpOrgId(param.getOrgId());
        member.setStartTime(request.getStartTime());
        member.setEndTime(request.getEndTime());
        return  member;
    }
    private Member addUpdateMemberModel(ErpUserListResponse param, Member member, Date date,Company company) {
    private Member addUpdateMemberModel(ErpUserListResponse param, Member member, Date date,Company company,UserListRequest request) {
        BeanUtils.copyProperties(param,member);
        String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
        member.setIdcardNo(encryptIdNo);
        member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
        member.setErpOrgId(param.getOrgId());
        member.setEditDate(new Date());
        member.setEditDate(date);
        member.setStatus(param.getStatus());
        member.setErpDate(new Date());
        member.setErpDate(date);
        member.setHkStatus(Constants.ZERO);
        member.setRemark("待同步安防平台");
        member.setRoleIds(param.getRoleIds());
        member.setStartTime(request.getStartTime());
        member.setEndTime(request.getEndTime());
        member.setCompanyId(Objects.isNull(company)?null:company.getId());
        member.setErpOrgId(param.getOrgId());
        return  member;
@@ -749,6 +756,7 @@
                company.setId(null);
                company.setCreateDate(new Date());
                company.setHkStatus(Constants.ZERO);
                company.setRemark("待同步安防平台");
                company.setErpStatus(Constants.ONE);
                company.setErpDate(new Date());
                company.setName(param.getName());
@@ -773,6 +781,7 @@
                    company.setHkId(rootOrgId);
                }*/
                company.setHkStatus(Constants.ZERO);
                company.setRemark("待同步安防平台");
                company.setErpDate(new Date());
                company.setName(param.getName());
                company.setErpParentId(param.getParentId());
@@ -816,43 +825,41 @@
                BeanUtils.copyProperties(param,member);
                member.setId(null);
                member.setCreateDate(new Date());
                  member.setRemark("待同步安防平台");
                member.setHkStatus(Constants.ZERO);
                member.setErpStatus(Constants.ONE);
                member.setErpDate(new Date());
                member.setErpId(param.getId());
                member.setFsStatus(Constants.ZERO);
                member.setCompanyId(company.getId());
                member.setType(Constants.memberType.internal);
                String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                member.setIdcardNo(encryptIdNo);
                member.setStartTime(param.getValidStartTime());
                member.setRoleId(param.getRoleIds()!=null?JSONObject.toJSONString(param.getRoleIds()):null);
                member.setEndTime(param.getValidEndTime());
                member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                member.setErpOrgId(param.getOrgId());
                doorIds = getRoleIdByParam(param.getRoleIds(),member);
                memberMapper.insert(member);
                //TODO æµ·åº·æ•°æ®åˆ›å»º-------------修改-------------------
            }else{
                Integer id = member.getId();
                BeanUtils.copyProperties(param,member);
                member.setId(id);
                member.setCompanyId(company.getId());
                String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                member.setIdcardNo(encryptIdNo);
                member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                member.setErpOrgId(param.getOrgId());
                member.setEditDate(new Date());
                doorIds = getRoleIdByParam(param.getRoleIds(),member);
                member.setErpDate(new Date());
                member.setHkStatus(Constants.ZERO);
                member.setRemark("待同步安防平台");
                member.setStartTime(param.getValidStartTime());
                member.setEndTime(param.getValidEndTime());
                memberMapper.updateById(member);
                //删除用户卡片数据  äººå‘˜è§’色关联
                memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,member.getId()));
                //TODO æµ·åº·æ•°æ®æ›´æ–°
            }
            //如果有授权门禁数据,进行用户授权数据下发任务创建
            dealMemberRoleEmpower(member,doorIds,param.getValidStartTime(),param.getValidEndTime());
            //添加人员卡片数据
            getRoleIdByParam(param.getRoleIds(),member);
            dealMemberCard(member,param);
        }catch (BusinessException e){
            throw e;
@@ -867,69 +874,45 @@
     * @param param
     */
    private void dealMemberCard(Member member, UserUpdateRequest param) {
        if(!Objects.isNull(param.getCardList())&&param.getCardList().size()>Constants.ZERO){
            if(CollectionUtils.isNotEmpty(param.getCardList())){
                List<MemberCard> memberCardList = new ArrayList<>();
                for (String id:param.getCardList()) {
        if(Objects.isNull(param.getCardList()) || param.getCardList().size()== Constants.ZERO){
           param.setCardList(new ArrayList<>());
           //如果没有卡号,默认给一个卡号
           param.getCardList().add(Constants.VIRTUAL_CARD_INDEX+member.getId());
        }
        if(CollectionUtils.isNotEmpty(param.getCardList())){
            List<MemberCard> memberCardList = new ArrayList<>();
            for (String id:param.getCardList()) {
                MemberCard model = memberCardMapper.selectOne(new QueryWrapper<MemberCard>().lambda()
                        .eq(MemberCard::getCode,id)
                        .eq(MemberCard::getMemberId,member.getId()));
                if(model!=null && Constants.equalsInteger(model.getHkStatus(),Constants.ONE)){
                    //如果已经开卡完成,不做任何处理
                }else if(model !=null){
                    //如果存在,但未开卡,则直接更改为待同步
                    model.setHkStatus(Constants.ZERO);
                    model.setRemark("待同步安防平台");
                    model.setIsdeleted(Constants.ZERO);
                    memberCardMapper.updateById(model);
                }else{
                    MemberCard memberCard = new MemberCard();
                    memberCard.setCreateDate(new Date());
                    memberCard.setStatus(Constants.ONE);
                    memberCard.setMemberId(member.getId());
                    memberCard.setIsdeleted(Constants.ZERO);
                    memberCard.setCardType(HKConstants.CARD_TYPE.NORMAL.getKey());
                    memberCard.setHkStatus(Constants.ZERO);
                    memberCard.setRemark("待同步安防平台");
                    memberCard.setType(Constants.TWO);
                    memberCard.setCode(id);
                    memberCardList.add(memberCard);
                }
            }
            if(memberCardList.size()>0){
                memberCardMapper.insertBatchSomeColumn(memberCardList);
            }
        }
    }
    /**
     * //如果有授权门禁数据,进行用户授权数据下发任务创建
     * @param member
     */
    private void dealMemberRoleEmpower(Member member, List<Integer> doorIds,Date startTime,Date endTime ) {
        //删除所有老的授权信息
        if(!Objects.isNull(member)&&!Objects.isNull(member.getId())){
            empowerMapper.update(null,new UpdateWrapper<Empower>().lambda()
                    .eq(Empower::getMemberId,member.getId())
                    .set(Empower::getIsdeleted,Constants.ONE)
                    .set(Empower::getSendStatus,Constants.ZERO));
        }
//        empowerMapper.delete(new UpdateWrapper<Empower>().lambda()
//                .eq(Empower::getMemberId,member.getId())
//                );
        if(doorIds==null || doorIds.size() == 0){
          return;
        }
        if(StringUtils.isBlank(member.getFaceImg())){
          return;
        }
        if(Constants.equalsObject(member.getHkStatus(),Constants.ONE)){
            //如果用户是同步海康成功,添加带下发权限
            List<Empower> list = new ArrayList<>();
            List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().lambda().in(Device::getId,doorIds));
            if(deviceList == null || deviceList.size() == 0){
                return;
            }
            for (Device deviceRole:deviceList) {
                Empower model = new Empower();
                model.setCreateDate(new Date());
                model.setMemberId(member.getId());
                model.setIsdeleted(Constants.ZERO);
                model.setDeviceId(deviceRole.getId());
                model.setSendStatus(Constants.ZERO);
                model.setStartTime(startTime);
                model.setEndTime(endTime);
                //默认给于虚拟卡
                model.setCardNos(Constants.VIRTUAL_CARD_INDEX+member.getId());
                model.setSendType(Constants.ZERO);
                list.add(model);
            }
            //导入新增的授权信息
            empowerMapper.insertBatchSomeColumn(list);
        }
    }
    private   List<Integer>  getRoleIdByParam(Integer[] param, Member member) {
        //添加人员角色关联数据
        if(!Objects.isNull(member)&&!Objects.isNull(member.getId())){
@@ -994,11 +977,12 @@
        update.setEditDate(new Date());
        update.setStartTime(param.getValidStartTime());
        update.setEndTime(param.getValidEndTime());
        update.setHkStatus(Constants.ZERO);//做一遍更新逻辑
        update.setRemark("待同步安防平台");
        memberMapper.updateById(update);
        //如果有授权门禁数据,进行用户授权数据下发任务创建
        dealMemberRoleEmpower(member,doorIds,param.getValidStartTime(),param.getValidEndTime());
    }
    @Override
    public void parkCarAuthor(CarAuthorRequest param){
        if(Objects.isNull(param)
@@ -1031,6 +1015,7 @@
                parkBook.setTimeType(Objects.isNull(param.getValidEndTime())?Constants.ZERO:Constants.ONE);
                parkBook.setMemberId(member.getId());
                parkBook.setHkStatus(Constants.ZERO);
                parkBook.setRemark("待同步安防平台");
                parkBookList.add(parkBook);
            }
            parkBookMapper.insertBatchSomeColumn(parkBookList);
@@ -1060,6 +1045,7 @@
                    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);
                    i.setRemark("待同步安防平台");
                    visitsMapper.updateById(i);
                });
            }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -144,7 +144,7 @@
    public  String hkTaskAddtion() {
        TaskAdditionRequest param = new TaskAdditionRequest();
        param.setTaskType(HKConstants.TASK_TYPE.FACE.getKey());
        param.setTaskType(HKConstants.TASK_TYPE.CARD_FACE.getKey());
        BaseResponse<TaskAdditionResponse> response = HKService.taskAddition(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -57,20 +57,84 @@
               return;
           }
           for(Empower c : list){
               TaskPersonDetailRequest param = new TaskPersonDetailRequest();
               param.setPageNo(1);
               param.setPageSize(100);
//               param.setPersonIds(new ArrayList<>());
               param.setPersonIds(new String[]{c.getMemberHkId()});
               param.setTaskId(c.getHkId());
               TaskDataAdditionResourceRequest rec = new TaskDataAdditionResourceRequest();
               rec.setResourceIndexCode(c.getDeviceIndexCode());
               rec.setResourceType(c.getDeviceType());
//               rec.setChannelNos(c.getDeviceChannelNo().split(","));
               param.setResourceInfo(rec);
               //查询下发状态
               BaseResponse<TaskPersonDetailListResponse> response = HKService.taskPersoDetail(param);
               if(response!=null
                       && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)
                       && response.getData()!=null
                       && response.getData().getList() != null
                       && response.getData().getList().size()>0 ){
                   TaskPersonDetailResponse model = response.getData().getList().get(0);
                   if(model != null && StringUtils.equals(model.getPersondownloadResult(),"0")){
                       //更新已完成下载任务
                       String remark = "";
                       String cardInfo = "卡片下发失败";
                       TaskPersonDetailCardFaceResponse d = model.getPersonDownloadDetail();
                        if(d.getCards() !=null && d.getCards().size()>0){
                            cardInfo = "卡片:【" ;
                            for(TaskPersonDetailCardInfoResponse card : d.getCards()){
                                cardInfo +=card.getId()+" ";
                            }
                            cardInfo += "】下发成功";
                        }
                       if(d.getFaces() == null || d.getFaces().size() ==0){
                           remark  = cardInfo+", ä¸æ”¯æŒäººè„¸è®¾å¤‡ï¼";
                       }else{
                           remark = ""+cardInfo+",人脸下发成功!";
                       }
                       empowerMapper.update(null,new UpdateWrapper<Empower>()
                               .lambda()
                               .eq(Empower::getId,c.getId() )
                               .set(Empower::getRemark,remark )
                               .set(Empower::getSendInfo,remark )
                               .set(Empower::getSendStatus,Constants.EmpowerStatus.pass) );
                   }
               }
           }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_EMPOWER_DETAIL=false;
        }
    }
    public  void syncEmpowerDetailDataOld(){
        if(Constants.DEALING_HK_EMPOWER_DETAIL){
            return   ;
        }
        Constants.DEALING_HK_EMPOWER_DETAIL = true;
        try {
            //查询所有完成下载,待查询结果的数据记录
            List<Empower>  list = getDealListDetail();
           if(list == null || list.size() ==0){
               return;
           }
           for(Empower c : list){
               AuthItemListRequest param = new AuthItemListRequest();
               param.setPageNo(1);
               param.setPageSize(100);
//               param.setPersonIds(new ArrayList<>());
//               AuthItemListPersonRequest p = new AuthItemListPersonRequest();
//               p.setPersonIds(c.getMemberHkId());
               param.setPersonIds(new String[]{c.getMemberHkId()});
                param.setQueryType(c.getDeviceType());
               param.setQueryType(c.getDeviceType());
               TaskDataAdditionResourceRequest rec = new TaskDataAdditionResourceRequest();
               rec.setResourceIndexCode(c.getDeviceIndexCode());
               rec.setResourceType(c.getDeviceType());
               rec.setChannelNos(c.getDeviceChannelNo().split(","));
//               rec.setChannelNos(c.getDeviceChannelNo().split(","));
               List<TaskDataAdditionResourceRequest> resourceRequests = new ArrayList<>();
               resourceRequests.add(rec);
//               param.setResourceInfos(resourceRequests);
               //查询已下载
@@ -85,7 +149,7 @@
                   //更新已完成下载任务
                   empowerMapper.update(null,new UpdateWrapper<Empower>()
                           .lambda()
                           .eq(Empower::getHkId,c.getHkId() )
                           .eq(Empower::getId,c.getId() )
                           .set(Empower::getSendStatus,Constants.EmpowerStatus.pass) );
               }
           }
@@ -151,7 +215,7 @@
        try {
            //先删除所有需要取消授权的数据
            dealDelListTask(getDealList(Constants.ONE));
            //查询所有需要同步的数据
            //查询所有需要同步的数据,重新下发最新人员权限即可
            dealNewListTask(getDealList(Constants.ZERO));
        }catch (Exception e){
            e.printStackTrace();
@@ -188,6 +252,7 @@
                update.setEditDate(date);
                update.setHkId(taskId);
                update.setRemark(status?"下发任务执行成功":"下发任务执行失败");
                update.setSendInfo(status?"下发任务执行成功":"下发任务执行失败");
                //下发中
                update.setSendStatus(status?Constants.EmpowerStatus.ing:Constants.EmpowerStatus.fail);
                empowerMapper.updateById(update);
@@ -200,7 +265,8 @@
            update.setEditDate(date);
            update.setHkId(taskId);
            update.setSendStatus(Constants.EmpowerStatus.fail);
//            update.setRemark( "添加下发任务数据刪除授权失败");
            update.setSendInfo( "添加下发任务数据刪除授权失败");
            update.setRemark( "添加下发任务数据刪除授权失败");
            empowerMapper.updateById(update);
        }
    }
@@ -234,6 +300,7 @@
                update.setEditDate(date);
                update.setHkId(taskId);
                update.setRemark(status?"下发任务成功":"下发任务失败");
                update.setSendInfo(status?"下发任务成功":"下发任务失败");
                //下发中
                update.setSendStatus(status?Constants.EmpowerStatus.ing:Constants.EmpowerStatus.fail);
                empowerMapper.updateById(update);
@@ -248,6 +315,7 @@
            update.setHkId(taskId);
            update.setSendStatus(Constants.EmpowerStatus.fail);
            update.setRemark( "添加下发任务数据失败");
            update.setSendInfo( "添加下发任务数据失败");
            empowerMapper.updateById(update);
        }
@@ -272,6 +340,7 @@
                ||StringUtils.isBlank(c.getDeviceType())
                ||StringUtils.isBlank(c.getDeviceIndexCode())){
            //必填参数校验
            c.setSendInfo("设备信息不支持授权下发,检查人员是否已下发海康或者设备是否【设备类型、通道号】是否完善");
            c.setRemark("设备信息不支持授权下发,检查人员是否已下发海康或者设备是否【设备类型、通道号】是否完善");
            return  false;
        }
@@ -295,7 +364,7 @@
        param.setPersonInfos(personInfos);
        //--------------卡片添加----------
        if(StringUtils.isNotBlank(c.getCardNos())){
      /*  if(StringUtils.isNotBlank(c.getCardNos())){
            List<TaskDataAdditionCardRequest> cards = new ArrayList<>();
            for(String s : c.getCardNos().split(",")){
                TaskDataAdditionCardRequest tc = new TaskDataAdditionCardRequest();
@@ -305,13 +374,14 @@
                cards.add(tc);
            }
            param.setCards(cards);
        }
        }*/
        BaseResponse response =  HKService.taskDataAddition(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){
            return true;
        }else{
            c.setRemark("添加人员、设备通道权限下发数据失败"+(response!=null?response.getMsg():""));
            c.setSendInfo("添加人员、设备通道权限下发数据失败"+(response!=null?response.getMsg():""));
            return  false;
        }
    }
@@ -342,6 +412,8 @@
        queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType);
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId);
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.downloaded);
        queryWrapper.orderByAsc(Empower::getSendDate);
        queryWrapper.isNotNull(Empower::getMemberHkId) ;
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper);
        return list;
    }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -50,6 +50,8 @@
    @Autowired
    private EmpowerMapper empowerMapper;
    @Autowired
    private MemberCardMapper memberCardMapper;
    @Autowired
    private MemberJoinMapper memberMapper;
    @Autowired
    private ERPSyncService erpSyncService;
@@ -286,7 +288,7 @@
            //查询数据库存在的权限
            List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                    .eq(DeviceRole::getType,Constants.TWO)
                    .exists("(select b.id from member_role b    where b.ROLE_ID = device_role.ID and b.MEMBER_ID="+member.getRoleId()+")"));
                    .exists("(select b.id from member_role b    where b.ROLE_ID = device_role.ID and b.MEMBER_ID="+member.getId()+")"));
            if(CollectionUtils.isNotEmpty(deviceRoleList)){
                List<MemberRole> memberRoleList = new ArrayList<>();
                String ids = "";
@@ -318,7 +320,7 @@
            //如果没有组织不做处理
            return  false;
        }
        if(StringUtils.isBlank(c.getHkId())){
        if(!Constants.equalsInteger(Constants.ONE,c.getIsdeleted()) && StringUtils.isBlank(c.getHkId())){
            //如果新增同步數據
            dealUserHkAddBiz(c,date,path);
        }else{
@@ -328,6 +330,11 @@
        return  false;
    }
    private void dealMemberRoleEmpower(Member member ) {
        //处理新增的人员卡片数据(与海康同步)
        List<MemberCard> cards = dealMemberHkCard(member);
        if(cards == null || cards.size() == 0){
            return;
        }
        List<Integer> doorIds = getRoleIdByParam(member);
        if(doorIds==null || doorIds.size() == 0){
            return;
@@ -335,9 +342,12 @@
        if(StringUtils.isBlank(member.getFaceImg())){
            return;
        }
        if(Constants.equalsObject(member.getHkStatus(),Constants.ONE)){
            //如果用户是同步海康成功,添加带下发权限
            List<Empower> list = new ArrayList<>();
        List<Integer> deviceIds =new ArrayList<>();//新设备编码集合
        List<Empower> list = new ArrayList<>();//新授权记录集合
        if(Constants.equalsInteger(member.getIsdeleted(),Constants.ZERO)
                && Constants.equalsObject(member.getHkStatus(),Constants.ONE)){
            //如果用户是同步海康成功,添加带下发权限(只管理新增或者编辑的)
            List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().lambda().in(Device::getId,doorIds));
            if(deviceList == null || deviceList.size() == 0){
                return;
@@ -349,17 +359,109 @@
                model.setIsdeleted(Constants.ZERO);
                model.setDeviceId(deviceRole.getId());
                model.setSendStatus(Constants.ZERO);
                model.setSendInfo("待同步安防平台");
                model.setRemark("待同步安防平台");
                model.setStartTime(member.getStartTime());
                model.setEndTime(member.getEndTime());
                //默认给于虚拟卡
                model.setCardNos(Constants.VIRTUAL_CARD_INDEX+member.getId());
                model.setSendType(Constants.ZERO);
                //标记最新的授权设备编码集合
                deviceIds.add(deviceRole.getId());
                list.add(model);
            }
            //导入新增的授权信息
        }
        //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限)
        empowerMapper.update(null,new UpdateWrapper<Empower>().lambda()
                .eq(Empower::getMemberId,member.getId())
                .set(Empower::getIsdeleted,Constants.ONE)
                .eq(Empower::getIsdeleted,Constants.ZERO)
                .notIn(deviceIds.size()>0,Empower::getDeviceId,deviceIds)
                .set(Empower::getSendStatus,Constants.ZERO));
        //导入新增的授权信息
        if(list.size()>0){
            //直接覆盖重复的设备权限,直接删除即可
            empowerMapper.delete(new UpdateWrapper<Empower>().lambda()
                    .eq(Empower::getMemberId,member.getId())
                    .eq(Empower::getIsdeleted,Constants.ZERO)
                    .in(Empower::getDeviceId,deviceIds) );
            empowerMapper.insertBatchSomeColumn(list);
        }
    }
    /**
     * å¯¹äººå‘˜å¸¦å¼€å¡æ•°æ®è¿›è¡Œè‡ªåŠ¨å¼€å¡æ“ä½œ
     * @param member
     * @return
     */
    private List<MemberCard> dealMemberHkCard(Member member) {
        List<MemberCard> memberCards = memberCardMapper.selectList(new QueryWrapper<MemberCard>().lambda()
                .eq(MemberCard::getMemberId,member.getId())
                .eq(MemberCard::getType,Constants.TWO)
                .eq(MemberCard::getHkStatus,Constants.ZERO)  );
        if(memberCards==null ||  memberCards.size()==0){
            //没有带处理的数据,直接跳过
            return    memberCardMapper.selectList(new QueryWrapper<MemberCard>().lambda()
                    .eq(MemberCard::getMemberId,member.getId())
                    .eq(MemberCard::getType,Constants.TWO)
                    .eq(MemberCard::getHkStatus,Constants.ONE)  );
        }
        List<Integer> allCodes = new ArrayList<>();
        List<String> doneCodes = new ArrayList<>();
        CardBingdingRequest param = new CardBingdingRequest();
        if(member.getStartTime() !=null && member.getEndTime()!=null){
            param.setStartDate(DateUtil.getISO8601Timestamp(member.getStartTime()));
            param.setEndDate(DateUtil.getISO8601Timestamp(member.getEndTime()));
        }
        param.setCardList(new ArrayList<>());
        for(MemberCard m : memberCards){
            allCodes.add(m.getId());
            if(StringUtils.isBlank(m.getCode())){
                continue;
            }
            CardInfoRequest cr = new CardInfoRequest();
            cr.setCardNo(m.getCode());
            cr.setOrgIndexCode(member.getCompanyHkId());
            cr.setPersonId(member.getHkId());
            cr.setCardType(m.getCardType());
            param.getCardList().add(cr);
        }
        //处理新增数据
        BaseResponse<List<CardInfoResponse>> result =  HKService.cardBingding(param);
        if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) ){
            if(result.getData()!=null ){
                for(CardInfoResponse r : result.getData()){
                    doneCodes.add(r.getCardNo());
                }
            }
        }
        if(doneCodes.size()>0){
            memberCardMapper.update(null,new UpdateWrapper<MemberCard>().lambda()
                    .eq(MemberCard::getMemberId,member.getId())
                    .eq(MemberCard::getHkStatus,Constants.ZERO)
                    .set(MemberCard::getHkStatus,Constants.ONE)
                    .set(MemberCard::getHkDate,new Date())
                    .set(MemberCard::getRemark,"开卡成功")
                    .in(MemberCard::getCode,doneCodes));
        }
        memberCardMapper.update(null,new UpdateWrapper<MemberCard>().lambda()
                .eq(MemberCard::getMemberId,member.getId())
                .eq(MemberCard::getHkStatus,Constants.ZERO)
                .set(MemberCard::getHkStatus,Constants.TWO)
                .set(MemberCard::getRemark,"开卡失败")
                .set(MemberCard::getHkDate,new Date())
                .notIn(doneCodes.size()>0,MemberCard::getCode,doneCodes)
                .in(MemberCard::getId,allCodes));
       return   memberCardMapper.selectList(new QueryWrapper<MemberCard>().lambda()
                .eq(MemberCard::getMemberId,member.getId())
                .eq(MemberCard::getType,Constants.TWO)
                .eq(MemberCard::getHkStatus,Constants.ONE)  );
    }
    /**
     *  å¦‚果之前已经和海康同步,则更新用户数据以及人脸数据(可能新增人脸 ä¹Ÿå¯èƒ½æ›´æ–°äººè„¸ï¼‰
     * @param c
@@ -373,6 +475,9 @@
            boolean r = doHkDeleteUser(c.getId(),c.getHkId(),date);
            c.setHkStatus(r?Constants.ONE:Constants.TWO);
            c.setRemark(r?null:"删除海康人员信息失败!");
            c.setIsdeleted(r? Constants.ONE: Constants.ZERO);//删除失败,恢复数据
            //删除所有绑定的卡片信息
            memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,c.getId()));
        }else{
            //处理修改数据,并且更新人脸
            UserAddRequest  addHkModel = getUserAddModel(c,path,1);//修改