package com.doumee.service.business.impl.hksync; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.doumee.config.DataSyncConfig; 
 | 
import com.doumee.config.SpringContextUtil; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsInfoRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.parks.EventParkInfoRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.visit.*; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.DESUtil; 
 | 
import com.doumee.core.utils.DateUtil; 
 | 
import com.doumee.dao.business.*; 
 | 
import com.doumee.dao.business.join.VisitsJoinMapper; 
 | 
import com.doumee.dao.business.model.*; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.service.business.DeviceEventService; 
 | 
import com.doumee.service.business.InterfaceLogService; 
 | 
import com.doumee.service.business.MemberService; 
 | 
import com.github.yulichang.interfaces.MPJBaseJoin; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import com.hikvision.artemis.sdk.config.ArtemisConfig; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 访客权限组信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class HkSyncPushServiceImpl extends HkSyncBaseServiceImpl { 
 | 
  
 | 
    @Autowired 
 | 
    private InterfaceLogMapper interfaceLogMapper; 
 | 
    @Autowired 
 | 
    private CarsMapper carsMapper; 
 | 
    @Autowired 
 | 
    private ParkBookMapper parkBookMapper; 
 | 
    @Autowired 
 | 
    private DeviceEventMapper deviceEventMapper; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
    @Autowired 
 | 
    private DeviceMapper deviceMapper; 
 | 
    @Autowired 
 | 
    private DataSyncConfig dataSyncConfig; 
 | 
    @Autowired 
 | 
    private CarEventMapper carEventMapper; 
 | 
    @Autowired 
 | 
    private VisitEventMapper visitEventMapper; 
 | 
    @Autowired 
 | 
    private VisitsJoinMapper visitsMapper; 
 | 
    @Autowired 
 | 
    private RetentionMapper retentionMapper; 
 | 
    /** 
 | 
     * 海康门禁事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String   dealAcsEvent(EventAcsRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康门禁事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventAcsInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<DeviceEvent> list = new ArrayList<>(); 
 | 
            List<Integer> delRetentionLis = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            for(EventAcsInfoRequest request : events){ 
 | 
                EventDeviceDataRequest model = request.getData(); 
 | 
                if(model ==null){ 
 | 
                    continue; 
 | 
                } 
 | 
                //根据推送人员编码,处理在场、离场人员数据记录 
 | 
                dealMemberDataByRequest(request,delRetentionLis,retentionList); 
 | 
                //封装门禁事件信息表对象 
 | 
                list.add(getDeviceEventModelByRequest(request)); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                deviceEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionLis.size()>0){ 
 | 
                //先删除原有的在场人员(内部人员) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.memberType.internal) 
 | 
                        .in(Retention::getMemberId,delRetentionLis)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            log.error("【海康门禁事件推送】========成功======="); 
 | 
        }catch (Exception e) { 
 | 
            log.error("【海康门禁事件推送】========失败=======:\n" + e.getMessage()); 
 | 
        }finally { 
 | 
            saveInterfaceLog(param,"/business/hksync/push/acs",result,false);//不计日志 
 | 
        } 
 | 
        return  null; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据推送人员编码,处理在场、离场人员数据记录 
 | 
     * @param request 
 | 
     * @param delRetentionLis 
 | 
     * @param retentionList 
 | 
     */ 
 | 
    private void dealMemberDataByRequest(EventAcsInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) { 
 | 
        //海康人员编码 
 | 
        String userNo = request.getData().getExtEventPersonNo(); 
 | 
        if(StringUtils.isNotBlank(userNo)){ 
 | 
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,userNo).last("limit 1")); 
 | 
            if(member !=null){ 
 | 
                //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 
 | 
                Device d = deviceMapper.selectOne(new QueryWrapper<Device>().lambda() 
 | 
                        .eq(Device::getDoorId,request.getSrcIndex()) 
 | 
                        .eq(Device::getIsdeleted,Constants.ZERO) 
 | 
                        .last("limit 1" )); 
 | 
                delRetentionLis.add(member.getId()); 
 | 
                if(!(Constants.equalsInteger(d.getIsEntrance(),Constants.ONE) && Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE)){ 
 | 
                    //如果是进门,录入人员的在场数据记录 
 | 
                    retentionList.add(getRetentionModelByRequest(member,request)); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String getHkImgUrl(String url){ 
 | 
        if(StringUtils.isBlank(url)){ 
 | 
            return null; 
 | 
        } 
 | 
        return HKConstants.IMG_INDEX+url; 
 | 
    } 
 | 
    /** 
 | 
     *封装门禁事件信息表对象 
 | 
     */ 
 | 
    private DeviceEvent getDeviceEventModelByRequest(EventAcsInfoRequest request) { 
 | 
        DeviceEvent event = new DeviceEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setAccessChannel(request.getData().getExtAccessChannel()); 
 | 
        event.setUserType(request.getData().getUserType()); 
 | 
        event.setSvrIndexCode(request.getData().getSvrIndexCode()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setExtEventType(request.getData().getExtEventType()!=null?request.getData().getExtEventType():null); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSeq(request.getData().getSeq()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setExtEventType(request.getData().getExtEventType()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setExtReceiveTime(request.getData().getExtReceiveTime()); 
 | 
        event.setExtEventWhiteListNo(request.getData().getExtEventWhiteListNo()); 
 | 
        event.setExtEventWhiteListNo(request.getData().getExtEventWhiteListNo()); 
 | 
        event.setExtEventVerifyID(request.getData().getExtEventVerifyID()); 
 | 
        event.setExtEventRoleID(request.getData().getExtEventRoleID()); 
 | 
        event.setExtEventReportChannel(request.getData().getExtEventReportChannel()); 
 | 
        event.setExtEventReaderKind(request.getData().getExtEventReaderKind()); 
 | 
        event.setExtEventReaderID(request.getData().getExtEventReaderID()); 
 | 
        event.setExtEventPictureURL(getHkImgUrl(request.getData().getExtEventPictureURL())); 
 | 
        event.setExtEventPersonNo(request.getData().getExtEventPersonNo()); 
 | 
        event.setExtEventMainDevID(request.getData().getExtEventMainDevID()); 
 | 
        event.setExtEventLocalControllerID(request.getData().getExtEventLocalControllerID()); 
 | 
        event.setExtEventInOut(request.getData().getExtEventInOut()); 
 | 
        event.setExtEventIDCardPictureURL(getHkImgUrl(request.getData().getExtEventIDCardPictureURL())); 
 | 
        event.setExtEventEwipNum(request.getData().getExtEventSwipNum()); 
 | 
        event.setExtEventEubDevID(request.getData().getExtEventMainDevID()); 
 | 
        event.setExtEventDoorID(request.getData().getExtEventDoorID()); 
 | 
        event.setExtEventCode(request.getData().getExtEventCode()); 
 | 
        event.setExtEventCaseID(request.getData().getExtEventCaseID()); 
 | 
        event.setExtEventCardNo(request.getData().getExtEventCardNo()); 
 | 
        event.setExtEventAlarmOutID(request.getData().getExtEventAlarmOutID()); 
 | 
        event.setExtEventAlarmInID(request.getData().getExtEventAlarmInID()); 
 | 
        event.setExtAccessChannel(request.getData().getExtAccessChannel()); 
 | 
        //通道事件信息 
 | 
        if(request.getData().getExtEventCustomerNumInfo() !=null){ 
 | 
            event.setTotalTimes(request.getData().getExtEventCustomerNumInfo().getTotalTimes()); 
 | 
            event.setEntryTimes(request.getData().getExtEventCustomerNumInfo().getEntryTimes()); 
 | 
            event.setExitTimes(request.getData().getExtEventCustomerNumInfo().getExitTimes()); 
 | 
            event.setAccessChannel(request.getData().getExtEventCustomerNumInfo().getAccessChannel()); 
 | 
        } 
 | 
        if(request.getData().getExtEventIdentityCardInfo() !=null){ 
 | 
            //人员身份证件信息 
 | 
            event.setBirth(request.getData().getExtEventIdentityCardInfo().getBirth()); 
 | 
            String idnum = request.getData().getExtEventIdentityCardInfo().getIdNum(); 
 | 
            if(StringUtils.isNotBlank(idnum)){ 
 | 
                //身份证号存储密文 
 | 
                event.setIdNum(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 
 | 
                //脱敏手机号显示n 
 | 
                event.setIdcardDecode(Constants.getTuominStr(idnum)); 
 | 
            } 
 | 
            event.setAddress(request.getData().getExtEventIdentityCardInfo().getAddress()); 
 | 
            event.setSex(request.getData().getExtEventIdentityCardInfo().getSex()); 
 | 
            event.setName(request.getData().getExtEventIdentityCardInfo().getName()); 
 | 
            event.setEndDate(request.getData().getExtEventIdentityCardInfo().getEndDate()); 
 | 
            event.setStartDate(request.getData().getExtEventIdentityCardInfo().getStartDate()); 
 | 
            event.setTermOfValidity(request.getData().getExtEventIdentityCardInfo().getTermOfValidity()); 
 | 
        } 
 | 
        return event; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 进厂对象封装成在场人员 
 | 
     * @param member 
 | 
     * @param request 
 | 
     * @return 
 | 
     */ 
 | 
    private Retention getRetentionModelByRequest(Member member, EventAcsInfoRequest request) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setClasses(member.getClasses()); 
 | 
        retention.setCode(member.getCode()); 
 | 
        retention.setIdcardNo(member.getIdcardNo()); 
 | 
        retention.setIdcardDecode(member.getIdcardDecode()); 
 | 
        retention.setName(member.getName()); 
 | 
        retention.setBirthday(member.getBirthday()); 
 | 
        retention.setType(member.getType()); 
 | 
        retention.setCompanyId(member.getCompanyId()); 
 | 
        retention.setCompanyName(member.getCompanyName()); 
 | 
        retention.setEventCode(request.getData().getExtEventCode()+""); 
 | 
        retention.setEventDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setFaceImg(member.getFaceImg()); 
 | 
        retention.setImgurl(member.getImgurl()); 
 | 
        retention.setPhone(member.getPhone()); 
 | 
        retention.setMemberId(member.getId()); 
 | 
        retention.setDeviceName(request.getSrcName()); 
 | 
        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
  
 | 
        return retention; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 海康访客事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String   dealVisitEvent(EventVisitRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventVisitInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<VisitEvent> list = new ArrayList<>(); 
 | 
            List<Integer> delRetentionLis = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            for(EventVisitInfoRequest request : events){ 
 | 
                if(request.getData() ==null ||StringUtils.isBlank(request.getData().getVisitorId())){ 
 | 
                    continue; 
 | 
                } 
 | 
                //海康访客记录编码 
 | 
                if(StringUtils.isNotBlank(request.getData().getVisitorId())){ 
 | 
                    //根据访客推送访客记录编码,处理访客记录、在场人员等信息 
 | 
                    dealVisitDataByRequst(request,delRetentionLis,retentionList); 
 | 
                } 
 | 
                //封装门禁事件信息表对象 
 | 
                list.add(getVisitEventModelByRequest(request)); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                visitEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionLis.size()>0){ 
 | 
                //先删除原有的在场人员(普通访客) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.memberType.visitor) 
 | 
                        .in(Retention::getMemberId,delRetentionLis)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            log.error("【海康访客事件推送】========成功======="); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); 
 | 
        } 
 | 
        saveInterfaceLog(param,"/business/hksync/push/visit",result,true); 
 | 
        return  null; 
 | 
  
 | 
    } 
 | 
    /** 
 | 
     * 海康访客事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String    dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventVisitIccmInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<VisitEvent> list = new ArrayList<>(); 
 | 
            List<Integer> delRetentionLis = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            for(EventVisitIccmInfoRequest request : events){ 
 | 
                if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){ 
 | 
                    continue; 
 | 
                } 
 | 
                if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){ 
 | 
                    continue; 
 | 
                } 
 | 
                //海康访客记录编码 
 | 
                dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,list); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                visitEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionLis.size()>0){ 
 | 
                //先删除原有的在场人员(普通访客) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.memberType.visitor) 
 | 
                        .in(Retention::getMemberId,delRetentionLis)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            log.error("【海康访客事件推送】========成功======="); 
 | 
        }catch (Exception e){ 
 | 
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); 
 | 
        } 
 | 
        saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true); 
 | 
        return  null; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     *  根据访客推送访客记录编码,处理访客记录、在场人员等信息 
 | 
     */ 
 | 
    private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,List<VisitEvent> list) { 
 | 
  
 | 
        EventVisitIccmDataRequest model = request.getData(); 
 | 
        EventVisitIccmInvoiceParamRequest data =  request.getData().getVisitorInvoices(); 
 | 
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Visits.class); 
 | 
        queryWrapper.selectAs(Member::getType,Visits::getMemberType); 
 | 
        queryWrapper.eq(Visits::getHkId,model.getVisitorInvoices().getInvoicesId() );//访客单号 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId ); 
 | 
        queryWrapper.last("limit 1"); 
 | 
        Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper); 
 | 
        if(visits !=null){ 
 | 
            //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 
 | 
            delRetentionLis.add(visits.getMemberId()); 
 | 
            if(dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk){ 
 | 
                //如果是伊利大屏项目,不做处理 
 | 
                return; 
 | 
            } 
 | 
            Visits updateVistis = new Visits(); 
 | 
            updateVistis.setId(visits.getId()); 
 | 
            if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) { 
 | 
                //如果是访客登记,录入人员的在场数据记录 
 | 
                retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType())); 
 | 
                //来访时间 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signin); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); 
 | 
                //更新最新来访时间 
 | 
                Member member = new Member(); 
 | 
                member.setLastVisitDate(updateVistis.getInDate()); 
 | 
                member.setId(visits.getMemberId()); 
 | 
                memberMapper.updateById(member); 
 | 
            }else  if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey())  { 
 | 
                //如果是访客签离事件 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signout); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); 
 | 
                updateVistis.setOutType(Constants.ZERO); 
 | 
                updateVistis.setOutInfo("访客正常签离"); 
 | 
            }else{ 
 | 
                //如果是访客通行 
 | 
            } 
 | 
            updateVistis.setEditDate(new Date()); 
 | 
            //更新访客来访或者签离时间信息 
 | 
            visitsMapper.updateById(updateVistis) ; 
 | 
        } 
 | 
    } 
 | 
    private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(happentTime)); 
 | 
        retention.setClasses(visits.getClasses()); 
 | 
        retention.setCode(visits.getCode()); 
 | 
        retention.setIdcardNo(visits.getIdcardNo()); 
 | 
        retention.setIdcardDecode(visits.getIdcardDecode()); 
 | 
        retention.setName(visits.getName()); 
 | 
        retention.setBirthday(visits.getBirthday()); 
 | 
        retention.setType(visits.getMemberType()); 
 | 
        retention.setCompanyId(visits.getCompanyId()); 
 | 
        retention.setCompanyName(visits.getCompanyName()); 
 | 
        retention.setEventCode(srcType); 
 | 
        retention.setEventDate(retention.getCreateDate()); 
 | 
        retention.setFaceImg(visits.getFaceImg()); 
 | 
        retention.setImgurl(visits.getImgurl()); 
 | 
        retention.setPhone(visits.getPhone()); 
 | 
        retention.setMemberId(visits.getMemberId()); 
 | 
//        retention.setDeviceName(request.getSrcName()); 
 | 
//        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
  
 | 
        return retention; 
 | 
    } 
 | 
    private VisitEvent getVisitEventModelByRequest(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) { 
 | 
        if(request.getData().getTargetPerson() ==null){ 
 | 
            request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest()); 
 | 
        } 
 | 
        VisitEvent event = new VisitEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setVisitorWorkUint(detail.getUnit()); 
 | 
        event.setVisitorId(detail.getVisitorId()); 
 | 
        event.setVisitorCode(detail.getAppointmentCode()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setSvrIndexCode(request.getSrcIndex()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setEndTime(request.getData().getVisitorInvoices().getFinishTime()); 
 | 
        event.setStartTime(request.getData().getVisitorInvoices().getBeginTime()); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setSex(detail.getSex()); 
 | 
        event.setPurpose(request.getData().getVisitorInvoices().getVisitReason()); 
 | 
        event.setPhone(detail.getPhone()); 
 | 
        event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId()); 
 | 
        event.setBeVisitedPersonName(request.getData().getTargetPerson().getName()); 
 | 
        event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName()); 
 | 
        event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName()); 
 | 
        event.setPhotoUrl(getHkImgUrl(detail.getFacePic())); 
 | 
        event.setPersonName(detail.getVisitorName()); 
 | 
        event.setCarNo(detail.getPlateNo()); 
 | 
  
 | 
        event.setIdType(detail.getCertType()); 
 | 
        String idnum = detail.getCertNo(); 
 | 
        if(StringUtils.isNotBlank(idnum)){ 
 | 
            //身份证号存储密文 
 | 
            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 
 | 
            //脱敏手机号显示n 
 | 
            event.setIdcardDecode(Constants.getTuominStr(idnum)); 
 | 
        } 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        return event; 
 | 
    } 
 | 
    /** 
 | 
     *  根据访客推送访客记录编码,处理访客记录、在场人员等信息 
 | 
     */ 
 | 
    private void dealVisitDataByRequst(EventVisitInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) { 
 | 
        EventVisitDataRequest model = request.getData(); 
 | 
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Visits.class); 
 | 
        queryWrapper.selectAs(Member::getType,Visits::getMemberType); 
 | 
        queryWrapper.eq(Visits::getHkId,model.getVisitorId() ); 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId ); 
 | 
        queryWrapper.last("limit 1"); 
 | 
        Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper); 
 | 
        if(visits !=null){ 
 | 
            //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 
 | 
            delRetentionLis.add(visits.getMemberId()); 
 | 
            if(dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk){ 
 | 
                //如果是伊利大屏项目,不做处理 
 | 
                return; 
 | 
            } 
 | 
            Visits updateVistis = new Visits(); 
 | 
            updateVistis.setId(visits.getId()); 
 | 
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){ 
 | 
                //如果是访客登记,录入人员的在场数据记录 
 | 
                retentionList.add(getRetentionModelByVisitRequest(visits,request)); 
 | 
                //来访时间 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signin); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime())); 
 | 
                //更新最新来访时间 
 | 
                Member member = new Member(); 
 | 
                member.setLastVisitDate(updateVistis.getInDate()); 
 | 
                member.setId(visits.getMemberId()); 
 | 
                memberMapper.updateById(member); 
 | 
            }else { 
 | 
                //如果是访客签离事件 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signout); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime())); 
 | 
                updateVistis.setOutType(Constants.ZERO); 
 | 
                updateVistis.setOutInfo("访客正常签离"); 
 | 
            } 
 | 
            updateVistis.setEditDate(new Date()); 
 | 
            //更新访客来访或者签离时间信息 
 | 
            visitsMapper.updateById(updateVistis) ; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private VisitEvent getVisitEventModelByRequest(EventVisitInfoRequest request) { 
 | 
        VisitEvent event = new VisitEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setVisitorWorkUint(request.getData().getVisitorWorkUint()); 
 | 
        event.setVisitorId(request.getData().getVisitorId()); 
 | 
        event.setVisitorCode(request.getData().getVisitorCode()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setSvrIndexCode(request.getData().getSvrIndexCode()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setEndTime(request.getData().getEndTime()); 
 | 
        event.setStartTime(request.getData().getStartTime()); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setSignOrg(request.getData().getSignOrg()); 
 | 
        event.setSex(request.getData().getSex()); 
 | 
        event.setPurpose(request.getData().getPurpose()); 
 | 
        event.setPhone(request.getData().getPhone()); 
 | 
        event.setBeVisitedPersonId(request.getData().getBeVisitedPersonId()); 
 | 
        event.setBeVisitedPersonName(request.getData().getBeVisitedPersonName()); 
 | 
        event.setBeVisitedPersonOrg(request.getData().getBeVisitedPersonOrg()); 
 | 
        event.setBeVisitedPersonOrgId(request.getData().getBeVisitedPersonOrgId()); 
 | 
        event.setVisitorWorkUint(request.getData().getVisitorWorkUint()); 
 | 
        event.setPhotoUrl(getHkImgUrl(request.getData().getPhotoUrl())); 
 | 
        event.setPersonName(request.getData().getPersonName()); 
 | 
        event.setCarNo(request.getData().getCarNo()); 
 | 
        event.setCaptureUrl(request.getData().getCaptureUrl()); 
 | 
        if(StringUtils.isNotBlank(request.getData().getCaptureUrl())){ 
 | 
            event.setCaptureUrl(HKConstants.IMG_INDEX+request.getData().getCaptureUrl()); 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(request.getData().getPhotoUrl())){ 
 | 
  
 | 
            event.setPhotoUrl(HKConstants.IMG_INDEX+request.getData().getPhotoUrl()); 
 | 
        } 
 | 
        event.setIdType(request.getData().getIdType()); 
 | 
        String idnum =request.getData().getIdNo(); 
 | 
        if(StringUtils.isNotBlank(idnum)){ 
 | 
            //身份证号存储密文 
 | 
            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 
 | 
            //脱敏手机号显示n 
 | 
            event.setIdcardDecode(Constants.getTuominStr(idnum)); 
 | 
        } 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        return event; 
 | 
    } 
 | 
  
 | 
    private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setClasses(visits.getClasses()); 
 | 
        retention.setCode(visits.getCode()); 
 | 
        retention.setIdcardNo(visits.getIdcardNo()); 
 | 
        retention.setIdcardDecode(visits.getIdcardDecode()); 
 | 
        retention.setName(visits.getName()); 
 | 
        retention.setBirthday(visits.getBirthday()); 
 | 
        retention.setType(visits.getMemberType()); 
 | 
        retention.setCompanyId(visits.getCompanyId()); 
 | 
        retention.setCompanyName(visits.getCompanyName()); 
 | 
        retention.setEventCode(request.getSrcType()+""); 
 | 
        retention.setEventDate(retention.getCreateDate()); 
 | 
        retention.setFaceImg(visits.getFaceImg()); 
 | 
        retention.setImgurl(visits.getImgurl()); 
 | 
        retention.setPhone(visits.getPhone()); 
 | 
        retention.setMemberId(visits.getMemberId()); 
 | 
//        retention.setDeviceName(request.getSrcName()); 
 | 
//        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
  
 | 
        return retention; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 海康停车场事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String   dealParkEvent(EventParkRequest param, HttpServletResponse response){ 
 | 
        String result = null; 
 | 
        log.info("【海康停车场事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventParkInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<CarEvent> list = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            List<String> delRetentionList = new ArrayList<>(); 
 | 
            for(EventParkInfoRequest request : events){ 
 | 
                if(request.getData() ==null ||StringUtils.isBlank(request.getData().getPlateNo())){ 
 | 
                    continue; 
 | 
                } 
 | 
                //封装事件信息表对象 
 | 
                list.add(getParkEventModelByRequest(request,delRetentionList,retentionList)); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                carEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionList.size()>0){ 
 | 
                //先删除原有的在场人员(内部人员) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.THREE) 
 | 
                        .in(Retention::getCarNo,delRetentionList)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            log.error("【海康停车场事件推送】========成功======="); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
            log.error("【海康停车场事件推送】========失败=======:\n"+e.getMessage()); 
 | 
        } 
 | 
        saveInterfaceLog(param,"/business/hksync/push/parks",result,false); 
 | 
        return  null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据推送数据封装停车事件对象信息 
 | 
     * @param request 
 | 
     * @return 
 | 
     */ 
 | 
    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request, List<String> delRetentionList , List<Retention> retentionList ) { 
 | 
        CarEvent event = new CarEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setVehicleType(request.getData().getVehicleType()); 
 | 
        event.setVehicleColor(request.getData().getVehicleColor()); 
 | 
        event.setVehicleClass(request.getData().getVehicleClass()); 
 | 
        event.setTimestr(request.getData().getTime()); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setSvrIndex(request.getData().getSvrIndex()); 
 | 
        event.setSubModel(request.getData().getSubModel()); 
 | 
        event.setSubLogo(request.getData().getSubLogo()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setRoadwayType(request.getData().getRoadwayType()); 
 | 
        event.setRoadwayName(request.getData().getRoadwayName()); 
 | 
        event.setRoadwayIndex(request.getData().getRoadwayIndex()); 
 | 
        event.setPlateType(request.getData().getPlateType()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setPlateNos(request.getData().getPlateNo()); 
 | 
        event.setPlateColor(request.getData().getPlateColor()); 
 | 
        event.setPlateBelieve(request.getData().getPlateBelieve()); 
 | 
        event.setParkName(request.getData().getParkName()); 
 | 
        event.setParkIndex(request.getData().getParkIndex()); 
 | 
        event.setMainLogo(request.getData().getMainLogo()); 
 | 
        event.setInoutType(request.getData().getInoutType()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setGateName(request.getData().getGateName()); 
 | 
        event.setGateIndex(request.getData().getGateIndex()); 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setEventIndex(request.getData().getEventIndex()); 
 | 
        event.setEventCmd(request.getData().getEventCmd()); 
 | 
        event.setCardNo(request.getData().getCardNo()); 
 | 
        event.setCarAttributeName(request.getData().getCarAttributeName()); 
 | 
  
 | 
        if(request.getData().getInResult()!=null && request.getData().getInResult().getRlsResult() !=null ){ 
 | 
            //放行方式 
 | 
            event.setReleaseWay(request.getData().getInResult().getRlsResult().getReleaseWay()); 
 | 
            event.setReleaseAuth(request.getData().getInResult().getRlsResult().getReleaseAuth()); 
 | 
            event.setReleaseReason(request.getData().getInResult().getRlsResult().getReleaseReason()); 
 | 
            event.setReleaseResult(request.getData().getInResult().getRlsResult().getReleaseResult()); 
 | 
            event.setReleaseResultEx(request.getData().getInResult().getRlsResult().getReleaseResultEx()); 
 | 
        } 
 | 
  
 | 
        if(request.getData().getPicUrl()!=null){ 
 | 
            //车辆和和车牌照片 
 | 
            event.setVehiclePicUrl(getHkImgUrl(request.getData().getPicUrl().getVehiclePicUrl())); 
 | 
            event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl())); 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(event.getPlateNos())){ 
 | 
            ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda() 
 | 
                    .eq(ParkBook::getCarCode,event.getPlateNos()) 
 | 
                            .eq(ParkBook::getIsdeleted,Constants.ZERO ) 
 | 
                    .last("limit 1" )); 
 | 
            if(cars!=null){ 
 | 
                event.setMemberId(cars.getMemberId()); 
 | 
            }else{ 
 | 
                Visits visits =  visitsMapper.selectOne(new QueryWrapper<Visits>().lambda() 
 | 
                        .eq(Visits::getCarNos,event.getPlateNos()) 
 | 
                        .eq(Visits::getIsdeleted,Constants.ZERO ) 
 | 
                        .in(Visits::getStatus,Constants.VisitStatus.signin,Constants.VisitStatus.signout)//最近一个已到达或者已签离 
 | 
                        .isNull(Visits::getParentId) 
 | 
                        .orderByDesc(Visits::getId) 
 | 
                        .last("limit 1" )); 
 | 
                if(visits!=null){ 
 | 
                    //最近使用该车的申请人(已到达) 
 | 
                    event.setMemberId(visits.getMemberId()); 
 | 
                } 
 | 
            } 
 | 
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){ 
 | 
                //如果是入厂放行 
 | 
                delRetentionList.add(event.getPlateNos()); 
 | 
                retentionList.add(getRetentionModelByParkRequest(request)); 
 | 
            }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){ 
 | 
                //如果是出场放行 
 | 
                delRetentionList.add(event.getPlateNos()); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return event; 
 | 
  
 | 
    } 
 | 
  
 | 
    private Retention getRetentionModelByParkRequest(EventParkInfoRequest request) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setCarNo(request.getData().getPlateNo()); 
 | 
        retention.setType(Constants.THREE); 
 | 
//        retention.setDeviceName(request.getSrcName()); 
 | 
//        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
  
 | 
        return retention; 
 | 
    } 
 | 
  
 | 
    private void saveInterfaceLog(Object param, String path,String result,boolean need) { 
 | 
        if(!need){ 
 | 
            return; 
 | 
        } 
 | 
        InterfaceLog hkMonitoryLogDO=new InterfaceLog(); 
 | 
        hkMonitoryLogDO.setType(1); 
 | 
        hkMonitoryLogDO.setCreateDate(new Date()); 
 | 
        hkMonitoryLogDO.setIsdeleted(0); 
 | 
        if(param!=null){ 
 | 
            hkMonitoryLogDO.setRequest(JSONObject.toJSONString(param)); 
 | 
        } 
 | 
        hkMonitoryLogDO.setRepose(result); 
 | 
        hkMonitoryLogDO.setName(path); 
 | 
        hkMonitoryLogDO.setUrl(path); 
 | 
        interfaceLogMapper.insert(hkMonitoryLogDO); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |