|  |  |  | 
|---|
|  |  |  | 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.dao.business.model.InterfaceLog; | 
|---|
|  |  |  | 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实现 | 
|---|
|  |  |  | 
|---|
|  |  |  | public class HkSyncPushServiceImpl extends HkSyncBaseServiceImpl { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private InterfaceLogService interfaceLogService; | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | private VisitEventMapper visitEventMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private VisitsJoinMapper visitsMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RetentionMapper retentionMapper; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 海康门禁事件推送 | 
|---|
|  |  |  | * @param param | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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){ | 
|---|
|  |  |  | //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) | 
|---|
|  |  |  | delRetentionLis.add(member.getId()); | 
|---|
|  |  |  | if(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.getData().getExtReceiveTime())); | 
|---|
|  |  |  | 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.getData().getExtReceiveTime())); | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | saveInterfaceLog(param,"/business/hksync/push/visit",result); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.setRepose(result); | 
|---|
|  |  |  | hkMonitoryLogDO.setName(path); | 
|---|
|  |  |  | hkMonitoryLogDO.setUrl(path); | 
|---|
|  |  |  | interfaceLogService.create(hkMonitoryLogDO); | 
|---|
|  |  |  | interfaceLogMapper.insert(hkMonitoryLogDO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|