jiangping
2023-12-18 98e52a2d1a05276e11d2e5c99ec05e670228fbd6
海康接口对接开发
已修改5个文件
182 ■■■■ 文件已修改
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentResponse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -103,6 +103,49 @@
        }
    }
    /**
     * 证件类型
     */
    public  enum CertificateType {
        SHENFENZHENG(111, "身份证"  ),
        HUZHAO(414, "护照"  ),
        HUKOUBEN(113, "户口簿"  ),
        JIASHIZHENG(335, "驾驶证"  ),
        GONGXUOZHENG(131, "工作证"  ),
        XUESHENGZHENG(133, "学生证"  ),
        QITA(990, "其他"  )
        ;
        // 成员变量
        private String name;
        private int key;
        // 构造方法
        CertificateType(int 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 int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
    }
    public  enum ReturnCode {
        PARK_LINE_IN("0x00072001", "资源信息不存在"  )
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentResponse.java
@@ -10,5 +10,5 @@
public class VisitAppointmentResponse {
    private String  appointRecordId;//    string    False    预约记录ID,可作为修改、取消预约的依据
    private List<VisitAppointmentVistorRequest>   appointmentInfoList;//    object[]    False    预约详细信息
    private List<VisitAppointmentMDJResponse>   appointmentInfoList;//    object[]    False    预约详细信息
}
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -87,10 +87,22 @@
    try {
        birthday = dateFormat.parse(birthdayString);
    } catch (Exception e) {
        throw new RuntimeException(e);
//        throw new RuntimeException(e);
    }
    return  birthday;
}
    public static  Integer   getSexByCardNo(String idCard){
        if(idCard ==null || idCard.length()<17){
            return null;
        }
        String str = idCard.substring(16, 17); // 截取身份证号的前六位数字作为出生日期
        try {
            Integer num  = Integer.parseInt(str);
            return  (num % 2 !=0) ? 1:2 ;
        } catch (Exception e) {
        }
        return  null;
    }
    /**
     *   判断是否为有效车牌号
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -10,6 +10,7 @@
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.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.ImageBase64Util;
import com.doumee.dao.business.CompanyMapper;
@@ -57,6 +58,8 @@
            return   ;
        }
        Constants.DEALING_HK_VISIT =true;
        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
        List<DeviceRole> roleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                .eq(DeviceRole::getType, Constants.ONE));
        //标记是否走免登记预约
@@ -64,9 +67,9 @@
        String applyLwType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_LW_REQUIRED).getCode();
        try {
            //查询所有需要同步的数据
            List<Visits> alllist = getVisitList();
            List<Visits> list = getVisitList();
            //按照父级申请分批处理每次申请数据
            List<Visits> list = getParentList(alllist);
//            List<Visits> list = getParentList(alllist);
            if(list ==null || list.size()==0){
                return;
            }
@@ -74,7 +77,7 @@
            for(Visits c : list) {
                //发起海康预约接口(需要登记),根据预约返回接口封装申请记录更新字段
                String type = Constants.equalsInteger(c.getType(),Constants.ONE)?applyType:applyLwType;
                getUpdateModelByResponse(c,date,type,roleList);
                getUpdateModelByResponse(c,date,type,roleList,path);
                visitsMapper.updateById(c);
            }
        }catch (Exception e){
@@ -117,69 +120,143 @@
     * @param date
     * @param type 0需要登记 1免登记
     */
    private void getUpdateModelByResponse(  Visits c,Date date,String type,List<DeviceRole> roleList ) {
    private void getUpdateModelByResponse(  Visits c,Date date,String type,List<DeviceRole> roleList,String path ) {
        String code = null;
        String id = null;
        //发起海康预约接口
        if(StringUtils.equals(type,"0")){
            //(需要登记)
            BaseResponse<VisitAppointmentResponse> response =  HKService.visitAppiontment(getHkRequestPara(c,roleList));
            VisitAppointmentRequest request =  getHkRequestPara(c,roleList,path);
            if(request == null){
                //海康下发成功
                c.setStatus(Constants.VisitStatus.xfFail);//下发海康失败
                c.setRemark("下发海康参数不正确!");
                c.setHkStatus(Constants.ONE);
                c.setHkDate(date);
                return;
            }
            BaseResponse<VisitAppointmentResponse> response =  HKService.visitAppiontment(request);
            code =response!=null ?response.getCode():null;
            id = (response!=null && response.getData()!=null
                    && response.getData().getAppointmentInfoList() !=null
                    && response.getData().getAppointmentInfoList().size()>0)?response.getData().getAppointmentInfoList().get(0).getOrderId():null;
        }else{
            //免登记
            BaseResponse<VisitAppointmentMDJResponse> response = HKService.visitAppiontmentMDJ(getHkMDJRequestPara(c) );
            VisitAppointmentMDJRequest request =getHkMDJRequestPara(c,roleList,path);
            if(request == null){
                //海康下发成功
                c.setStatus(Constants.VisitStatus.xfFail);//下发海康失败
                c.setRemark("下发海康免登记参数不正确!");
                c.setHkStatus(Constants.ONE);
                c.setHkDate(date);
                return;
            }
            BaseResponse<VisitAppointmentMDJResponse> response = HKService.visitAppiontmentMDJ(request );
            code =response!=null ?response.getCode():null;
            id = (response!=null && response.getData()!=null)?response.getData().getOrderId():null;
        }
        if (code!= null && id!=null) {
            //海康下发成功
            c.setHkId( id);//预约标识
            c.setRemark("下发海康成功!【"+type+"】");
            c.setStatus(Constants.VisitStatus.xfSuccess);//下发海康成功
        } else {
            //海康下发成功
            c.setRemark("下发海康失败!【"+type+"】");
            c.setStatus(Constants.VisitStatus.xfFail);//下发海康失败
        }
        c.setHkStatus(Constants.ONE);
        c.setHkDate(date);
    }
    private VisitAppointmentMDJRequest getHkMDJRequestPara(Visits c) {
    /**
     * 免登记接口参数
     * @param c
     * @return
     */
    private VisitAppointmentMDJRequest getHkMDJRequestPara(Visits c,List<DeviceRole> roleList,String path) {
        VisitAppointmentMDJRequest request = new VisitAppointmentMDJRequest();
        VisitAppointmentVistorRequest info =getRequestInfoByVisit(c,path);
        if(info == null ){
            //人脸为空,不能进行推送
        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());
        request.setVisitorInfo(info);
        request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c));
        return  request;
    }
    /**
     * 访客权限组
     * @param roleList
     * @param c
     * @return
     */
    private VisitAppointmentPermissonRequest getVisitPermissonRequest(List<DeviceRole> roleList, Visits c) {
        VisitAppointmentPermissonRequest p = new VisitAppointmentPermissonRequest();
        //获取权限组集合
        String[] roles = getHkRoles(c.getDoors(),roleList);
        if(roles==null || roles.length ==0){
            //使用默认访客权限组
            request.getVisitorPermissionSet().setDefaultPrivilegeGroupFlag(Constants.ONE+"");
            p.setDefaultPrivilegeGroupFlag(Constants.ONE+"");
        }else{
            //指定有效海康访客权限组数据
            request.getVisitorPermissionSet().setDefaultPrivilegeGroupFlag(Constants.ZERO+"");
            request.getVisitorPermissionSet().setPrivilegeGroupIds(roles);
            p.setDefaultPrivilegeGroupFlag(Constants.ZERO+"");
            p.setPrivilegeGroupIds(roles);
        }
        return  p;
    }
    private VisitAppointmentRequest getHkRequestPara(Visits c,List<DeviceRole> roleList,String path ) {
        VisitAppointmentRequest request = new VisitAppointmentRequest();
        //申请人信息
        VisitAppointmentVistorRequest info =getRequestInfoByVisit(c,path);
        if(info == null ){
            //人脸为空,不能进行推送
            return  null;
        }
        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
        request.setReceptionistId(c.getReceptMemberHkId());//被访人海康编码
        request.setVisitPurpose(c.getReason());
        //获取权限组集合
        request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c));
        List<VisitAppointmentVistorRequest> infolist = new ArrayList<>();
        //申请人
        infolist.add(getRequestInfoByVisit(c));
        if(c.getVisitsList() != null){
            //随访人
            for(Visits v : c.getVisitsList()){
                infolist.add(getRequestInfoByVisit(v));
            }
        }
        infolist.add(info);
        request.setVisitorInfoList(infolist);
        return  request;
    }
    private VisitAppointmentVistorRequest getRequestInfoByVisit(Visits c) {
    private VisitAppointmentVistorRequest getRequestInfoByVisit(Visits c,String path) {
        VisitAppointmentVistorRequest info = new VisitAppointmentVistorRequest();
        //人脸数据
        if(StringUtils.isBlank(c.getName())
                ||StringUtils.isBlank(c.getPhone())
                || StringUtils.isBlank(c.getFaceImg()) ){
            return  null;
        }
        if(StringUtils.isNotBlank(c.getFaceImg())){
            info.setVisitorPhoto(ImageBase64Util.Image2Base64(path+c.getFaceImg()));
        }
        if(info.getVisitorPhoto() == null){
            return  null;
        }
        info.setVisitorName(c.getName());
        info.setVisitorWorkUnit(c.getCompanyName());
        info.setPhoneNo(c.getPhone());
        info.setPlateNo(c.getCarNos());
        if(Constants.equalsInteger(c.getIdcardType(),Constants.ZERO)){
            info.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
            info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
        } else if(Constants.equalsInteger(c.getIdcardType(),Constants.TWO)){
            info.setCertificateType(HKConstants.CertificateType.HUZHAO.getKey()+"");
            info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD,  c.getIdcardNo()));
        }
        return info;
    }