|  |  | 
 |  |  | package com.doumee.service.business.impl.hksync; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.C; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
 |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
 |  |  | 
 |  |  | import com.doumee.dao.business.model.*; | 
 |  |  | import com.doumee.dao.business.model.Member; | 
 |  |  | import com.doumee.dao.web.reqeust.SavePlatformWarnEventDTO; | 
 |  |  | import com.doumee.service.business.CategoryService; | 
 |  |  | import com.doumee.service.business.VisitsService; | 
 |  |  | import com.doumee.service.business.impl.PlatformWarnEventServiceImpl; | 
 |  |  | import com.doumee.service.business.third.TmsService; | 
 |  |  | 
 |  |  | import com.doumee.service.business.third.model.response.TmsOrderInfoResponse; | 
 |  |  | import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.commons.lang3.ObjectUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  | import org.apache.commons.net.ftp.FTP; | 
 |  |  | import org.springframework.beans.BeanUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | 
 |  |  |             if(delRetentionLis.size()>0){ | 
 |  |  |                 //先删除原有的在场人员(内部人员) | 
 |  |  |                 retentionMapper.delete(new UpdateWrapper<Retention>().lambda() | 
 |  |  |                         .eq(Retention::getType,Constants.memberType.internal) | 
 |  |  | //                        .eq(Retention::getType,Constants.memberType.internal) | 
 |  |  |                         .in(Retention::getMemberId,delRetentionLis)); | 
 |  |  |             } | 
 |  |  |             if(retentionList.size()>0){ | 
 |  |  | 
 |  |  |             record.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime())); | 
 |  |  |             record.setTimeInfo(Utils.Date.getStart(record.getCreateDate())); | 
 |  |  |             record.setType(Constants.ONE);//人员 | 
 |  |  |             record.setDeviceName(request.getSrcName()); | 
 |  |  |             record.setMemberType(Constants.RetentionMemberType.fk);//默认为未知人员(访客) | 
 |  |  |             record.setIsdeleted(Constants.ZERO); | 
 |  |  |             record.setHkEventId(request.getEventId()); | 
 |  |  |             record.setHkId(userNo); | 
 |  |  |             if(d!=null && Constants.equalsInteger(d.getIsEntrance(),Constants.ONE)){ | 
 |  |  |                 if(Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE){ | 
 |  |  |                 if(Constants.formatIntegerNum(request.getData().getExtEventInOut()) == Constants.ONE){ | 
 |  |  |                     //如果是进门,录入人员的在场数据记录 | 
 |  |  |                     record.setInOrOut(Constants.ZERO); | 
 |  |  |                     inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1);//入场人次 | 
 |  |  | 
 |  |  |                     delRetentionLis.add(member.getId()); | 
 |  |  |                     if( Constants.formatIntegerNum(request.getData().getExtEventInOut()) == Constants.ONE){ | 
 |  |  |                         //如果是进门,录入人员的在场数据记录 | 
 |  |  |                         retentionList.add(getRetentionModelByRequest(member,request)); | 
 |  |  |                         if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ | 
 |  |  |                             record.setMemberType(Constants.RetentionMemberType.internalMember); | 
 |  |  |                             inoutDayCount.setInSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getInSelfMemberNum())+1);//内部人员入场人次 | 
 |  |  | 
 |  |  |                             record.setMemberType(Constants.RetentionMemberType.relMember); | 
 |  |  |                             inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1);//相关方入场人次 | 
 |  |  |                         } | 
 |  |  |                         retentionList.add(getRetentionModelByRequest(member,request,record.getMemberType())); | 
 |  |  |                     }else{ | 
 |  |  |                         if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ | 
 |  |  |                             record.setMemberType(Constants.RetentionMemberType.internalMember); | 
 |  |  | 
 |  |  |                             inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//相关方出场人次 | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 if(record.getMemberType()!=null){ | 
 |  |  |                     inoutRecordList.add(record); | 
 |  |  |                     if(record.getMemberType()!=null){ | 
 |  |  |                         inoutRecordList.add(record); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |      * @param request | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     private Retention getRetentionModelByRequest(Member member, EventAcsInfoRequest request) { | 
 |  |  |     private Retention getRetentionModelByRequest(Member member, EventAcsInfoRequest request,int memberType) { | 
 |  |  |         Retention retention = new Retention(); | 
 |  |  |         retention.setIsdeleted(Constants.ZERO); | 
 |  |  |         retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); | 
 |  |  | 
 |  |  |         retention.setIdcardDecode(member.getIdcardDecode()); | 
 |  |  |         retention.setName(member.getName()); | 
 |  |  |         retention.setBirthday(member.getBirthday()); | 
 |  |  |         retention.setType(member.getType()); | 
 |  |  |         retention.setType(memberType); | 
 |  |  |         retention.setCompanyId(member.getCompanyId()); | 
 |  |  |         retention.setCompanyName(member.getCompanyName()); | 
 |  |  |         retention.setEventCode(request.getData().getExtEventCode()+""); | 
 |  |  | 
 |  |  |                     updateVistis.setOutInfo("访客正常签离"); | 
 |  |  |                 } | 
 |  |  |                 delRetentionLis.add(visits.getMemberId()); | 
 |  |  |             }else{ | 
 |  |  |                 //如果人员信息存在,切是访客通行,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) | 
 |  |  |             }else  if(!(request.getData().getParamValues()!=null | 
 |  |  |                         && StringUtils.isNotBlank(request.getData().getParamValues().getPlateNos()) | 
 |  |  |                         && StringUtils.isNotBlank(request.getData().getParamValues().getParkIndex()))){ | 
 |  |  |                 //只处理访客门禁通行通行, | 
 |  |  |                 //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) | 
 |  |  |                 delRetentionLis.add(visits.getMemberId()); | 
 |  |  |                 InoutRecord record = new InoutRecord(); | 
 |  |  |                 record.setDeviceName((request.getData()!=null &&request.getData().getParamValues()!=null)? | 
 |  |  |                         request.getData().getParamValues().getSrcName():request.getSrcName()); | 
 |  |  |                 record.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime())); | 
 |  |  |                 record.setTimeInfo(Utils.Date.getStart(record.getCreateDate())); | 
 |  |  |                 record.setType(Constants.ONE);//人员 | 
 |  |  |                 record.setMemberType(Constants.ZERO); | 
 |  |  |                 record.setMemberType(Constants.RetentionMemberType.fk); | 
 |  |  |                 record.setIsdeleted(Constants.ZERO); | 
 |  |  |                 record.setMemberName(visits.getName()); | 
 |  |  |                 record.setObjId(visits.getId()); | 
 |  |  | 
 |  |  |                 record.setInOrOut(Constants.ZERO); | 
 |  |  |                 record.setHkEventId(request.getEventId()); | 
 |  |  |                 record.setHkId(visits.getHkId()); | 
 |  |  |                 record.setDeviceName((request.getData()!=null &&request.getData().getParamValues()!=null)? | 
 |  |  |                         request.getData().getParamValues().getSrcName():request.getSrcName()); | 
 |  |  |                 //如果是访客通行 | 
 |  |  |                 if(request.getData()!=null&&request.getData().getParamValues()!=null && | 
 |  |  |                         StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ | 
 |  |  |                     //如果是访客登记,录入人员的在场数据记录 | 
 |  |  |                 if(request.getData()!=null | 
 |  |  |                         &&request.getData().getParamValues()!=null | 
 |  |  |                         &&StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ | 
 |  |  |                     //如果是访客进入,录入人员的在场数据记录 | 
 |  |  |                     Retention r = getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()); | 
 |  |  |                     r.setCarNo(request.getData().getParamValues().getPlateNos()); | 
 |  |  |                     r.setAccessType(request.getData().getParamValues().getAccessType()); | 
 |  |  | 
 |  |  |                     r.setDeviceIndex(request.getData().getParamValues().getSrcIndex()); | 
 |  |  |                     retentionList.add(r); | 
 |  |  |                     inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); | 
 |  |  |                     record.setInOrOut(Constants.ZERO);//进入园区 | 
 |  |  |                 } | 
 |  |  |                 if(request.getData()!=null&&request.getData().getParamValues()!=null && | 
 |  |  |                          !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ | 
 |  |  |                         !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ | 
 |  |  |                     inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1); | 
 |  |  |                     record.setInOrOut(Constants.ONE); | 
 |  |  |                     record.setInOrOut(Constants.ONE);//离园 | 
 |  |  |                 } | 
 |  |  |                 inoutRecordList.add(record); | 
 |  |  |                 if( request.getData().getParamValues()!=null | 
 |  |  |                         && StringUtils.isNotBlank(request.getData().getParamValues().getPlateNos()) | 
 |  |  |                         && StringUtils.isNotBlank(request.getData().getParamValues().getParkIndex())) { | 
 |  |  |                     //如果是停车场事件,记录车辆类型 | 
 |  |  |                     Category category = null; | 
 |  |  |                     record.setCarCode(request.getData().getParamValues().getPlateNos()); | 
 |  |  |                     if (StringUtils.isNotBlank(record.getCarCode())) { | 
 |  |  |                         category = categoryMapper.selectJoinOne(Category.class, new MPJLambdaWrapper<Category>() | 
 |  |  |                                 .selectAll(Category.class) | 
 |  |  |                                 .select("t4.name", Category::getParentName) | 
 |  |  |                                 .leftJoin("category t4 on t.parent_id=t4.id") | 
 |  |  |                                 .eq(Category::getIsdeleted, Constants.ZERO) | 
 |  |  |                                 .eq(Category::getBizType, Constants.RetentionCarType.fkCar) | 
 |  |  |                                 .last("limit 1")); | 
 |  |  |                         if (category == null) { | 
 |  |  |                             category = new Category(); | 
 |  |  |                             category.setName("访客车辆"); | 
 |  |  |                         } | 
 |  |  |                         category.setParentName(StringUtils.defaultString(category.getParentName(), "访客车辆")); | 
 |  |  |                     } | 
 |  |  |                     record.setCarBizType(Constants.RetentionCarType.fkCar); | 
 |  |  |                     record.setCategoryId(category.getId()); | 
 |  |  |                     record.setDeviceName(request.getData().getParamValues().getGateName()); | 
 |  |  |                     record.setCategoryName(category.getName()); | 
 |  |  |                     record.setCategoryParentId(category.getParentId()); | 
 |  |  |                     record.setCategoryParentName(category.getParentName()); | 
 |  |  |                     if (Constants.equalsInteger(record.getInOrOut(), Constants.ONE)) { | 
 |  |  |                         record.setRemark("访客跟随车辆离园并自动签离"); | 
 |  |  |                         try { | 
 |  |  |                             //访客申请自动签离 | 
 |  |  |                             visitsService.visitLevelForCarOut(visits); | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             log.error("访客跟随车辆出园自动签离失败:===========" + e.getMessage()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 inoutRecordList.add(record);//进出记录 | 
 |  |  |             } | 
 |  |  |             updateVistis.setEditDate(new Date()); | 
 |  |  |             //更新访客来访或者签离时间信息 | 
 |  |  | 
 |  |  |         event.setSrcParentIndex(request.getSrcParentIndex()); | 
 |  |  |         event.setSrcName((request.getData()!=null &&request.getData().getParamValues()!=null)? | 
 |  |  |                 request.getData().getParamValues().getSrcName():request.getSrcName()); | 
 |  |  |         if(StringUtils.isBlank(event.getSrcName())){ | 
 |  |  |             event.setSrcName((request.getData()!=null &&request.getData().getParamValues()!=null)? | 
 |  |  |                     request.getData().getParamValues().getGateName()+ request.getData().getParamValues().getParkIndex():request.getSrcName()); | 
 |  |  |         } | 
 |  |  |         event.setSrcIndex(request.getSrcIndex()); | 
 |  |  |         event.setSex(detail.getSex()); | 
 |  |  |         event.setPurpose(request.getData().getVisitorInvoices().getVisitReason()); | 
 |  |  | 
 |  |  |         String result = null; | 
 |  |  |         log.info("【海康停车场事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); | 
 |  |  |         try { | 
 |  |  |             if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ | 
 |  |  |             if(param == null | 
 |  |  |                     || param.getParams() == null | 
 |  |  |                     || param.getParams().getEvents()==null){ | 
 |  |  |                 return null; | 
 |  |  |             } | 
 |  |  |             //门禁事件集合 | 
 |  |  | 
 |  |  |             List<CarEvent> list = new ArrayList<>(); | 
 |  |  |             List<Retention> retentionList = new ArrayList<>(); | 
 |  |  |             List<String> delRetentionList = new ArrayList<>(); | 
 |  |  |             List<Integer> delMemberRetentionList = new ArrayList<>(); | 
 |  |  |             List<Retention> delMemberRetentionList = new ArrayList<>(); | 
 |  |  |             InoutDayCount inoutDayCount = new InoutDayCount(); | 
 |  |  |             List<InoutRecord> inoutRecordList = new ArrayList<>(); | 
 |  |  |             for(EventParkInfoRequest request : events){ | 
 |  |  | 
 |  |  |                 carEventMapper.insert(list); | 
 |  |  |             } | 
 |  |  |             if(delRetentionList.size()>0){ | 
 |  |  |                 //先删除原有的在场人员(内部人员) | 
 |  |  |                 //先删除原有的在场车辆人员(内部人员) | 
 |  |  |                 retentionMapper.delete(new UpdateWrapper<Retention>().lambda() | 
 |  |  |                         .eq(Retention::getType,Constants.THREE) | 
 |  |  |                         .in(Retention::getCarNo,delRetentionList)); | 
 |  |  |             } | 
 |  |  |             if(delMemberRetentionList.size()>0){ | 
 |  |  |                 //先删除原有的在场人员(内部人员和访客) | 
 |  |  |                 retentionMapper.delete(new UpdateWrapper<Retention>().lambda() | 
 |  |  |                         .in(Retention::getType,Constants.memberType.internal,Constants.memberType.visitor) | 
 |  |  |                         .in(Retention::getMemberId,delMemberRetentionList)); | 
 |  |  |                 //先删除原有的在场人员(内部人员、相关方和访客) | 
 |  |  |                 List<Integer> memberList = new ArrayList<>(); | 
 |  |  |                 for(Retention m :delMemberRetentionList){ | 
 |  |  |                     if(m.getMemberId()!=null){ | 
 |  |  |                         //跟随车辆入场的member存在的数据立场 | 
 |  |  |                         retentionMapper.delete(new UpdateWrapper<Retention>().lambda() | 
 |  |  |                                 .in(Retention::getType,Constants.RetentionMemberType.internalMember | 
 |  |  |                                         ,Constants.RetentionMemberType.relMember | 
 |  |  |                                         ,Constants.RetentionMemberType.fk | 
 |  |  |                                         ,Constants.RetentionMemberType.driver) | 
 |  |  |                                 .eq(Retention::getMemberId,m.getMemberId())); | 
 |  |  |                     }else  if(m.getCarNo()!=null){ | 
 |  |  |                         //跟随车辆入场的用户信息 | 
 |  |  |                         retentionMapper.delete(new UpdateWrapper<Retention>().lambda() | 
 |  |  |                                 .in(Retention::getType,Constants.RetentionMemberType.internalMember | 
 |  |  |                                         ,Constants.RetentionMemberType.relMember | 
 |  |  |                                         ,Constants.RetentionMemberType.fk | 
 |  |  |                                         ,Constants.RetentionMemberType.driver) | 
 |  |  |                                 .eq(Retention::getCarNo,m.getCarNo())); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             if(retentionList.size()>0){ | 
 |  |  |                 //再插入最新的在厂人员 | 
 |  |  | 
 |  |  |     private CarEvent getParkEventModelByRequest(EventParkInfoRequest request | 
 |  |  |             , List<String> delRetentionList | 
 |  |  |             , List<Retention> retentionList | 
 |  |  |             , List<Integer> delMemberRetentionList | 
 |  |  |             , List<Retention> delMemberRetentionList | 
 |  |  |             , InoutDayCount inoutDayCount | 
 |  |  |             , List<InoutRecord> inoutRecordList) { | 
 |  |  |         CarEvent event =initCarEventModelByRequest(request); | 
 |  |  |         if(StringUtils.isNotBlank(event.getPlateNos())){ | 
 |  |  |             //标记车辆进出记录 | 
 |  |  |             List<Category> categoryList = categoryMapper.selectJoinList(Category.class, new MPJLambdaWrapper<Category>() | 
 |  |  |                         .selectAll(Category.class) | 
 |  |  |                         .select("t4.name",Category::getParentName) | 
 |  |  |                         .leftJoin("category t4 on t.parent_id=t4.id") | 
 |  |  |                         .eq(Category::getIsdeleted,Constants.ZERO) | 
 |  |  |                         .isNotNull(Category::getBizType));//查询所有带有业务类型的车辆分类编码 | 
 |  |  |                     .selectAll(Category.class) | 
 |  |  |                     .select("t4.name",Category::getParentName) | 
 |  |  |                     .leftJoin("category t4 on t.parent_id=t4.id") | 
 |  |  |                     .eq(Category::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .isNotNull(Category::getBizType));//查询所有带有业务类型的车辆分类编码 | 
 |  |  |             List<Visits> visitsList = null; | 
 |  |  |             InoutRecord carrecord = new InoutRecord(); | 
 |  |  |             carrecord.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime())); | 
 |  |  | 
 |  |  |             carrecord.setType(Constants.ZERO);//车辆 | 
 |  |  |             carrecord.setIsdeleted(Constants.ZERO); | 
 |  |  |             carrecord.setObjType(Constants.ZERO); | 
 |  |  |             carrecord.setDeviceName(request.getData().getGateName()+request.getData().getRoadwayName());//停车场和出入口 | 
 |  |  |             carrecord.setHkEventId(request.getEventId()); | 
 |  |  |             carrecord.setCarCode(event.getPlateNos()); | 
 |  |  |             Cars carModel = carsMapper.selectJoinOne(Cars.class,new MPJLambdaWrapper<Cars>() | 
 |  |  |                             .selectAll(Cars.class ) | 
 |  |  |                             .selectAs(Company::getType,Cars::getCompanyType) | 
 |  |  |                             .selectAs(Member::getName,Cars::getMemberName) | 
 |  |  |                             .selectAs(Member::getIdcardDecode,Cars::getIdcardDecode) | 
 |  |  |                             .selectAs(Member::getCode,Cars::getMemberCode) | 
 |  |  |                             .selectAs(Member::getFaceImg,Cars::getFaceImg) | 
 |  |  |                             .selectAs(Member::getIdcardNo,Cars::getIdcardNo) | 
 |  |  |                             .selectAs(Member::getName,Cars::getMemberName) | 
 |  |  |                             .selectAs(Member::getPhone,Cars::getMemberPhone) | 
 |  |  |                             .selectAs(Company::getCompanyNamePath,Cars::getCompanyName) | 
 |  |  |                             .selectAs(Category::getBizType,Cars::getBizType) | 
 |  |  |                             .selectAs(Category::getName,Cars::getCateName) | 
 |  |  |                             .select("t4.id",Cars::getCatePId) | 
 |  |  |                             .select("t4.name",Cars::getCatePName) | 
 |  |  |                             .leftJoin(Company.class,Company::getId,Cars::getGroupId) | 
 |  |  |                             .leftJoin(Member.class,Member::getId,Cars::getMemberId) | 
 |  |  |                             .leftJoin(Category.class,Category::getId,Cars::getCateId) | 
 |  |  |                             .leftJoin("category t4 on t3.parent_id=t4.id") | 
 |  |  |                             .eq(Cars::getCode,event.getPlateNos()) | 
 |  |  |                             .eq(Cars::getIsdeleted,Constants.ZERO) | 
 |  |  |                             .last(" limit 1")); | 
 |  |  |                     .selectAll(Cars.class ) | 
 |  |  |                     .selectAs(Company::getType,Cars::getCompanyType) | 
 |  |  |                     .selectAs(Member::getName,Cars::getMemberName) | 
 |  |  |                     .selectAs(Member::getIdcardDecode,Cars::getIdcardDecode) | 
 |  |  |                     .selectAs(Member::getCode,Cars::getMemberCode) | 
 |  |  |                     .selectAs(Member::getFaceImg,Cars::getFaceImg) | 
 |  |  |                     .selectAs(Member::getIdcardNo,Cars::getIdcardNo) | 
 |  |  |                     .selectAs(Member::getName,Cars::getMemberName) | 
 |  |  |                     .selectAs(Member::getPhone,Cars::getMemberPhone) | 
 |  |  |                     .selectAs(Company::getCompanyNamePath,Cars::getCompanyName) | 
 |  |  |                     .selectAs(Category::getBizType,Cars::getBizType) | 
 |  |  |                     .selectAs(Category::getName,Cars::getCateName) | 
 |  |  |                     .select("t4.id",Cars::getCatePId) | 
 |  |  |                     .select("t4.name",Cars::getCatePName) | 
 |  |  |                     .leftJoin(Company.class,Company::getId,Cars::getGroupId) | 
 |  |  |                     .leftJoin(Member.class,Member::getId,Cars::getMemberId) | 
 |  |  |                     .leftJoin(Category.class,Category::getId,Cars::getCateId) | 
 |  |  |                     .leftJoin("category t4 on t3.parent_id=t4.id") | 
 |  |  |                     .eq(Cars::getCode,event.getPlateNos()) | 
 |  |  |                     .eq(Cars::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .last(" limit 1")); | 
 |  |  |             if(carModel!=null){ | 
 |  |  |                 //0安泰公务车 1安泰自有物流车 2其它 | 
 |  |  |                 event.setMemberId(carModel.getMemberId()); | 
 |  |  |                 event.setCompanyId(carModel.getGroupId()); | 
 |  |  |                 //-----------------20250429改造----start--------------- | 
 |  |  |                 event.setCarType(carModel.getBizType());//车辆业务类型 | 
 |  |  |                 event.setCarType(carModel.getBizType()==null?Constants.RetentionCarType.self : carModel.getBizType());//车辆业务类型 | 
 |  |  |                 carrecord.setObjType(Constants.FOUR); | 
 |  |  |                 carrecord.setMemberName(carModel.getMemberName());//司机 | 
 |  |  |                 carrecord.setMemberPhone(carModel.getMemberPhone());//司机 | 
 |  |  | 
 |  |  |                     carrecord.setCompanyId(carTypeJob.getCompanyId()); | 
 |  |  |                     carrecord.setCompanyName(carTypeJob.getCompanyNamePath()); | 
 |  |  |                     carrecord.setType(Constants.RetentionMemberType.car); | 
 |  |  |                     if(carModel.getMemberPhone()!=null || StringUtils.isNotBlank(carModel.getMemberName())){ | 
 |  |  |                     if(carTypeJob.getDriverName()!=null || StringUtils.isNotBlank(carTypeJob.getDrivierPhone())){ | 
 |  |  |                         //货运司机(如果司机手机号或者姓名不为空) | 
 |  |  |                         carrecord.setMemberType(Constants.RetentionMemberType.driver); | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                     carrecord.setCategoryParentId(category.getParentId()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             //处理自有车自动签到业务 | 
 |  |  |             dealSelTruckAutoSignBiz(request,event); | 
 |  |  |             if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){ | 
 |  |  |                 //处理自有车自动签到业务 | 
 |  |  |                 dealSelTruckAutoSignBiz(request,event); | 
 |  |  |                 //如果是入厂放行 | 
 |  |  |                 delRetentionList.add(event.getPlateNos()); | 
 |  |  |                 delMemberRetentionList.add(event.getMemberId()); | 
 |  |  |                 Retention dm = new Retention(); | 
 |  |  |                 dm.setMemberId(event.getMemberId()); | 
 |  |  |                 dm.setPhone(carrecord.getMemberPhone()); | 
 |  |  |                 dm.setCarNo(event.getPlateNos()); | 
 |  |  |                 delMemberRetentionList.add(dm); | 
 |  |  |                 retentionList.add(getRetentionModelByParkRequest(request,event,carrecord));//在厂车辆信息 | 
 |  |  |                 inoutDayCount.setInCarNum(Constants.formatIntegerNum(inoutDayCount.getInCarNum())+1); | 
 |  |  |                 carrecord.setInOrOut(Constants.ZERO); | 
 |  |  |             }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){ | 
 |  |  |                 //如果是出场放行 | 
 |  |  |                 delRetentionList.add(event.getPlateNos()); | 
 |  |  |                 delMemberRetentionList.add(event.getMemberId()); | 
 |  |  |                 Retention dm = new Retention(); | 
 |  |  |                 dm.setMemberId(event.getMemberId()); | 
 |  |  |                 dm.setPhone(carrecord.getMemberPhone()); | 
 |  |  |                 dm.setCarNo(event.getPlateNos()); | 
 |  |  |                 delMemberRetentionList.add(dm); | 
 |  |  |                 inoutDayCount.setOutCarNum(Constants.formatIntegerNum(inoutDayCount.getOutCarNum())+1); | 
 |  |  |                 carrecord.setInOrOut(Constants.ZERO); | 
 |  |  |                 carrecord.setInOrOut(Constants.ONE); | 
 |  |  |             } | 
 |  |  |             //车辆进入记录对应业务类型 | 
 |  |  |             if(event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other)){ | 
 |  |  |             if( isCarInOrOutEvent(request) &&( event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other))){ | 
 |  |  |                 //如果未识别到车型,不是固定车 也不是货运车辆,则检查是否是访客车 | 
 |  |  |                 visitsList =  visitsMapper.selectList(new QueryWrapper<Visits>().lambda() | 
 |  |  |                                 .eq(Visits::getCarNos,event.getPlateNos()) | 
 |  |  | 
 |  |  |                     carrecord.setCategoryParentName(StringUtils.defaultString(category.getParentName(),"访客车辆")); | 
 |  |  |                     carrecord.setCategoryParentId(category.getParentId()); | 
 |  |  |                     for(Visits v :visitsList){ | 
 |  |  |                         delMemberRetentionList.add(event.getMemberId()); | 
 |  |  |                         InoutRecord copyObj = new InoutRecord(); | 
 |  |  |                         BeanUtils.copyProperties(carrecord,copyObj); | 
 |  |  |                         copyObj.setMemberId(v.getMemberId()); | 
 |  |  |                         copyObj.setMemberName(v.getName()); | 
 |  |  |                         copyObj.setMemberPhone(v.getPhone()); | 
 |  |  |                         copyObj.setCompanyName(v.getCompanyName()); | 
 |  |  |                         copyObj.setType(Constants.ONE); | 
 |  |  |                         copyObj.setRemark(carrecord.getCarCode()); | 
 |  |  |                         copyObj.setCarCode(index>=0?null:carrecord.getCarCode()); | 
 |  |  |                         copyObj.setMemberType(Constants.RetentionMemberType.fk); | 
 |  |  |                         inoutRecordList.add(copyObj); | 
 |  |  |                         index++; | 
 |  |  |                         if(Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)){ | 
 |  |  |                             //如果是车辆出园区 统计访客进入数 | 
 |  |  |                             inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1); | 
 |  |  |                             try { | 
 |  |  |                                 //访客申请自动签离 | 
 |  |  |                                 visitsService.visitLevelForCarOut(v); | 
 |  |  |                                 //统计签离数 | 
 |  |  |                                 inoutDayCount.setLeaveVisitorNum(Constants.formatIntegerNum(inoutDayCount.getLeaveVisitorNum())+1); | 
 |  |  |                             }catch (Exception e){ | 
 |  |  |                                 log.error("访客跟随车辆出园自动签离失败:==========="+e.getMessage()); | 
 |  |  | //                        if(v.getEndtime()!=null && v.getEndtime().getTime() < System.currentTimeMillis()){ | 
 |  |  |                             Retention dm = new Retention(); | 
 |  |  |                             dm.setMemberId(event.getMemberId()); | 
 |  |  |                             dm.setPhone(carrecord.getMemberPhone()); | 
 |  |  |                             dm.setCarNo(event.getPlateNos()); | 
 |  |  |                             delMemberRetentionList.add(dm); | 
 |  |  | //                            delMemberRetentionList.add(event.getMemberId()); | 
 |  |  |                             InoutRecord copyObj = new InoutRecord(); | 
 |  |  |                             BeanUtils.copyProperties(carrecord,copyObj); | 
 |  |  |                             copyObj.setMemberId(v.getMemberId()); | 
 |  |  |                             copyObj.setMemberName(v.getName()); | 
 |  |  |                             copyObj.setMemberPhone(v.getPhone()); | 
 |  |  |                             copyObj.setCompanyName(v.getCompanyName()); | 
 |  |  |                             copyObj.setType(Constants.ONE); | 
 |  |  |                             copyObj.setRemark("访客跟随车辆【"+carrecord.getCarCode()+"】离园"); | 
 |  |  |                             copyObj.setCarCode(index>0?null:carrecord.getCarCode()); | 
 |  |  |                             copyObj.setMemberType(Constants.RetentionMemberType.fk); | 
 |  |  |                             inoutRecordList.add(copyObj); | 
 |  |  |                             index++; | 
 |  |  |                             if(Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)){ | 
 |  |  |                                 //如果是车辆出园区 统计访客进入数 | 
 |  |  |                                 inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1); | 
 |  |  |                                 try { | 
 |  |  |                                     //访客申请自动签离 | 
 |  |  |                                     visitsService.visitLevelForCarOut(v); | 
 |  |  |                                     //统计签离数 | 
 |  |  |                                     inoutDayCount.setLeaveVisitorNum(Constants.formatIntegerNum(inoutDayCount.getLeaveVisitorNum())+1); | 
 |  |  |                                 }catch (Exception e){ | 
 |  |  |                                     log.error("访客跟随车辆出园自动签离失败:==========="+e.getMessage()); | 
 |  |  |                                 } | 
 |  |  |                             }else{ | 
 |  |  |                                 //如果是进入园区,访客录入在园人员记录 | 
 |  |  |                                 retentionList.add(getRetentionModelByRequest(copyObj,request)); | 
 |  |  |                                 //统计访客出行数 | 
 |  |  |                                 inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); | 
 |  |  |                             } | 
 |  |  |                         }else{ | 
 |  |  |                             //如果是进入园区,访客录入在园人员记录 | 
 |  |  |                             retentionList.add(getRetentionModelByRequest(copyObj,request)); | 
 |  |  |                             //统计访客出行数 | 
 |  |  |                             inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  | //                    } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if(carrecord.getInOrOut()!=null && event.getCarType() !=null && !event.getCarType().equals(Constants.RetentionCarType.fkCar)){ | 
 |  |  |             if(isCarInOrOutEvent(request) && event.getCarType() !=null && !event.getCarType().equals(Constants.RetentionCarType.fkCar)){ | 
 |  |  |                 //录入非访客类型车辆进出记录 | 
 |  |  |                 dealNotFkCarMemberBiz(event,request,carrecord,retentionList,inoutDayCount,inoutRecordList); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return event; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private boolean isCarInOrOutEvent(EventParkInfoRequest request) { | 
 |  |  |         if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey() || | 
 |  |  |                 Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){ | 
 |  |  |             return  true; | 
 |  |  |         } | 
 |  |  |         return  false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void dealNotFkCarMemberBiz( CarEvent event ,EventParkInfoRequest request, InoutRecord carrecord,List<Retention> retentionList,InoutDayCount inoutDayCount,List<InoutRecord> inoutRecordList) { | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 //统计今日入园总人次 | 
 |  |  |                 inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1); | 
 |  |  |             }else   if(carrecord.getMemberId()!=null &&  Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)) { | 
 |  |  |             }else if( Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)) { | 
 |  |  |                 //如果是出园区 | 
 |  |  |                 if(Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.relMember)){ | 
 |  |  |                     //如果是相关方,统计今日累计数 | 
 |  |  | 
 |  |  |                 inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if(carrecord.getInOrOut() !=null) {//如果是出入记录 | 
 |  |  |             if(Constants.equalsInteger(carrecord.getCarBizType(),Constants.RetentionCarType.other)){ | 
 |  |  |                 carrecord.setCategoryName("未知车辆");//默认未知车辆 | 
 |  |  |                 carrecord.setCategoryParentName("未知车辆");//默认未知车辆 | 
 |  |  |             } | 
 |  |  |             inoutRecordList.add(carrecord);//录入车辆以及携带人员的入园明细记录(非访客) | 
 |  |  |         if(Constants.equalsInteger(carrecord.getCarBizType(),Constants.RetentionCarType.other)){ | 
 |  |  |             carrecord.setCategoryName("未知车辆");//默认未知车辆 | 
 |  |  |             carrecord.setCategoryParentName("未知车辆");//默认未知车辆 | 
 |  |  |         } | 
 |  |  |         inoutRecordList.add(carrecord);//录入车辆以及携带人员的入园明细记录(非访客) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private Category findCategoryByBizType(Integer carType,String tempname, String pName,List<Category> categoryList) { | 
 |  |  | 
 |  |  |         Category category  = new Category(); | 
 |  |  |         category.setName(tempname); | 
 |  |  |         category.setParentName(pName); | 
 |  |  |         return null; | 
 |  |  |         return category; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void dealSelTruckAutoSignBiz(EventParkInfoRequest request, CarEvent event) { | 
 |  |  | 
 |  |  |                         .in(PlatformJob::getStatus, | 
 |  |  |                                 Constants.PlatformJobStatus.IN_WAIT.getKey(), | 
 |  |  |                                 Constants.PlatformJobStatus.CALLED.getKey(), | 
 |  |  |                                 Constants.PlatformJobStatus.WAIT_CALL.getKey(), | 
 |  |  |                                 Constants.PlatformJobStatus.WORKING.getKey(), | 
 |  |  |                                 Constants.PlatformJobStatus.TRANSFERING.getKey(), | 
 |  |  |                                 Constants.PlatformJobStatus.OVER_NUMBER.getKey(), | 
 |  |  |                                 Constants.PlatformJobStatus.EXCEPTION.getKey() | 
 |  |  |                         ) | 
 |  |  |                 )==Constants.ZERO){//如果没进行中任务 | 
 |  |  | 
 |  |  |         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.setInoutType(request.getData().getInoutType()); | 
 |  |  |         event.setHappenTime(request.getHappenTime()); | 
 |  |  |         event.setGateName(request.getData().getGateName()); | 
 |  |  |         event.setRoadwayName(request.getData().getRoadwayName()); | 
 |  |  |         event.setGateIndex(request.getData().getGateIndex()); | 
 |  |  |         event.setEventType(request.getEventType()); | 
 |  |  |         event.setEventIndex(request.getData().getEventIndex()); | 
 |  |  | 
 |  |  |             param.setContractNumber(detail.getContractNum()); | 
 |  |  |             TmsOrderInfoResponse response = tmsService.orderInfo(param); | 
 |  |  |             if(response!=null &&( StringUtils.equals(response.getOrderStatus(),"3")  ) | 
 |  |  |                 ||StringUtils.equals(response.getOrderStatus(),"4") | 
 |  |  |                 ||StringUtils.equals(response.getOrderStatus(),"5") | 
 |  |  |                 ||StringUtils.equals(response.getOrderStatus(),"6")){ | 
 |  |  |                     ||StringUtils.equals(response.getOrderStatus(),"4") | 
 |  |  |                     ||StringUtils.equals(response.getOrderStatus(),"5") | 
 |  |  |                     ||StringUtils.equals(response.getOrderStatus(),"6")){ | 
 |  |  |                 //如果合同在途,则自动签到 | 
 |  |  |                 jobAutoSignBiz(platformJob); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         retention.setMemberId(inoutRecord.getMemberId()); | 
 |  |  |         retention.setDeviceName(request.getSrcName()); | 
 |  |  |         retention.setDeviceIndex(request.getSrcIndex()); | 
 |  |  |         retention.setRemark("跟随车辆入园区"); | 
 |  |  |         retention.setCarNo(inoutRecord.getCarCode()); | 
 |  |  |         retention.setDeviceName(request.getData().getGateName()+request.getData().getRoadwayName()); | 
 |  |  |         retention.setRemark("跟随车辆【"+inoutRecord.getCarCode()+"】入园区"); | 
 |  |  |         return retention; | 
 |  |  |     } | 
 |  |  |     private Retention getRetentionModelByParkRequest(EventParkInfoRequest request,CarEvent event ,InoutRecord carrecord ) { | 
 |  |  | 
 |  |  |         retention.setCategoryName(carrecord.getCategoryName()); | 
 |  |  |         retention.setCategoryParentId(carrecord.getCategoryParentId()); | 
 |  |  |         retention.setCategoryParentName(carrecord.getCategoryParentName()); | 
 |  |  |         retention.setDeviceName(request.getData().getGateName()+request.getData().getRoadwayName()); | 
 |  |  | //        retention.setDeviceName(request.getSrcName()); | 
 |  |  | //        retention.setDeviceIndex(request.getSrcIndex()); | 
 |  |  |  | 
 |  |  | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 Integer  workStatus = 0; | 
 |  |  |                     if( data.getHPWorkingStatus() ==null ||  data.getHPWorkingStatus().size() ==0){ | 
 |  |  |                         continue;//如何推送状态集合为空,不处理跳过 | 
 |  |  |                     } | 
 |  |  |                     PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda() | 
 |  |  |                             .eq(PlatformDevice::getDeviceId,request.getSrcIndex()) | 
 |  |  |                             .eq(PlatformDevice::getIsdeleted,Constants.ZERO) | 
 |  |  |                             .last("limit 1")); | 
 |  |  |                     if(model ==null){ | 
 |  |  |                         continue;//监控点未同步,跳过处理 | 
 |  |  |                     } | 
 |  |  |                     //各车道车辆状态 | 
 |  |  |                     for(EventPlatformStatusInfoRequest status : data.getHPWorkingStatus()){ | 
 |  |  |                 if( data.getHPWorkingStatus() ==null ||  data.getHPWorkingStatus().size() ==0){ | 
 |  |  |                     continue;//如何推送状态集合为空,不处理跳过 | 
 |  |  |                 } | 
 |  |  |                 PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda() | 
 |  |  |                         .eq(PlatformDevice::getDeviceId,request.getSrcIndex()) | 
 |  |  |                         .eq(PlatformDevice::getIsdeleted,Constants.ZERO) | 
 |  |  |                         .last("limit 1")); | 
 |  |  |                 if(model ==null){ | 
 |  |  |                     continue;//监控点未同步,跳过处理 | 
 |  |  |                 } | 
 |  |  |                 //各车道车辆状态 | 
 |  |  |                 for(EventPlatformStatusInfoRequest status : data.getHPWorkingStatus()){ | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             result = "成功"; | 
 |  |  |             log.info("【海康月台工作状态事件推送】========成功======="); | 
 |  |  | 
 |  |  |                                 platformJobMapper.updateById(update); | 
 |  |  |                             } | 
 |  |  |                             dealPlatformContentForLeave(job); | 
 |  |  |                          } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 }else  if(StringUtils.equals(status.getMotionStatus(),"enter")){ | 
 |  |  |                     //如果是车辆进入 | 
 |  |  | 
 |  |  |                 }else{ | 
 |  |  |                     continue;//其他状态不处理,跳过 | 
 |  |  |                 } | 
 |  |  |                         //暂时不做相关自动完成作业业务处理 | 
 |  |  |                 //暂时不做相关自动完成作业业务处理 | 
 |  |  | //                        dealPlatformJobLogBiz(update,status);//记录作业日志 | 
 |  |  |             } | 
 |  |  |             if(eventList.size()>0){ |