| 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.EventVisitDataRequest; | 
| import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest; | 
| import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest; | 
| 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.insertBatchSomeColumn(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.insertBatchSomeColumn(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.insertBatchSomeColumn(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.insertBatchSomeColumn(retentionList); | 
|             } | 
|             log.error("【海康访客事件推送】========成功======="); | 
|         }catch (Exception e){ | 
|   | 
|             log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); | 
|         } | 
|         saveInterfaceLog(param,"/business/hksync/push/visit",result,true); | 
|         return  null; | 
|   | 
|     } | 
|   | 
|     /** | 
|      *  根据访客推送访客记录编码,处理访客记录、在场人员等信息 | 
|      */ | 
|     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.insertBatchSomeColumn(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.insertBatchSomeColumn(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); | 
|     } | 
|   | 
|   | 
| } |