k94314517
2024-10-16 17efddc6a667670dca682bf36b51a43e99615e6d
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -4,13 +4,10 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseListPageResponse;
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.visit.EventVisitInfoRequest;
import com.doumee.core.haikang.model.param.respose.*;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.Constants;
@@ -73,14 +70,6 @@
                AppointmentInfoResponse model =  getVisitRecord(c.getHkId());
                if(model == null){
                    continue;
                   /* Visits update = new Visits();
                    //已失效
                    update.setStatus(Constants.VisitStatus.invalid);
                    update.setEditDate(date);
                    update.setId(c.getId());
                    update.setRemark("预约已被清除");
                    visitsMapper.updateById(update);
                    continue;*/
                }
                /**
                 *      * 0:待审核(预约待审批)、
@@ -155,6 +144,92 @@
        }
    }
    /**
     * 查询ICCM访客数据状态
     */
    @Override
    public void getOutTimeVisitRecordIccm(){
        if(Constants.DEALING_HK_VISIT_EXPIRE){
            return   ;
        }
        Constants.DEALING_HK_VISIT_EXPIRE =true;
        try {
            //查询所有需要同步的数据
            List<Visits> list = getExpireVisitList();
            //按照父级申请分批处理每次申请数据
            if(list ==null || list.size()==0){
                return;
            }
            Date date = new Date();
            for(Visits c : list) {
                //发起海康预约接口(需要登记),根据预约返回接口封装申请记录更新字段
                IccmAppointmentListResponse data =  getVisitRecordIccm(c.getHkId());
                if(data == null || data.getVisitorList() ==null || data.getVisitorList().size()==0){
                    continue;
                }
                /**
                 * 访客状态(0:未签到,1:已签到,2:已签退,3:滞留,4:未访问,5:自动签离,6:未签退)
                 */
                IccmAppointmentVisitorResponse model = data.getVisitorList().get(0);
                if (model.getVisitorStatus()!=null && ",4,".contains( ","  +model.getVisitorStatus()+"," )){
                    //对相应状态下的数据进行【已失效】处理
                    Visits update = new Visits();
                    //已失效
                    update.setStatus(Constants.VisitStatus.invalid);
                    update.setEditDate(date);
                    update.setId(c.getId());
                    update.setInDate(DateUtil.getISO8601DateByStr2(data.getVisitStartTime()));
                    update.setOutDate(DateUtil.getISO8601DateByStr2(data.getVisitEndTime()));
                    update.setRemark("超时未登记");
                    visitsMapper.updateById(update);
                }
                if (model.getVisitorStatus()!=null && ",2,5,".contains( ","  +model.getVisitorStatus()+"," )){
                    // 对相应状态下的数据进行【已签离】处理
                    if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signout)){
                        Visits update = new Visits();
                        //已失效
                        update.setStatus(Constants.VisitStatus.signout);
                        update.setEditDate(date);
                        update.setId(c.getId());
                        update.setInDate(DateUtil.getISO8601DateByStr2(data.getVisitStartTime()));
                        update.setOutDate(DateUtil.getISO8601DateByStr2(data.getVisitEndTime()));
                        update.setRemark("已签离");
                        visitsMapper.updateById(update);
                        //先删除原有的在场人员(普通访客)
                        retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                                .eq(Retention::getType,Constants.memberType.visitor)
                                .eq(Retention::getMemberId,c.getMemberId()));
                    }
                }
                if (model.getVisitorStatus()!=null&& ",1,3,6,".contains( ","  +model.getVisitorStatus()+"," )){
                    //如果已登记
                    if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signin)){
                        Visits update = new Visits();
                        //已失效
                        update.setStatus(Constants.VisitStatus.signin);
                        update.setEditDate(date);
                        update.setId(c.getId());
                        update.setInDate(DateUtil.getISO8601DateByStr2(data.getVisitStartTime()));
                        update.setOutDate(DateUtil.getISO8601DateByStr2(data.getVisitEndTime()));
                        update.setRemark("已签到");
                        visitsMapper.updateById(update);
                        //先删除原有的在场人员(普通访客)
                        retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                                .eq(Retention::getType,Constants.memberType.visitor)
                                .eq(Retention::getMemberId,c.getMemberId()));
                        //再插入最新的在厂人员
                        retentionMapper.insert(getRetentionModelByVisitRequest(c,update.getInDate()));
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_VISIT_EXPIRE =false;
        }
    }
    private Retention getRetentionModelByVisitRequest(Visits visits,Date date) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
@@ -195,6 +270,24 @@
        }
        return response.getData().getList().get(0);
    }
    public IccmAppointmentListResponse getVisitRecordIccm(String orderId){
        //分页遍历循环查询所有门禁设备数据
        if(StringUtils.isBlank(orderId)){
            return  null;
        }
        IccmAppointmentListRequest param =  new IccmAppointmentListRequest();
        param.setPageNo(1);
        param.setPageSize(1);
        param.setOrderId(orderId);
        BaseResponse<BaseListPageResponse<IccmAppointmentListResponse>> response = HKService.iccmAppointmentRecords(param);
        if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)  ){
           return null;
        }
        if(response.getData() == null || response.getData().getList() == null|| response.getData().getList().size() ==0){
           return  null;
        }
        return response.getData().getList().get(0);
    }
    @Override
    public  void syncVisitData(){
        if(Constants.DEALING_HK_VISIT){
@@ -206,13 +299,9 @@
        List<DeviceRole> roleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                .eq(DeviceRole::getType, Constants.ONE));
        //标记是否走免登记预约
//        String applyType =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_VISIT_REQUIRED).getCode();
//        String applyLwType =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_LW_REQUIRED).getCode();
        try {
            //查询所有需要同步的数据
            List<Visits> list = getVisitList();
            //按照父级申请分批处理每次申请数据
//            List<Visits> list = getParentList(alllist);
            if(list ==null || list.size()==0){
                return;
            }
@@ -329,7 +418,7 @@
        c.setHkStatus(Constants.ONE);
        c.setHkDate(date);
    }
    private void getUpdateModelByResponseIccm(  Visits c,Date date, List<DeviceRole> roleList,String path ) {
    public static void getUpdateModelByResponseIccm(  Visits c,Date date, List<DeviceRole> roleList,String path ) {
        String code = null;
        String id = null;
        String qrcode = null;
@@ -419,7 +508,7 @@
        request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c));
        return  request;
    }
    private IccmAppointmentMDJRequest getHkMDJRequestParamIccm(Visits c,List<DeviceRole> roleList,String path) {
    public static IccmAppointmentMDJRequest getHkMDJRequestParamIccm(Visits c,List<DeviceRole> roleList,String path) {
        IccmAppointmentMDJRequest request = new IccmAppointmentMDJRequest();
        IccmAppointmentVistorRequest info =getRequestInfoByVisitIccm(c,path);
        if(info == null ){
@@ -429,7 +518,7 @@
        request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
        request.setReceptionistId(c.getReceptMemberHkId());//被访人海康编码
        if(StringUtils.isNotBlank(c.getReason())){
       /* if(StringUtils.isNotBlank(c.getReason())){
            char[] charArray = c.getReason().toCharArray();
            int length = charArray.length;
            if(length>32){
@@ -437,7 +526,7 @@
            }else{
                request.setVisitPurpose(c.getReason());
            }
        }
        }*/
        request.setVisitorInfo(info);
        request.setVisitorPermissionSet(getVisitPermissonRequestIccm(roleList,c));
        return  request;
@@ -463,7 +552,7 @@
        }
        return  p;
    }
    private IccmPermissionSetRequest getVisitPermissonRequestIccm(List<DeviceRole> roleList, Visits c) {
    public static IccmPermissionSetRequest getVisitPermissonRequestIccm(List<DeviceRole> roleList, Visits c) {
        IccmPermissionSetRequest p = new IccmPermissionSetRequest();
        //获取权限组集合
        String[] roles = getHkRoles(c.getDoors(),roleList);
@@ -506,7 +595,7 @@
        request.setVisitorInfoList(infolist);
        return  request;
    }
    private IccmAppointmentRequest getHkRequestParaIccm(Visits c,List<DeviceRole> roleList,String path ) {
    public static  IccmAppointmentRequest getHkRequestParaIccm(Visits c,List<DeviceRole> roleList,String path ) {
        IccmAppointmentRequest request = new IccmAppointmentRequest();
        //申请人信息
        IccmAppointmentVistorRequest info =getRequestInfoByVisitIccm(c,path);
@@ -514,11 +603,11 @@
            //人脸为空,不能进行推送
            return  null;
        }
        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
        request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
        request.setReceptionistId(c.getReceptMemberHkId());//被访人海康编码
        if(StringUtils.isNotBlank(c.getReason())){
      /*  if(StringUtils.isNotBlank(c.getReason())){
            char[] charArray = c.getReason().toCharArray();
            int length = charArray.length;
            if(length>32){
@@ -526,7 +615,7 @@
            }else{
                request.setVisitPurpose(c.getReason());
            }
        }
        }*/
        //获取权限组集合
        request.setVisitorPermissionSet(getVisitPermissonRequestIccm(roleList,c));
        List<IccmAppointmentVistorRequest> infolist = new ArrayList<>();
@@ -581,7 +670,7 @@
        return info;
    }
    private IccmAppointmentVistorRequest getRequestInfoByVisitIccm(Visits c,String path) {
    public static IccmAppointmentVistorRequest getRequestInfoByVisitIccm(Visits c,String path) {
        IccmAppointmentVistorRequest info = new IccmAppointmentVistorRequest();
        //人脸数据
        if(StringUtils.isBlank(c.getName())
@@ -590,9 +679,12 @@
            return  null;
        }
        if(StringUtils.isNotBlank(c.getFaceImg())){
            log.info("===================================="+path+c.getFaceImg()+"======start====");
            info.setVisitorPhoto(ImageBase64Util.Image2Base64(path+c.getFaceImg()));
            log.info("===================================="+path+c.getFaceImg()+"========end===");
        }
        if(info.getVisitorPhoto() == null){
            log.info("===================================="+path+c.getFaceImg()+"======imgerror=====");
            return  null;
        }
        if(StringUtils.isNotBlank(c.getName())){
@@ -604,7 +696,6 @@
                info.setVisitorName(c.getName());
            }
        }
        if(StringUtils.isNotBlank(c.getCompanyName())){
            char[] charArray = c.getCompanyName().toCharArray();
            int length = charArray.length;
@@ -624,11 +715,10 @@
            info.setCertificateType(HKConstants.CertificateType.HUZHAO.getKey()+"");
            info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD,  c.getIdcardNo()));
        }
        return info;
    }
    private String[] getHkRoles(String doors, List<DeviceRole> roleList) {
    public static String[] getHkRoles(String doors, List<DeviceRole> roleList) {
        if(StringUtils.isBlank(doors) || roleList.size()==0|| roleList.size()==0){
            return null;
        }