|  |  |  | 
|---|
|  |  |  | 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.hikvision.artemis.sdk.config.ArtemisConfig; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.checkerframework.checker.units.qual.C; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private InterfaceLogMapper interfaceLogMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CarsMapper carsMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ParkBookMapper parkBookMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DeviceEventMapper deviceEventMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MemberMapper memberMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DataSyncConfig dataSyncConfig; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CarEventMapper carEventMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | event.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); | 
|---|
|  |  |  | event.setEventId(request.getEventId()); | 
|---|
|  |  |  | event.setEventType( request.getData().getExtEventType()!=null?request.getData().getExtEventType()+"":null); | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.setOutDate(DateUtil.getISO8601DateByStr(model.getStartTime())); | 
|---|
|  |  |  | 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("访客正常签离"); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.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.setEventType(request.getEventType()); | 
|---|
|  |  |  | event.setEventId(request.getEventId()); | 
|---|
|  |  |  | event.setHappenTime(event.getHappenTime()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return event; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | Retention retention = new Retention(); | 
|---|
|  |  |  | retention.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); | 
|---|
|  |  |  | retention.setClasses(visits.getMemberClasses()); | 
|---|
|  |  |  | retention.setClasses(visits.getClasses()); | 
|---|
|  |  |  | retention.setCode(visits.getCode()); | 
|---|
|  |  |  | retention.setIdcardNo(visits.getIdcardNo()); | 
|---|
|  |  |  | retention.setIdcardDecode(visits.getIdcardDecode()); | 
|---|
|  |  |  | 
|---|
|  |  |  | retention.setType(visits.getMemberType()); | 
|---|
|  |  |  | retention.setCompanyId(visits.getCompanyId()); | 
|---|
|  |  |  | retention.setCompanyName(visits.getCompanyName()); | 
|---|
|  |  |  | retention.setEventCode(request.getEventType()+""); | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | //        retention.setDeviceName(request.getSrcName()); | 
|---|
|  |  |  | //        retention.setDeviceIndex(request.getSrcIndex()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return retention; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | 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){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.ONE ) | 
|---|
|  |  |  | .last("limit 1" )); | 
|---|
|  |  |  | if(cars!=null){ | 
|---|
|  |  |  | event.setMemberId(cars.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) { | 
|---|
|  |  |  | InterfaceLog hkMonitoryLogDO=new InterfaceLog(); | 
|---|
|  |  |  | hkMonitoryLogDO.setType(1); | 
|---|