jiangping
2023-12-21 bdbb62001dc4c3c63198270269795e54235c0e40
海康接口对接开发
已修改9个文件
440 ■■■■■ 文件已修改
server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java 249 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/openapi/src/main/java/com/doumee/api/web/BizResourceController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -71,19 +71,6 @@
    @ApiOperation("【海康】门禁事件订阅推送对接处理接口")
    @PostMapping("/push/acs")
    public ApiResponse pushAcs(  HttpServletRequest request,@RequestBody EventAcsRequest param, HttpServletResponse response) {
       /* try {
            BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while (true) {
                if (!((line = br.readLine()) != null)) break;
                sb.append(line);
            }
            System.out.println(sb.toString());
        } catch (IOException e) {
                throw new RuntimeException(e);
        }*/
        String result = hkSyncPushService.dealAcsEvent(param,response);
        return ApiResponse.success(result);
    }
server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
@@ -34,7 +34,7 @@
    @ApiModelProperty(value = "更新时间,如2023-11-24 09:47:36")
    private Date editDate;
    @ApiModelProperty(value = "所属组织编码" ,required = true)
    private Integer orgId;
    private String orgId;
    @ApiModelProperty(value = "人脸照片地址" ,required = true)
    private String faceImg;
    @ApiModelProperty(value = "工号" ,required = true)
server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -169,7 +169,7 @@
     *添加人脸信息
     * @return
     */
    public  static  BaseResponse<FaceAddOrEditesponse>  addFace(List<FaceAddRequest> param){
    public  static  BaseResponse<FaceAddOrEditesponse>  addFace( FaceAddRequest  param){
        log.info("【海康添加人脸信息】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.addFace(JSONObject.toJSONString(param));
@@ -187,7 +187,7 @@
     *编辑人脸信息
     * @return
     */
    public  static  BaseResponse<FaceAddOrEditesponse>  editFace(List<FaceEditRequest> param){
    public  static  BaseResponse<FaceAddOrEditesponse>  editFace( FaceEditRequest  param){
        log.info("【海康编辑人脸信息】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.editFace(JSONObject.toJSONString(param));
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
@@ -103,8 +103,8 @@
    @ExcelColumn(name="海康标识")
    private String hkId;
    @ApiModelProperty(value = "海康同步状态 0未同步 1已同步")
    @ExcelColumn(name="海康同步状态 0未同步 1已同步")
    @ApiModelProperty(value = "海康同步状态 0未同步 1已同步 2同步失败")
    @ExcelColumn(name="海康同步状态 0未同步 1已同步 2同步失败")
    private Integer hkStatus;
    @ApiModelProperty(value = "海康最近同步时间")
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -265,6 +265,7 @@
     * @return
     */
    @Override
    @Transactional
    public  String syncUsers(UserListRequest param){
        List<UserListRespone>  list = ErpTool.getErpUserList(ErpConstants.userListUrl,param);
        if(list !=null && list.size()>0) {
@@ -756,8 +757,7 @@
                    ||StringUtils.isNotBlank(param.getFaceImg())
                    ||StringUtils.isNotBlank(param.getCode())
                    ||StringUtils.isNotBlank(param.getPhone())
                    ||Objects.isNull(param.getEditDate())
            ){
                    ||Objects.isNull(param.getEditDate())){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getId()).last("limit 1"));
@@ -776,10 +776,10 @@
                String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                member.setIdcardNo(encryptIdNo);
                member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                member.setCompanyId(param.getOrgId());
                member.setErpOrgId(param.getOrgId());
                doorIds = getRoleIdByParam(param.getRoleIds(),member);
                memberMapper.insert(member);
                //TODO 海康数据创建
                //TODO 海康数据创建-------------修改-------------------
            }else{
                Integer id = member.getId();
                BeanUtils.copyProperties(param,member);
@@ -787,7 +787,7 @@
                String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                member.setIdcardNo(encryptIdNo);
                member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                member.setCompanyId(param.getOrgId());
                member.setErpOrgId(param.getOrgId());
                member.setEditDate(new Date());
                doorIds = getRoleIdByParam(param.getRoleIds(),member);
                member.setErpDate(new Date());
@@ -836,14 +836,13 @@
     */
    private void dealMemberRoleEmpower(Member member, List<Integer> doorIds,Date startTime,Date endTime ) {
        //删除所有老的授权信息
//        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()
        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;
        }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -1,16 +1,23 @@
package com.doumee.service.business.impl.hksync;
import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
import com.doumee.core.haikang.model.param.request.DoorsListRequest;
import com.doumee.core.haikang.model.param.request.ParkListRequest;
import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
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.request.event.acs.EventAcsRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.haikang.model.param.respose.TaskAdditionResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.dao.business.model.Device;
import com.doumee.service.business.HkSyncService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * 设备信息表Service实现
@@ -94,5 +101,59 @@
    @Override
    public     void syncEmpowerDetailData() {
    }
    public boolean addTaskDataAllDel(String userId, String taskId, List<Device> deviceList) {
        if(StringUtils.isBlank(userId )){
            //必填参数校验
            return  false;
        }
        TaskDataAdditionRequest param = new TaskDataAdditionRequest();
        param.setTaskId(taskId);
        List<TaskDataAdditionResourceRequest> resourceInfos = new ArrayList<>();//    object[]    True    资源对象
        for(Device d:deviceList){
            TaskDataAdditionResourceRequest res = new TaskDataAdditionResourceRequest();
            res.setChannelNos(d.getChannelNo().split(","));
            res.setResourceType(d.getResourceType());
            res.setResourceIndexCode(d.getHkId());
            resourceInfos.add(res);
        }
        List<TaskDataAdditionPersonRequest> personInfos = new ArrayList<>();
        TaskDataAdditionPersonRequest pinfo = new TaskDataAdditionPersonRequest();
        pinfo.setOperatorType(HKConstants.OPERA_TYPE.DEL.getKey());
        pinfo.setPersonId(userId);
        param.setResourceInfos(resourceInfos);
        param.setPersonInfos(personInfos);
        BaseResponse response =  HKService.taskDataAddition(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){
            return true;
        }else{
            return  false;
        }
    }
    public boolean startTask(String taskId) {
        TaskProgressRequest param = new TaskProgressRequest();
        param.setTaskId(taskId);
        BaseResponse response =  HKService.taskStart(param);
        if(response!=null
                && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
            return true;
        }else{
            return  false;
        }
    }
    public  String hkTaskAddtion() {
        TaskAdditionRequest param = new TaskAdditionRequest();
        param.setTaskType(HKConstants.TASK_TYPE.FACE.getKey());
        BaseResponse<TaskAdditionResponse> response = HKService.taskAddition(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null
                && StringUtils.isNotBlank(response.getData().getTaskId())){
            return  response.getData().getTaskId();
        }else{
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "海康创建下载任务失败==================");
        }
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -147,7 +147,7 @@
        Constants.DEALING_HK_EMPOWER =true;
        try {
            //先删除所有需要取消授权的数据
//            dealDelListTask(getDealList(Constants.ONE));
            dealDelListTask(getDealList(Constants.ONE));
            //查询所有需要同步的数据
            dealNewListTask(getDealList(Constants.ZERO));
        }catch (Exception e){
@@ -206,7 +206,7 @@
        if(list ==null || list.size()==0){
            return;
        }
        clearAllEmpowerFirst(list);
//        clearAllEmpowerFirst(list);
        Date date = new Date();
        //创建任务
        String taskId = hkTaskAddtion();
@@ -256,8 +256,8 @@
        //创建任务
        String taskId = hkTaskAddtion();
        for(Empower c : list) {
            //向任务添加人员、设备信息数据
            addTaskDataAll(c,taskId,allDevice);
            //向任务刪除人员的所有设备信息数据
            addTaskDataAllDel(c.getHkId(),taskId,allDevice);
        }
        startTask(taskId);
    }
@@ -295,67 +295,7 @@
            return  false;
        }
    }
    private boolean addTaskDataAll(Empower c,String taskId,List<Device> deviceList) {
        if(StringUtils.isBlank(c.getMemberHkId() )
                ||StringUtils.isBlank(c.getDeviceChannelNo())
                ||StringUtils.isBlank(c.getDeviceType())
                ||StringUtils.isBlank(c.getDeviceIndexCode())){
            //必填参数校验
            return  false;
        }
        TaskDataAdditionRequest param = new TaskDataAdditionRequest();
        param.setTaskId(taskId);
        List<TaskDataAdditionResourceRequest> resourceInfos = new ArrayList<>();//    object[]    True    资源对象
        for(Device d:deviceList){
            TaskDataAdditionResourceRequest res = new TaskDataAdditionResourceRequest();
            res.setChannelNos(d.getChannelNo().split(","));
            res.setResourceType(d.getResourceType());
            res.setResourceIndexCode(c.getDeviceIndexCode());
            resourceInfos.add(res);
        }
        List<TaskDataAdditionPersonRequest> personInfos = new ArrayList<>();
        TaskDataAdditionPersonRequest pinfo = new TaskDataAdditionPersonRequest();
        pinfo.setName(c.getMemberName());
        pinfo.setEndTime(DateUtil.getISO8601Timestamp(c.getEndTime()));
        pinfo.setStartTime(DateUtil.getISO8601Timestamp(c.getStartTime()));
        pinfo.setOperatorType(HKConstants.OPERA_TYPE.DEL.getKey());
        pinfo.setPersonId(c.getMemberHkId());
        param.setResourceInfos(resourceInfos);
        param.setPersonInfos(personInfos);
        BaseResponse response =  HKService.taskDataAddition(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){
            return true;
        }else{
            return  false;
        }
    }
    private boolean startTask(String taskId) {
        TaskProgressRequest param = new TaskProgressRequest();
        param.setTaskId(taskId);
        BaseResponse response =  HKService.taskStart(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){
            return true;
        }else{
            return  false;
        }
    }
    private String hkTaskAddtion() {
        TaskAdditionRequest param = new TaskAdditionRequest();
        param.setTaskType(HKConstants.TASK_TYPE.FACE.getKey());
        BaseResponse<TaskAdditionResponse> response = HKService.taskAddition(param);
        if(response!=null
                && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null
                && StringUtils.isNotBlank(response.getData().getTaskId())){
            return  response.getData().getTaskId();
        }else{
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "海康创建下载任务失败==================");
        }
    }
    private List<Empower> getDealList(int del ) {
        MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>();
@@ -367,7 +307,7 @@
        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId);
        queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId);
        queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.wait);
//        queryWrapper.eq( Empower::getIsdeleted,del);
        queryWrapper.eq( Empower::getIsdeleted,del);
//        queryWrapper.last("limit 100");//每次限制下发100个
        List<Empower> list = empowerMapper.selectJoinList(Empower.class,queryWrapper);
        return list;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -4,6 +4,7 @@
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.UserUpdateRequest;
import com.doumee.core.erp.model.openapi.request.erp.UserFailRequest;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
@@ -15,13 +16,9 @@
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.*;
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.dao.business.model.*;
import com.doumee.service.business.ERPSyncService;
import com.github.yulichang.query.MPJQueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -30,6 +27,7 @@
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
@@ -47,9 +45,15 @@
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private MemberRoleMapper memberRoleMapper;
    @Autowired
    private EmpowerMapper empowerMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private ERPSyncService erpSyncService;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -224,47 +228,132 @@
            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());
                }
                dealMemberInfoBiz(c,date,path) ;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_USER =false;
        }
    }
    @Transactional
    private boolean dealMemberInfoBiz(Member c, Date date, String path) {
        if( c.getCompanyId() == null){
            //如果没有组织不做处理
            return  false;
        }
        if(StringUtils.isBlank(c.getHkId())){
            //如果新增同步數據
            dealUserHkAddBiz(c,date,path);
        }else{
            //如果之前已经和海康同步,则更新用户数据以及人脸数据(可能新增人脸 也可能更新人脸)
            dealUserHkEditBiz(c,date,path);
        }
        return  false;
    }
    /**
     *  如果之前已经和海康同步,则更新用户数据以及人脸数据(可能新增人脸 也可能更新人脸)
     * @param c
     * @param date
     * @param path
     */
    private void dealUserHkEditBiz(Member c, Date date, String path) {
        c.setHkStatus(Constants.ONE);
        if(Constants.equalsInteger(Constants.ONE,c.getIsdeleted())){
            //处理删除数据(删除之前下发的海康人员信息)
            boolean r = doHkDeleteUser(c.getId(),c.getHkId(),date);
            c.setHkStatus(r?Constants.ONE:Constants.TWO);
            c.setRemark(r?null:"删除海康人员信息失败!");
        }else{
            //处理修改数据,并且更新人脸
            UserAddRequest  addHkModel = getUserAddModel(c,path,1);//修改
            //处理新增数据
            BaseResponse result =  HKService.editUser(addHkModel);
            if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
                if(StringUtils.isNotBlank(c.getFaceImg())){
                    //如果有人脸照片,处理人脸照片同步
                    String faceid = dealMemberFace(c,path);
                    if(StringUtils.isBlank(faceid)){
                        noticeErpFail(c,Constants.ZERO,"人脸信息更新失败,请检查人脸照片是否合法!");
                        c.setHkStatus(Constants.TWO);
                        c.setRemark("人脸信息更新失败,请检查人脸照片是否合法!!");
                    }else{
                        c.setFaceId(faceid);
                    }
                }
            }else{
                noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!"+result.getCode()+result.getMsg());
                c.setHkStatus(Constants.TWO);
                c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!");
            }
        }
        c.setHkDate(date);
        memberMapper.updateById(c);
    }
    /**
     * 新用户同步到海康平台
     * @param c
     * @param date
     * @param path
     * @return
     */
    private boolean dealUserHkAddBiz(Member c, Date date, String path) {
        if(Constants.equalsInteger(Constants.ONE,c.getIsdeleted())){
            //删除的组织,不做处理,海康状态更新为不处理,下次不再处理这个记录
            c.setHkStatus(Constants.TWO);
            c.setRemark("未同步数据,直接删除");
            memberMapper.updateById(c);
            return  false;
        }
        UserAddRequest addHkModel = getUserAddModel(c,path,0);//新增
        if(addHkModel == null){
            //如果人脸数据不正确,下载失败等原因
            noticeErpFail(c,Constants.ZERO,"人脸照片不存在,获取失败!");
            c.setHkStatus(Constants.TWO);
            c.setRemark("人脸照片不存在,获取失败!");
            memberMapper.updateById(c);
            return  false;
        }
        //处理新增数据
        BaseResponse<UserAddResponse> result =  HKService.addUser(addHkModel);
        if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
            c.setFaceId(result.getData().getFaceId());
            c.setHkStatus(Constants.ONE);
            c.setHkId(addHkModel.getPersonId());
            memberMapper.updateById(c);
            return  true;
        }else{
            noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!"+result.getCode()+result.getMsg());
            c.setHkStatus(Constants.TWO);
            c.setRemark("人员信息同步安防平台失败,请修正后重试!");
            memberMapper.updateById(c);
            return  false;
        }
    }
    /**
     * 处理新增或者修改人脸信息
     * @param c
     * @param path
     * @return
     */
    private String dealMemberFace(Member c,String path) {
        if(StringUtils.isBlank(c.getFaceId())){
            BaseResponse<FaceAddOrEditesponse> response = HKService.addFace(getFaceAddModel(c,path));
            if(StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)&& response.getData()!=null ){
                return  response.getData().getFaceId();
            }
        }else{
            BaseResponse response = HKService.editFace(getFaceUpdateModel(c,path));
            if(StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) ){
                return  c.getFaceId();
            }
        }
        return null;
    }
    /**
@@ -287,53 +376,95 @@
     * @param id
     * @param date
     */
    private void doHkDeleteUser(Integer  id,String delHkIds,  Date date) {
    private boolean doHkDeleteUser(Integer  id,String delHkIds,  Date date ) {
        if(StringUtils.isBlank(delHkIds)){
            return;
            return false;
        }
        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());//删除失败的数据集合
                    }
                }}*/
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.TWO)//同步失败
                        .set(Member::getHkDate,date)
                        .in(Member::getId, id));
            }else{
                //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                        .set(Company::getHkStatus,Constants.ONE)
                        .set(Company::getHkDate,date)
                        .in(Company::getId, id));
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.ONE)//同步成功
                        .set(Member::getHkDate,date)
                        .in(Member::getId, id));
            }
            return true;
        }
        return false;
    }
    /**
     * 删除人员所有设备上的权限信息
     * @param userId
     * @param allDevice
     */
    private void delUserHkRolle(String userId,List<Device> allDevice) {
        //创建任务
        String taskId = hkTaskAddtion();
        //
       if(taskId!=null){
           //删除所有设备上的权限
           addTaskDataAllDel(userId,taskId,allDevice);
           startTask(taskId);
        }
    }
    private UserAddRequest getUserAddModel(Member c,String path) {
    private UserAddRequest getUserAddModel(Member c,String path,int type) {
        UserAddRequest model = new UserAddRequest();
        model.setOrgIndexCode(c.getCompanyHkId());
        model.setPersonId(HKConstants.RES_USER_INDEX+UUID.randomUUID().toString().replace("-", ""));
        model.setPersonId(type == 0 ?HKConstants.RES_USER_INDEX+UUID.randomUUID().toString().replace("-", ""):c.getHkId());
        model.setGender(Constants.formatIntegerNum(c.getSex())+"");
        model.setPersonName(c.getName());
        if(StringUtils.isNotBlank(c.getFaceImg())){
        if(type== 0 && StringUtils.isNotBlank(c.getFaceImg())){
            model.setFaces(new ArrayList<>());
            UserAddFaceRequest face = new UserAddFaceRequest();
            String imageBase = ImageBase64Util.Image2Base64(path+c.getFaceImg());
            if(face.getFaceData() == null){
            if(imageBase== null){
                //人脸数据不正确,
                return  null;
            }
            face.setFaceData(imageBase);
            model.getFaces().add(face);
        }
        return  model;
    }
    private FaceAddRequest getFaceAddModel(Member c,String path) {
        FaceAddRequest model = new FaceAddRequest();
        model.setPersonId(c.getHkId());
        if(StringUtils.isNotBlank(c.getFaceImg())){
            String imageBase = ImageBase64Util.Image2Base64(path+c.getFaceImg());
            if(imageBase == null){
                //人脸数据不正确,
                return  null;
            }
            model.setFaceData(imageBase);
        }
        return  model;
    }
    private FaceEditRequest getFaceUpdateModel(Member c,String path) {
        FaceEditRequest model = new FaceEditRequest();
        model.setFaceId(c.getFaceId());
        if(StringUtils.isNotBlank(c.getFaceImg())){
            String imageBase = ImageBase64Util.Image2Base64(path+c.getFaceImg());
            if(imageBase == null){
                //人脸数据不正确,
                return  null;
            }
            model.setFaceData(imageBase);
        }
        return  model;
    }
}
server/openapi/src/main/java/com/doumee/api/web/BizResourceController.java
@@ -157,7 +157,9 @@
    @ApiOperation(value = "FTP账户信息", notes = "访客端提供,供ERP端调用,FTP账户信息")
    @ApiOperation(value = "FTP账户信息", notes = "访客端提供,供ERP端调用,FTP账户信息,其中【FTP资源访问映射地址】用于图片回显使用," +
            "比如人脸图片回显拼接:【FTP资源访问映射地址】+【FTP用户图片存储目录】+【实际人脸图片存储字段内容】" +
            "如:http://175.27.187.84/file4/member/20231211/skjd-skdjf4enc-flgk.png")
    @GetMapping("/resource/ftpAccount")
    public ApiResponse<Map<String,Object>> ftpAccount() {
        Map<String,Object> map = new HashMap<>();
@@ -177,6 +179,8 @@
        systemDictDataBiz.queryByCode(Constants.FTP,Constants.DEVICE_EVENT_IMG).getCode());
        map.put("FTP用户图片存储目录",
        systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode());
        map.put("FTP资源访问映射地址",
        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode());
        return  ApiResponse.success(map);
    }