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.config.DataSyncConfig; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.*; 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.*; import com.doumee.core.haikang.model.param.request.event.visit.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DESUtil; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.*; import com.doumee.dao.business.dao.MemberMapper; import com.doumee.dao.business.join.VisitsJoinMapper; 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.request.TmsOrderInfoRequest; 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; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletResponse; import java.util.*; import java.util.stream.Collectors; /** * 访客权限组信息表Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service @Slf4j public class HkSyncPushServiceImpl extends HkSyncBaseServiceImpl { @Autowired private InoutDayCountMapper inoutDayCountMapper; @Autowired private InterfaceLogMapper interfaceLogMapper; @Autowired private CarsMapper carsMapper; @Autowired private ParkBookMapper parkBookMapper; @Autowired private DeviceEventMapper deviceEventMapper; @Autowired private MemberMapper memberMapper; @Autowired private DeviceMapper deviceMapper; @Autowired private DataSyncConfig dataSyncConfig; @Autowired private CarEventMapper carEventMapper; @Autowired private CategoryMapper categoryMapper; @Autowired private VisitEventMapper visitEventMapper; @Autowired private VisitsJoinMapper visitsMapper; @Autowired private RetentionMapper retentionMapper; @Autowired private InoutRecordMapper inoutRecordMapper; @Autowired private PlatformMapper platformMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private PlatformDeviceMapper platformDeviceMapper; @Autowired private PlatformBroadcastLogMapper platformBroadcastLogMapper; @Autowired private PlatformJobMapper platformJobMapper; @Autowired private TmsService tmsService; @Autowired private VisitsService visitsService; @Autowired private PlatformWmsDetailMapper platformWmsDetailMapper; @Autowired private PlatformEventMapper platformEventMapper; @Autowired private PlatformLogMapper platformLogMapper; @Autowired private PlatformWarnEventServiceImpl platformWarnEventService; /** * 海康门禁事件推送 * @param param * @param response * @return */ @Override public String dealAcsEvent(EventAcsRequest param, HttpServletResponse response){ log.info("【海康门禁事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); String result = null; try { if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ return null; } //门禁事件集合 List events = param.getParams().getEvents(); List list = new ArrayList<>(); List delRetentionLis = new ArrayList<>(); List retentionList = new ArrayList<>(); List inoutRecordList = new ArrayList<>(); InoutDayCount inoutDayCount = new InoutDayCount(); for(EventAcsInfoRequest request : events){ EventDeviceDataRequest model = request.getData(); if(model ==null){ continue; } //根据推送人员编码,处理在场、离场人员数据记录 dealMemberDataByRequest(request,delRetentionLis,retentionList,inoutDayCount,inoutRecordList); //封装门禁事件信息表对象 list.add(getDeviceEventModelByRequest(request)); } if(list.size()>0){ //插入门禁记录 deviceEventMapper.insert(list); } if(delRetentionLis.size()>0){ //先删除原有的在场人员(内部人员) retentionMapper.delete(new UpdateWrapper().lambda() .eq(Retention::getType,Constants.memberType.internal) .in(Retention::getMemberId,delRetentionLis)); } if(retentionList.size()>0){ //再插入最新的在厂人员 retentionMapper.insert(retentionList); } if(inoutRecordList.size()>0){ //再插入最新的在厂人员 inoutRecordMapper.insert(inoutRecordList); } dealInoutDayCountBiz(inoutDayCount); log.info("【海康门禁事件推送】========成功======="); }catch (Exception e) { e.printStackTrace(); log.error("【海康门禁事件推送】========失败=======:\n" + e.getMessage()); }finally { saveInterfaceLog(param,"/business/hksync/push/acs",result,false);//不计日志 } return null; } private void dealInoutDayCountBiz(InoutDayCount param) { if(param == null){ param = new InoutDayCount(); } param.setTimeInfo(Utils.Date.getStart(new Date())); InoutDayCount model = inoutDayCountMapper.selectOne(new QueryWrapper().lambda() .eq(InoutDayCount::getTimeInfo,param.getTimeInfo()) .eq(InoutDayCount::getIsdeleted,Constants.ZERO) .last("limit 1")); log.error("============================inoutDayCountMapper:"+JSONObject.toJSONString(param)); if(model == null){ param.setIsdeleted(Constants.ZERO); param.setCreateDate(new Date()); param.setEditDate(new Date()); inoutDayCountMapper.insert(param); }else{ inoutDayCountMapper.update(null,new UpdateWrapper().lambda() .eq(InoutDayCount::getId,model.getId() ) .set(InoutDayCount::getEditDate,new Date() ) .setSql(param.getInCarNum()!=null,"IN_CAR_NUM = ifnull(IN_CAR_NUM,0)+"+param.getInCarNum() ) .setSql(param.getOutCarNum()!=null,"OUT_CAR_NUM = ifnull(OUT_CAR_NUM,0)+"+param.getOutCarNum() ) .setSql(param.getInMemberNum()!=null,"IN_MEMBER_NUM = ifnull(IN_MEMBER_NUM,0)+"+param.getInMemberNum() ) .setSql(param.getOutMemberNum()!=null,"OUT_MEMBER_NUM = ifnull(OUT_MEMBER_NUM,0)+"+param.getOutMemberNum() ) .setSql(param.getInVisitorNum()!=null,"IN_VISITOR_NUM = ifnull(IN_VISITOR_NUM,0)+"+param.getInVisitorNum() ) .setSql(param.getOutVisitorNum()!=null,"OUT_VISITOR_NUM = ifnull(OUT_VISITOR_NUM,0)+"+param.getOutVisitorNum() ) .setSql(param.getSigninVisitorNum()!=null,"SIGNIN_VISITOR_NUM = ifnull(SIGNIN_VISITOR_NUM,0)+"+param.getSigninVisitorNum() ) .setSql(param.getLeaveVisitorNum()!=null,"LEAVE_VISITOR_NUM = ifnull(LEAVE_VISITOR_NUM,0)+"+param.getLeaveVisitorNum() ) .setSql(param.getInOtherMemberNum()!=null,"IN_OTHER_MEMBER_NUM = ifnull(IN_OTHER_MEMBER_NUM,0)+"+param.getInOtherMemberNum() ) .setSql(param.getOutOtherMemberNum()!=null,"OUT_OTHER_MEMBER_NUM = ifnull(OUT_OTHER_MEMBER_NUM,0)+"+param.getOutOtherMemberNum() ) .setSql(param.getInSelfMemberNum()!=null,"IN_SELF_MEMBER_NUM = ifnull(IN_SELF_MEMBER_NUM,0)+"+param.getInSelfMemberNum() ) .setSql(param.getOutSelfMemberNum()!=null,"OUT_SELF_MEMBER_NUM = ifnull(OUT_SELF_MEMBER_NUM,0)+"+param.getOutSelfMemberNum() ) ); } } /** * 根据推送人员编码,处理在场、离场人员数据记录 * @param request * @param delRetentionLis * @param retentionList */ private void dealMemberDataByRequest(EventAcsInfoRequest request , List delRetentionLis , List retentionList ,InoutDayCount inoutDayCount ,List inoutRecordList) { //海康人员编码 String userNo = request.getData().getExtEventPersonNo(); if(StringUtils.isNotBlank(userNo)){ Member member = memberMapper.selectJoinOne(Member.class,new MPJLambdaWrapper() .selectAll(Member.class) .selectAs(Company::getCompanyNamePath,Member::getCompanyNamePath) .selectAs(Company::getType,Member::getCompanyType) .leftJoin(Company.class,Company::getId,Member::getCompanyId) .eq(Member::getHkId,userNo) .eq(Member::getIsdeleted,Constants.ZERO) .last("limit 1")); //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) Device d = deviceMapper.selectOne(new QueryWrapper().lambda() .eq(Device::getDoorId,request.getSrcIndex()) .eq(Device::getIsdeleted,Constants.ZERO) .last("limit 1" )); InoutRecord record = new InoutRecord(); 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){ //如果是进门,录入人员的在场数据记录 record.setInOrOut(Constants.ZERO); inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1);//入场人次 }else{ //如果是出门 record.setInOrOut(Constants.ONE); inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1);//离场人次 } } if(member !=null){ record.setMemberId(member.getId()); record.setMemberName(member.getName()); record.setMemberPhone(member.getPhone()); record.setObjId(member.getId()); record.setObjType(Constants.ONE); record.setCompanyId(member.getCompanyId()); record.setCompanyName(member.getCompanyNamePath()); if(d!=null && Constants.equalsInteger(d.getIsEntrance(),Constants.ONE)){ 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);//内部人员入场人次 }else{ record.setMemberType(Constants.RetentionMemberType.relMember); inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1);//相关方入场人次 } }else{ if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ record.setMemberType(Constants.RetentionMemberType.internalMember); inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1);//内部人员出场人次 }else{ record.setMemberType(Constants.RetentionMemberType.relMember); inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//相关方出场人次 } } } if(record.getMemberType()!=null){ inoutRecordList.add(record); } } } } public static String getHkImgUrl(String url){ if(StringUtils.isBlank(url)){ return null; } return HKConstants.IMG_INDEX+url; } /** *封装门禁事件信息表对象 */ private DeviceEvent getDeviceEventModelByRequest(EventAcsInfoRequest request) { DeviceEvent event = new DeviceEvent(); event.setIsdeleted(Constants.ZERO); event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); event.setEventId(request.getEventId()); event.setEventType(request.getEventType()); event.setAccessChannel(request.getData().getExtAccessChannel()); event.setUserType(request.getData().getUserType()); event.setSvrIndexCode(request.getData().getSvrIndexCode()); event.setStatus(request.getStatus()); event.setExtEventType(request.getData().getExtEventType()!=null?request.getData().getExtEventType():null); event.setSrcType(request.getSrcType()); event.setSrcName(request.getSrcName()); event.setSrcIndex(request.getSrcIndex()); event.setSrcParentIndex(request.getSrcParentIndex()); event.setSeq(request.getData().getSeq()); event.setTimeout(request.getTimeout()); event.setExtEventType(request.getData().getExtEventType()); event.setHappenTime(request.getHappenTime()); event.setExtReceiveTime(request.getData().getExtReceiveTime()); event.setExtEventWhiteListNo(request.getData().getExtEventWhiteListNo()); event.setExtEventWhiteListNo(request.getData().getExtEventWhiteListNo()); event.setExtEventVerifyID(request.getData().getExtEventVerifyID()); event.setExtEventRoleID(request.getData().getExtEventRoleID()); event.setExtEventReportChannel(request.getData().getExtEventReportChannel()); event.setExtEventReaderKind(request.getData().getExtEventReaderKind()); event.setExtEventReaderID(request.getData().getExtEventReaderID()); event.setExtEventPictureURL(getHkImgUrl(request.getData().getExtEventPictureURL())); event.setExtEventPersonNo(request.getData().getExtEventPersonNo()); event.setExtEventMainDevID(request.getData().getExtEventMainDevID()); event.setExtEventLocalControllerID(request.getData().getExtEventLocalControllerID()); event.setExtEventInOut(request.getData().getExtEventInOut()); event.setExtEventIDCardPictureURL(getHkImgUrl(request.getData().getExtEventIDCardPictureURL())); event.setExtEventEwipNum(request.getData().getExtEventSwipNum()); event.setExtEventEubDevID(request.getData().getExtEventMainDevID()); event.setExtEventDoorID(request.getData().getExtEventDoorID()); event.setExtEventCode(request.getData().getExtEventCode()); event.setExtEventCaseID(request.getData().getExtEventCaseID()); event.setExtEventCardNo(request.getData().getExtEventCardNo()); event.setExtEventAlarmOutID(request.getData().getExtEventAlarmOutID()); event.setExtEventAlarmInID(request.getData().getExtEventAlarmInID()); event.setExtAccessChannel(request.getData().getExtAccessChannel()); //通道事件信息 if(request.getData().getExtEventCustomerNumInfo() !=null){ event.setTotalTimes(request.getData().getExtEventCustomerNumInfo().getTotalTimes()); event.setEntryTimes(request.getData().getExtEventCustomerNumInfo().getEntryTimes()); event.setExitTimes(request.getData().getExtEventCustomerNumInfo().getExitTimes()); event.setAccessChannel(request.getData().getExtEventCustomerNumInfo().getAccessChannel()); } if(request.getData().getExtEventIdentityCardInfo() !=null){ //人员身份证件信息 event.setBirth(request.getData().getExtEventIdentityCardInfo().getBirth()); String idnum = request.getData().getExtEventIdentityCardInfo().getIdNum(); if(StringUtils.isNotBlank(idnum)){ //身份证号存储密文 event.setIdNum(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 //脱敏手机号显示n event.setIdcardDecode(Constants.getTuominStr(idnum)); } event.setAddress(request.getData().getExtEventIdentityCardInfo().getAddress()); event.setSex(request.getData().getExtEventIdentityCardInfo().getSex()); event.setName(request.getData().getExtEventIdentityCardInfo().getName()); event.setEndDate(request.getData().getExtEventIdentityCardInfo().getEndDate()); event.setStartDate(request.getData().getExtEventIdentityCardInfo().getStartDate()); event.setTermOfValidity(request.getData().getExtEventIdentityCardInfo().getTermOfValidity()); } return event; } /** * 进厂对象封装成在场人员 * @param member * @param request * @return */ private Retention getRetentionModelByRequest(Member member, EventAcsInfoRequest request) { Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setClasses(member.getClasses()); retention.setCode(member.getCode()); retention.setIdcardNo(member.getIdcardNo()); retention.setIdcardDecode(member.getIdcardDecode()); retention.setName(member.getName()); retention.setBirthday(member.getBirthday()); retention.setType(member.getType()); retention.setCompanyId(member.getCompanyId()); retention.setCompanyName(member.getCompanyName()); retention.setEventCode(request.getData().getExtEventCode()+""); retention.setEventDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setFaceImg(member.getFaceImg()); retention.setImgurl(member.getImgurl()); retention.setPhone(member.getPhone()); retention.setMemberId(member.getId()); retention.setDeviceName(request.getSrcName()); retention.setDeviceIndex(request.getSrcIndex()); return retention; } /** * 海康访客事件推送 * @param param * @param response * @return */ @Override public String dealVisitEvent(EventVisitRequest param, HttpServletResponse response){ log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param)); String result = null; try { if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ return null; } //门禁事件集合 List events = param.getParams().getEvents(); List list = new ArrayList<>(); List delRetentionLis = new ArrayList<>(); List retentionList = new ArrayList<>(); for(EventVisitInfoRequest request : events){ if(request.getData() ==null ||StringUtils.isBlank(request.getData().getVisitorId())){ continue; } //海康访客记录编码 if(StringUtils.isNotBlank(request.getData().getVisitorId())){ //根据访客推送访客记录编码,处理访客记录、在场人员等信息 dealVisitDataByRequst(request,delRetentionLis,retentionList); } //封装门禁事件信息表对象 list.add(getVisitEventModelByRequest(request)); } if(list.size()>0){ //插入门禁记录 visitEventMapper.insert(list); } if(delRetentionLis.size()>0){ //先删除原有的在场人员(普通访客) retentionMapper.delete(new UpdateWrapper().lambda() .eq(Retention::getType,Constants.memberType.visitor) .in(Retention::getMemberId,delRetentionLis)); } if(retentionList.size()>0){ //再插入最新的在厂人员 retentionMapper.insert(retentionList); } log.info("【海康访客事件推送】========成功======="); }catch (Exception e){ log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); } saveInterfaceLog(param,"/business/hksync/push/visit",result,true); return null; } /** * 海康访客事件推送 * @param param * @param response * @return */ @Override public String dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){ log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param)); String result = null; try { if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ return null; } //门禁事件集合 List events = param.getParams().getEvents(); List list = new ArrayList<>(); List delRetentionLis = new ArrayList<>(); List retentionList = new ArrayList<>(); List inoutRecordList = new ArrayList<>(); InoutDayCount inoutDayCount = new InoutDayCount(); for(EventVisitIccmInfoRequest request : events){ if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){ continue; } if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){ continue; } //海康访客记录编码 dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,inoutDayCount,inoutRecordList); list.add(getVisitEventModelByRequestIccm(request,request.getData().getVisitorInformationList().get(0))); } if(list.size()>0){ //插入门禁记录 visitEventMapper.insert(list); } if(delRetentionLis.size()>0){ //先删除原有的在场人员(普通访客) retentionMapper.delete(new UpdateWrapper().lambda() .eq(Retention::getType,Constants.memberType.visitor) .in(Retention::getMemberId,delRetentionLis)); } if(retentionList.size()>0){ //再插入最新的在厂人员 retentionMapper.insert(retentionList); } if(inoutRecordList.size()>0){ //批量插入人员出入记录 inoutRecordMapper.insert(inoutRecordList); } dealInoutDayCountBiz(inoutDayCount); log.info("【海康访客事件推送】========成功======="); }catch (Exception e){ log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); } saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true); return null; } /** * 根据访客推送访客记录编码,处理访客记录、在场人员等信息 */ private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request , List delRetentionLis , List retentionList , InoutDayCount inoutDayCount ,List inoutRecordList) { EventVisitIccmDataRequest model = request.getData(); EventVisitIccmInvoiceParamRequest data = request.getData().getVisitorInvoices(); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Visits.class); queryWrapper.selectAs(Member::getType,Visits::getMemberType); queryWrapper.eq(Visits::getHkId,model.getVisitorInvoices().getInvoicesNo() );//访客单号 queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId ); queryWrapper.last("limit 1"); Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper); if(visits !=null){ if(dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk){ //如果是伊利大屏项目,不做处理 return; } Visits updateVistis = new Visits(); updateVistis.setId(visits.getId()); if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) { //如果是访客登记,录入人员的在场数据记录 //retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType())); //来访时间 if(Constants.equalsInteger(visits.getStatus(),Constants.VisitStatus.xfSuccess)){ inoutDayCount.setSigninVisitorNum(Constants.formatIntegerNum(inoutDayCount.getSigninVisitorNum())+1); updateVistis.setStatus(Constants.VisitStatus.signin); updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); } //更新最新来访时间 Member member = new Member(); member.setLastVisitDate(updateVistis.getInDate()); member.setId(visits.getMemberId()); memberMapper.updateById(member); }else if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey()) { //如果是访客签离事件 if(Constants.equalsInteger(visits.getStatus(),Constants.VisitStatus.signin)){ inoutDayCount.setLeaveVisitorNum(Constants.formatIntegerNum(inoutDayCount.getLeaveVisitorNum())+1); updateVistis.setStatus(Constants.VisitStatus.signout); updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); updateVistis.setOutType(Constants.ZERO); updateVistis.setOutInfo("访客正常签离"); } delRetentionLis.add(visits.getMemberId()); }else{ //如果人员信息存在,切是访客通行,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 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.setIsdeleted(Constants.ZERO); record.setMemberName(visits.getName()); record.setObjId(visits.getId()); record.setMemberId(visits.getMemberId()); record.setObjType(Constants.TWO); record.setMemberPhone(visits.getPhone()); record.setCompanyName(visits.getCompanyName()); record.setInOrOut(Constants.ZERO); record.setHkEventId(request.getEventId()); record.setHkId(visits.getHkId()); //如果是访客通行 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.setDeviceName(request.getData().getParamValues().getSrcName()); r.setDeviceIndex(request.getData().getParamValues().getSrcIndex()); retentionList.add(r); inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); } if(request.getData()!=null&&request.getData().getParamValues()!=null && !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1); record.setInOrOut(Constants.ONE); } inoutRecordList.add(record); } updateVistis.setEditDate(new Date()); //更新访客来访或者签离时间信息 visitsMapper.updateById(updateVistis) ; } } private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) { Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(DateUtil.getISO8601DateByStr2(happentTime)); retention.setCreateDate(retention.getCreateDate() == null?new Date():retention.getCreateDate()); retention.setClasses(visits.getClasses()); retention.setCode(visits.getCode()); retention.setIdcardNo(visits.getIdcardNo()); retention.setIdcardDecode(visits.getIdcardDecode()); retention.setName(visits.getName()); retention.setBirthday(visits.getBirthday()); retention.setType(visits.getMemberType()); retention.setCompanyId(visits.getCompanyId()); retention.setCompanyName(visits.getCompanyName()); retention.setEventCode(srcType); retention.setEventDate(retention.getCreateDate()); retention.setFaceImg(visits.getFaceImg()); retention.setImgurl(visits.getImgurl()); retention.setPhone(visits.getPhone()); retention.setMemberId(visits.getMemberId()); return retention; } private VisitEvent getVisitEventModelByRequestIccm(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) { if(request.getData().getTargetPerson() ==null){ request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest()); } if(request.getData().getVisitorInvoices() == null){ request.getData().setVisitorInvoices(new EventVisitIccmInvoiceParamRequest()); } VisitEvent event = new VisitEvent(); event.setIsdeleted(Constants.ZERO); event.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime())); if(event.getCreateDate() == null){ event.setCreateDate(new Date()); } if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_PASS.getKey()) { //如果是访客通行事件,进入进出事件 if(request.getData()!=null&&request.getData().getParamValues()!=null && StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ event.setInOrOut("0");//进 }else{ event.setInOrOut("1");//出 } } event.setVisitorWorkUint(detail.getUnit()); event.setVisitorId(detail.getVisitorId()); event.setVisitorCode(detail.getAppointmentCode()); event.setTimeout(request.getTimeout()); event.setSvrIndexCode(request.getSrcIndex()); event.setHappenTime(request.getHappenTime()); event.setStatus(request.getStatus()); event.setEndTime(request.getData().getVisitorInvoices().getFinishTime()); event.setStartTime(request.getData().getVisitorInvoices().getBeginTime()); event.setSrcType(request.getSrcType()); event.setSrcParentIndex(request.getSrcParentIndex()); event.setSrcName((request.getData()!=null &&request.getData().getParamValues()!=null)? request.getData().getParamValues().getSrcName():request.getSrcName()); event.setSrcIndex(request.getSrcIndex()); event.setSex(detail.getSex()); event.setPurpose(request.getData().getVisitorInvoices().getVisitReason()); event.setPhone(detail.getPhone()); event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId()); event.setBeVisitedPersonName(request.getData().getTargetPerson().getName()); event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName()); event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName()); event.setPhotoUrl(getHkImgUrl(detail.getFacePic())); event.setPersonName(detail.getVisitorName()); event.setCarNo(detail.getPlateNo()); event.setRemark(JSONObject.toJSONString(request)); event.setInvoicesNo(request.getData().getVisitorInvoices().getInvoicesNo());//访客单号 event.setIdType(detail.getCertType()); String idnum = detail.getCertNo(); if(StringUtils.isNotBlank(idnum)){ //身份证号存储密文 event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 //脱敏手机号显示n event.setIdcardDecode(Constants.getTuominStr(idnum)); } event.setEventType(request.getEventType()); event.setEventId(request.getEventId()); return event; } /** * 根据访客推送访客记录编码,处理访客记录、在场人员等信息 */ private void dealVisitDataByRequst(EventVisitInfoRequest request, List delRetentionLis, List retentionList) { EventVisitDataRequest model = request.getData(); MPJLambdaWrapper 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.setInvoicesNo(request.getData().getVisitorId()); event.setCaptureUrl(request.getData().getCaptureUrl()); if(StringUtils.isNotBlank(request.getData().getCaptureUrl())){ event.setCaptureUrl(HKConstants.IMG_INDEX+request.getData().getCaptureUrl()); } if(StringUtils.isNotBlank(request.getData().getPhotoUrl())){ event.setPhotoUrl(HKConstants.IMG_INDEX+request.getData().getPhotoUrl()); } event.setIdType(request.getData().getIdType()); String idnum =request.getData().getIdNo(); if(StringUtils.isNotBlank(idnum)){ //身份证号存储密文 event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 //脱敏手机号显示n event.setIdcardDecode(Constants.getTuominStr(idnum)); } event.setEventType(request.getEventType()); event.setEventId(request.getEventId()); return event; } private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) { Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setClasses(visits.getClasses()); retention.setCode(visits.getCode()); retention.setIdcardNo(visits.getIdcardNo()); retention.setIdcardDecode(visits.getIdcardDecode()); retention.setName(visits.getName()); retention.setBirthday(visits.getBirthday()); retention.setType(visits.getMemberType()); retention.setCompanyId(visits.getCompanyId()); retention.setCompanyName(visits.getCompanyName()); retention.setEventCode(request.getSrcType()+""); retention.setEventDate(retention.getCreateDate()); retention.setFaceImg(visits.getFaceImg()); retention.setImgurl(visits.getImgurl()); retention.setPhone(visits.getPhone()); retention.setMemberId(visits.getMemberId()); // retention.setDeviceName(request.getSrcName()); // retention.setDeviceIndex(request.getSrcIndex()); return retention; } /** * 海康停车场事件推送 * @param param * @param response * @return */ @Override public String dealParkEvent(EventParkRequest param, HttpServletResponse response){ String result = null; log.info("【海康停车场事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); try { if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ return null; } //门禁事件集合 List events = param.getParams().getEvents(); List list = new ArrayList<>(); List retentionList = new ArrayList<>(); List delRetentionList = new ArrayList<>(); List delMemberRetentionList = new ArrayList<>(); InoutDayCount inoutDayCount = new InoutDayCount(); List inoutRecordList = new ArrayList<>(); for(EventParkInfoRequest request : events){ if(request.getData() ==null ||StringUtils.isBlank(request.getData().getPlateNo())){ continue; } //封装事件信息表对象 list.add(getParkEventModelByRequest(request,delRetentionList,retentionList,delMemberRetentionList,inoutDayCount,inoutRecordList)); } if(list.size()>0){ //插入门禁记录 carEventMapper.insert(list); } if(delRetentionList.size()>0){ //先删除原有的在场人员(内部人员) retentionMapper.delete(new UpdateWrapper().lambda() .eq(Retention::getType,Constants.THREE) .in(Retention::getCarNo,delRetentionList)); } if(delMemberRetentionList.size()>0){ //先删除原有的在场人员(内部人员和访客) retentionMapper.delete(new UpdateWrapper().lambda() .in(Retention::getType,Constants.memberType.internal,Constants.memberType.visitor) .in(Retention::getMemberId,delMemberRetentionList)); } if(retentionList.size()>0){ //再插入最新的在厂人员 retentionMapper.insert(retentionList); } if(inoutRecordList.size()>0){ //再插入最新的人车出入明细 inoutRecordMapper.insert(inoutRecordList); } dealInoutDayCountBiz(inoutDayCount); log.info("【海康停车场事件推送】========成功======="); }catch (Exception e){ e.printStackTrace(); log.error("【海康停车场事件推送】========失败=======:\n"+e.getMessage()); } saveInterfaceLog(param,"/business/hksync/push/parks",result,false); return null; } /** * 根据推送数据封装停车事件对象信息 * @param request * @return */ private CarEvent getParkEventModelByRequest(EventParkInfoRequest request , List delRetentionList , List retentionList , List delMemberRetentionList , InoutDayCount inoutDayCount , List inoutRecordList) { CarEvent event =initCarEventModelByRequest(request); if(StringUtils.isNotBlank(event.getPlateNos())){ //标记车辆进出记录 List categoryList = categoryMapper.selectJoinList(Category.class, new MPJLambdaWrapper() .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 visitsList = null; InoutRecord carrecord = new InoutRecord(); carrecord.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime())); carrecord.setTimeInfo(Utils.Date.getStart(carrecord.getCreateDate())); 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() .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()==null?Constants.RetentionCarType.self : carModel.getBizType());//车辆业务类型 carrecord.setObjType(Constants.FOUR); carrecord.setMemberName(carModel.getMemberName());//司机 carrecord.setMemberPhone(carModel.getMemberPhone());//司机 carrecord.setObjId(carModel.getId()); carrecord.setMemberId(carModel.getMemberId()); carrecord.setObjType(Constants.ZERO); carrecord.setFaceImg(carModel.getFaceImg()); carrecord.setIdcardDecode(carModel.getIdcardDecode()); carrecord.setIdcardNo(carModel.getIdcardNo()); carrecord.setMemberCode(carModel.getMemberCode()); carrecord.setCompanyId(carModel.getGroupId()); carrecord.setCompanyName(carModel.getCompanyName()); carrecord.setCategoryId(carModel.getCateId()); carrecord.setCategoryName(carModel.getCateName()); carrecord.setCategoryParentId(carModel.getCatePId()); carrecord.setCategoryParentName(StringUtils.defaultString(carModel.getCatePName(),carModel.getCateName())); carrecord.setType( Constants.RetentionMemberType.car);//只是车辆的记录 if(carModel.getMemberId()!=null){ if(Constants.equalsInteger(carModel.getCompanyType(),Constants.ONE)){ //内部组织 carrecord.setMemberType(Constants.RetentionMemberType.internalMember); }else{ //相关方组织 carrecord.setMemberType( Constants.RetentionMemberType.relMember); } } // carrecord.setMemberPhone(carTypeJob.getDrivierPhone()); //-----------------20250429改造----end--------------- } if(event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other)){//如果为识别到车型 PlatformJob carTypeJob = platformJobMapper.selectJoinOne(PlatformJob.class, new MPJLambdaWrapper(). selectAll(PlatformJob.class) .selectAs(PlatformGroup::getType,PlatformJob::getGroupType) .leftJoin(PlatformGroup.class,PlatformGroup::getId,PlatformJob::getPlatformGroupId) .eq(PlatformJob::getCarCodeFront,event.getPlateNos()) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .orderByAsc(PlatformJob::getCreateDate) .last(" limit 1")); if(carTypeJob!=null ) { /** * 如果非固定车辆,检查是否货运车辆 * 货运车辆优先级: * 1、安泰自有车:货运车辆-安泰物流货运车辆(固定车辆上面已处理,此处不考虑) * 2、wms推送的物流车辆(非自有车):货运车辆-外协运输车辆 对应grouptype为:安泰物流卸货 2 * 3、安泰的预约入园车辆:货运车辆-加工烟卸货车辆 对应grouptype为0安泰物流卸货 2市公司卸货 * 4、市公司的预约入园车辆:货运车辆-市公司卸货车辆 */ carrecord.setMemberName(carTypeJob.getDriverName());//司机 carrecord.setMemberPhone(carTypeJob.getDrivierPhone());//司机 carrecord.setObjId(carTypeJob.getId()); carrecord.setMemberId(carTypeJob.getDriverId());//司机编码 carrecord.setObjType(Constants.FOUR); carrecord.setCompanyId(carTypeJob.getCompanyId()); carrecord.setCompanyName(carTypeJob.getCompanyNamePath()); carrecord.setType(Constants.RetentionMemberType.car); if(carModel.getMemberPhone()!=null || StringUtils.isNotBlank(carModel.getMemberName())){ //货运司机(如果司机手机号或者姓名不为空) carrecord.setMemberType(Constants.RetentionMemberType.driver); } Category category = null; String tempName = ""; String tempPName = ""; //如果非固定车辆,则查询是否货运车辆 作业类型 0自有车卸货 1自有车装货 2外协车卸货 3外协车装货 4市公司外协车卸货 if(Constants.equalsInteger(carTypeJob.getOrigin(),Constants.ONE)){ //如果是推送的wms非自有车 event.setCarType(Constants.RetentionCarType.wxysCar);//外协车 tempName = "外协运输车辆"; tempPName = "货运车辆"; }else if(Constants.equalsInteger(carTypeJob.getType(),Constants.FOUR)){ if(Constants.equalsInteger(carTypeJob.getGroupType(),Constants.TWO)){ ///安泰的预约入园车辆:货运车辆-加工烟卸货车辆 tempName = "加工烟卸货车辆"; tempPName = "货运车辆"; event.setCarType(Constants.RetentionCarType.jgyxhCar);//加工烟卸货车辆 }else if(Constants.equalsInteger(carTypeJob.getGroupType(),Constants.TWO)){ //市公司的预约入园车辆:货运车辆-市公司卸货车辆 tempName = "市公司卸货车辆"; tempPName = "货运车辆"; event.setCarType(Constants.RetentionCarType.sgsxhCar);//市公司卸货车辆 } } category =findCategoryByBizType(event.getCarType(),tempName,tempPName,categoryList); carrecord.setCategoryId(category.getId()); carrecord.setCategoryName(category.getName()); carrecord.setCategoryParentName(category.getParentName()); carrecord.setCategoryParentId(category.getParentId()); } } //处理自有车自动签到业务 dealSelTruckAutoSignBiz(request,event); if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){ //如果是入厂放行 delRetentionList.add(event.getPlateNos()); delMemberRetentionList.add(event.getMemberId()); 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()); inoutDayCount.setOutCarNum(Constants.formatIntegerNum(inoutDayCount.getOutCarNum())+1); carrecord.setInOrOut(Constants.ONE); } //车辆进入记录对应业务类型 if(isCarInOrOutEvent(request) &&( event.getCarType() ==null || event.getCarType().equals(Constants.RetentionCarType.other))){ //如果未识别到车型,不是固定车 也不是货运车辆,则检查是否是访客车 visitsList = visitsMapper.selectList(new QueryWrapper().lambda() .eq(Visits::getCarNos,event.getPlateNos()) .eq(Visits::getIsdeleted,Constants.ZERO ) .in(Visits::getStatus,Constants.VisitStatus.signin)//最近一个已到达或者已签离 .isNull(Visits::getParentId) .orderByDesc(Visits::getId) // .last("limit 1" ) ); if(visitsList!=null && visitsList.size()>0){ //最近使用该车的申请人(已到达) event.setMemberId(visitsList.get(0).getMemberId()); event.setCarType(Constants.RetentionCarType.fkCar); int index =0; carrecord.setCarBizType(Constants.RetentionCarType.fkCar); Category category =findCategoryByBizType(Constants.RetentionCarType.fkCar,"访客车辆","访客车辆",categoryList); carrecord.setCategoryId(category.getId()); carrecord.setCategoryName(StringUtils.defaultString(category.getName(),"访客车辆")); 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()); } }else{ //如果是进入园区,访客录入在园人员记录 retentionList.add(getRetentionModelByRequest(copyObj,request)); //统计访客出行数 inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); } } } } 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 retentionList,InoutDayCount inoutDayCount,List inoutRecordList) { //录入非访客类型车辆进出记录 carrecord.setCarBizType(event.getCarType()==null?Constants.RetentionCarType.other:event.getCarType()); if(carrecord.getMemberId()!=null && (Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.internalMember) ||Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.relMember) ||Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.driver))){ if( Constants.equalsInteger(carrecord.getInOrOut(),Constants.ZERO)) { //如果是进入 retentionList.add(getRetentionModelByRequest(carrecord,request)); if(Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.relMember)){ //如果是相关方人员,统计今日累计数 inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1); }else if(Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.internalMember)){ //如果是内部人员,统计今日累计数 inoutDayCount.setInSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getInSelfMemberNum())+1); } //统计今日入园总人次 inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1); }else if( Constants.equalsInteger(carrecord.getInOrOut(),Constants.ONE)) { //如果是出园区 if(Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.relMember)){ //如果是相关方,统计今日累计数 inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1); }else if(Constants.equalsInteger(carrecord.getMemberType(),Constants.RetentionMemberType.internalMember)){ //如果是内部人员,统计今日累计数 inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1); } //统计今日出园总人次 inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1); } } 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 categoryList) { if(categoryList!=null){ for(Category category :categoryList){ if(Constants.equalsInteger(carType,category.getBizType())){ if(StringUtils.isBlank(category.getParentName() )){ category.setParentName(category.getName()); } return category; } } } Category category = new Category(); category.setName(tempname); category.setParentName(pName); return null; } private void dealSelTruckAutoSignBiz(EventParkInfoRequest request, CarEvent event) { ParkBook cars = parkBookMapper.selectOne(new QueryWrapper().lambda() .eq(ParkBook::getCarCode,event.getPlateNos()) .eq(ParkBook::getHkStatus,Constants.ONE ) .eq(ParkBook::getIsdeleted,Constants.ZERO ) .last("limit 1" )); if(cars!=null){ event.setMemberId(cars.getMemberId()); //自有车 查询当前是否有待签到的任务 if(carsMapper.selectCount(new QueryWrapper() .lambda().eq(Cars::getCode,event.getPlateNos()) .eq(Cars::getType,Constants.ONE) .eq(Cars::getIsdeleted,Constants.ZERO) )>Constants.ZERO){ //查询车辆当前是否存在进行中的任务 if( platformJobMapper.selectCount(new QueryWrapper().lambda() .eq(PlatformJob::getCarCodeFront,event.getPlateNos()) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .in(PlatformJob::getStatus, Constants.PlatformJobStatus.IN_WAIT.getKey(), Constants.PlatformJobStatus.CALLED.getKey(), Constants.PlatformJobStatus.WORKING.getKey(), Constants.PlatformJobStatus.TRANSFERING.getKey(), Constants.PlatformJobStatus.EXCEPTION.getKey() ) )==Constants.ZERO){//如果没进行中任务 PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper().lambda() .eq(PlatformJob::getCarCodeFront,event.getPlateNos()) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .in(PlatformJob::getStatus, Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(), Constants.PlatformJobStatus.WART_SIGN_IN.getKey() ) .orderByAsc(PlatformJob::getCreateDate) .last(" limit 1") ); if(Objects.nonNull(platformJob)){ if(Constants.equalsInteger(platformJob.getType(),Constants.ONE)){ //如果是自有车装货自动签到 jobAutoSignBiz(platformJob); }else if(Constants.equalsInteger(platformJob.getType(),Constants.ZERO)){ //如果是自有车卸货 查询TMS合同状态,决定是否自动签到 checkTmsContractStatusBiz(platformJob); } } } } } } private CarEvent initCarEventModelByRequest(EventParkInfoRequest request) { 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.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.setRoadwayName(request.getData().getRoadwayName()); 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()); event.setCarType(Constants.RetentionCarType.other);//默认未登记车辆 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())); } return event; } /** * ;如果是卸货任务,需要通过TMS提供的“2.2合同列表接口”接口查询车辆对应的合同状态是否为在途状态(对应orderStatus值为3/4/5/6), * 如果是自动签到,否则不自动签到;如果一个车辆对应多个合同号,则取运单下任一合同查询对应在途信息 * @param platformJob */ private void checkTmsContractStatusBiz(PlatformJob platformJob) { PlatformWmsDetail detail = platformWmsDetailMapper.selectOne(new QueryWrapper().lambda() .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO) .eq(PlatformWmsDetail::getJobId, platformJob.getId()) .isNotNull(PlatformWmsDetail::getContractNum) .last("limit 1") ); if(detail!=null && StringUtils.isNotBlank(detail.getContractNum())){ TmsOrderInfoRequest param = new TmsOrderInfoRequest(); 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")){ //如果合同在途,则自动签到 jobAutoSignBiz(platformJob); } } } private void jobAutoSignBiz(PlatformJob platformJob) { platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey()); platformJob.setArriveDate(new Date()); platformJob.setSingType(Constants.TWO); platformJob.setSignDate(new Date()); List signList = platformJobMapper.selectList(new QueryWrapper().lambda().apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null ")); if(CollectionUtils.isEmpty(signList)){ platformJob.setSignNum(Constants.ONE); } else{ int maxNumber = Collections.max(signList.stream().map(i->i.getSignNum()).collect(Collectors.toList())); platformJob.setSignNum(maxNumber + Constants.ONE); } platformJobMapper.updateById(platformJob); } private Retention getRetentionModelByRequest(InoutRecord inoutRecord, EventParkInfoRequest request) { Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setCode(inoutRecord.getMemberCode()); retention.setIdcardNo(inoutRecord.getIdcardNo()); retention.setIdcardDecode(inoutRecord.getIdcardDecode()); retention.setName(inoutRecord.getMemberName()); retention.setType(inoutRecord.getMemberType()); retention.setCompanyId(inoutRecord.getCompanyId()); retention.setCompanyName(inoutRecord.getCompanyName()); retention.setEventCode(request.getEventType()+""); retention.setEventDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setFaceImg(inoutRecord.getFaceImg()); retention.setPhone(inoutRecord.getMemberPhone()); retention.setMemberId(inoutRecord.getMemberId()); retention.setDeviceName(request.getSrcName()); retention.setDeviceIndex(request.getSrcIndex()); retention.setRemark("跟随车辆入园区"); return retention; } private Retention getRetentionModelByParkRequest(EventParkInfoRequest request,CarEvent event ,InoutRecord carrecord ) { Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setCarNo(request.getData().getPlateNo()); retention.setType(Constants.THREE); retention.setMemberId(event.getMemberId()); retention.setCarType(event.getCarType()); retention.setCompanyId(event.getCompanyId()); retention.setCategoryId(carrecord.getCategoryId()); retention.setCategoryName(carrecord.getCategoryName()); retention.setCategoryParentId(carrecord.getCategoryParentId()); retention.setCategoryParentName(carrecord.getCategoryParentName()); // retention.setDeviceName(request.getSrcName()); // retention.setDeviceIndex(request.getSrcIndex()); return retention; } private void saveInterfaceLog(Object param, String path,String result,boolean need) { if(!need){ return; } InterfaceLog hkMonitoryLogDO=new InterfaceLog(); hkMonitoryLogDO.setType(1); hkMonitoryLogDO.setCreateDate(new Date()); hkMonitoryLogDO.setIsdeleted(0); if(param!=null){ hkMonitoryLogDO.setRequest(JSONObject.toJSONString(param)); } hkMonitoryLogDO.setRepose(result); hkMonitoryLogDO.setName(path); hkMonitoryLogDO.setUrl(path); interfaceLogMapper.insert(hkMonitoryLogDO); } /** * 处理月台工作状态事件订阅后推送数据逻辑逻辑 * @param param * @param response * @return */ @Override public String dealPlatformStatusEvent(EventPlatformRequest param, HttpServletResponse response){ log.info("【海康月台工作状态事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); String result = null; try { if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ return null; } //门禁事件集合 List events = param.getParams().getEvents(); List list = new ArrayList<>(); for(EventPlatformInfoRequest request : events){ EventPlatformDataRequest data = request.getData(); if(data ==null ){ continue; } Integer workStatus = 0; if( data.getHPWorkingStatus() ==null || data.getHPWorkingStatus().size() ==0){ continue;//如何推送状态集合为空,不处理跳过 } PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper().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("【海康月台工作状态事件推送】========成功======="); }catch (Exception e) { result = "失败"+e.getMessage(); log.error("【海康月台工作状态事件推送】========失败=======:\n" + e.getMessage()); }finally { saveInterfaceLog(param,"/business/hksync/push/platform/workstatus",result,false);//不计日志 } return null; } /** * 处理月台车辆状态事件订阅后推送数据逻辑逻辑 * @param param * @param response * @return */ @Override public String dealPlatformCarsEvent(EventPlatformCarsRequest param, HttpServletResponse response){ log.info("【海康月台车辆状态事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); String result = null; try { if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ return null; } //门禁事件集合 List events = param.getParams().getEvents(); List eventList = new ArrayList<>(); for(EventPlatformCarsInfoRequest request : events){ if( request.getData() ==null ){ continue; } Integer workStatus = 0; EventPlatformCarsDataRequest data = request.getData(); if( data.getHPVehicleStatus() ==null ){ continue;//如何推送状态集合为空,不处理跳过 } //各车道车辆状态 EventPlatformCarsStatusInfoRequest status = data.getHPVehicleStatus(); PlatformEvent event = initPlatformEventModel(request,data,status); if(StringUtils.isBlank(status.getPlateNo())){ eventList.add(event);//封装事件(已月台通道为维度) continue;//如果车辆信息为空,不处理直接跳过 } PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper().lambda() .eq(PlatformDevice::getDeviceId,request.getSrcIndex()) .eq(PlatformDevice::getIsdeleted,Constants.ZERO) .last("limit 1")); if(model ==null){ eventList.add(event);//封装事件(已月台通道为维度) continue;//监控点未同步,跳过处理 } event.setPlatformId(model.getPlatformId());//月台编码 eventList.add(event);//封装事件(已月台通道为维度) //截掉第一个颜色汉字,去掉“挂”字 status.setPlateNo(status.getPlateNo().substring(1,status.getPlateNo().length()).replace("挂","")); PlatformJob job = platformJobMapper.selectJoinOne(PlatformJob.class, new MPJLambdaWrapper() .selectAll(PlatformJob.class) .selectAs(Platform::getName,PlatformJob::getPlatformName) .selectAs(Platform::getLedContent,PlatformJob::getLedContent) .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) // .eq(!StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeBack,status.getPlateNo() )//后车牌号 // .eq(StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeFront,status.getPlateNo() )//前车牌号 .eq(PlatformJob::getIsdeleted,Constants.ZERO ) .eq(PlatformJob::getPlatformId,model.getPlatformId() ) .orderByDesc(PlatformJob::getCallDate) .last("limit 1 ")); if(job == null){ if(StringUtils.equals(status.getMotionStatus(),"enter")){ //如果月台当前没作业,直接提示车辆停错 Platform platform = platformMapper.selectJoinOne(Platform.class, new MPJLambdaWrapper() .selectAll(Platform.class) .eq(Platform::getIsdeleted,Constants.ZERO ) .eq(PlatformJob::getId,model.getPlatformId() ) .last("limit 1 ")); if(platform!=null){ dealCarsAndPlatformErrorBiz(platform,status); } } continue;//如果作业为空,跳过处理 } PlatformJob update = new PlatformJob(); update.setId(job.getId()); update.setEditDate(new Date()); if(StringUtils.equals(status.getMotionStatus(),"leave")){ //如果是车辆离开,不做相关自动完成作业业务处理 /* if(job ==null && !Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ continue;//如果没查到对应的作业或者作业并非作业中,不做业务处理 } if(Constants.equalsInteger(job.getType(), Constants.THREE) || Constants.equalsInteger(job.getType(), Constants.TWO)){ //如果是wms推送的外协车辆外协车辆 if(platformWmsDetailMapper.selectCount(new QueryWrapper().lambda() .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) .eq(PlatformWmsDetail::getJobId,job.getId()) .ne(PlatformWmsDetail::getLockStatus,Constants.ONE)) >0){ continue;//如果外协任务作业,合同号有未上锁的情况,不做自动完成作业逻辑处理,跳过不处理 } } //如果是正在作业的状态,标记作业已完成 update.setStatus(Constants.PlatformJobStatus.DONE.getKey());//作业已完成 update.setDoneDate(update.getEditDate());*/ if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey()) || Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.TRANSFERING.getKey()) || Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.EXCEPTION.getKey()) || Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){ if(((StringUtils.equals(status.getStockStatus(),"front") && StringUtils.equals(job.getCarCodeFront(),status.getPlateNo())) ||(!StringUtils.equals(status.getStockStatus(),"front") && StringUtils.equals(job.getCarCodeBack(),status.getPlateNo())) )){ //说明车辆进错月台 或者还未叫号状态,发起警告 // dealCarsInErrorPlatformBiz(job,status); if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey()) || Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){ update.setInOut(Constants.ZERO);//车辆已经离开 platformJobMapper.updateById(update); } dealPlatformContentForLeave(job); } } }else if(StringUtils.equals(status.getMotionStatus(),"enter")){ //如果是车辆进入 if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){ if(!((StringUtils.equals(status.getStockStatus(),"front") && StringUtils.equals(job.getCarCodeFront(),status.getPlateNo())) ||(!StringUtils.equals(status.getStockStatus(),"front") && StringUtils.equals(job.getCarCodeBack(),status.getPlateNo())) )){ //说明车辆进错月台 或者还未叫号状态,发起警告 dealCarsInErrorPlatformBiz(job,status); }else{ //车辆已经进入 update.setInOut(Constants.ONE);//车辆已经进入 platformJobMapper.updateById(update); } } /* if(job.getStartDate() == null){ update.setStartDate(update.getEditDate()); } update.setStatus(Constants.PlatformJobStatus.WORKING.getKey());//开始作业 */ }else{ continue;//其他状态不处理,跳过 } //暂时不做相关自动完成作业业务处理 // dealPlatformJobLogBiz(update,status);//记录作业日志 } if(eventList.size()>0){ //生成事件 platformEventMapper.insert(eventList); } result = "成功"; log.info("【海康月台车辆状态事件推送】========成功======="); }catch (Exception e) { result = "失败"+e.getMessage(); log.error("【海康月台车辆状态事件推送】========失败=======:\n" + e.getMessage()); }finally { saveInterfaceLog(param,"/business/hksync/push/platform/workstatus",result,false);//不计日志 } return null; } /** * 月台车辆离开 设置月台文案为“空闲中 文案” * @param model */ private void dealPlatformContentForLeave(PlatformJob model) { List deviceList = platformDeviceMapper.selectList(new QueryWrapper().lambda() .eq(PlatformDevice::getType, Constants.ZERO) .eq(PlatformDevice::getPlatformId,model.getPlatformId()) .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); if(deviceList ==null || deviceList.size() == 0){ return; } int speed = 13; try { speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode()); }catch (Exception e){ } String content = StringUtils.defaultString(model.getLedContent(), Constants.PlatformLedContent.IDEL_CONTNET.getInfo()); List logList = new ArrayList<>(); for(PlatformDevice device : deviceList){ if(StringUtils.isBlank(device.getHkId())){ continue; } PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1); logList.add(log); } if(logList.size()>0){ platformBroadcastLogMapper.insert(logList); } } private PlatformEvent initPlatformEventModel(EventPlatformCarsInfoRequest request, EventPlatformCarsDataRequest data, EventPlatformCarsStatusInfoRequest status) { PlatformEvent model = new PlatformEvent(); model.setCreateDate(new Date()); model.setIsdeleted(Constants.ZERO); model.setEditDate(model.getCreateDate()); model.setEventId(request.getEventId()); // model.setRemark(JSONObject.toJSONString(request)); model.setEventType(request.getEventType()); model.setDataEventType(data.getEventType()); model.setHappenTime(request.getHappenTime()); model.setSrcIndex(request.getSrcIndex()); model.setSrcType(request.getSrcType()); model.setStatus(request.getStatus()); model.setTimeout(request.getTimeout()); model.setDateTime(data.getDateTime()); model.setDataType(data.getDataType()); model.setSendTime(data.getSendTime()); model.setIpAddress(data.getIpAddress()); model.setIpv6Address(data.getIpv6Address()); model.setPortNo(data.getPortNo()); model.setMacAddress(data.getMacAddress()); model.setProtocol(data.getProtocol()); model.setChannelId(data.getChannelID()); model.setChannelName(data.getChannelName()); model.setEventState(data.getEventState()); model.setActivePostCount(data.getActivePostCount()); model.setEventDescription(data.getEventDescription()); model.setDeviceId(data.getDeviceID()); model.setHpno(status.getHPNo()); model.setMotionStatus(status.getMotionStatus()); model.setPlateNo(status.getPlateNo()); model.setVehicleDoorStatus(status.getVehicleDoorStatus()); model.setStockStatus(status.getStockStatus()); model.setBackgroundImageContent(status.getBackgroundImage()!=null?status.getBackgroundImage().getResourcesContent():null); model.setPlateScore(status.getPlateScore()); model.setPlatePictureContent(status.getPlatePicture()!=null?status.getPlatePicture().getResourcesContent():null); return model; } /** * 记录月台作业日志 * @param job * @param status */ @Transactional private void dealPlatformJobLogBiz(PlatformJob job,EventPlatformCarsStatusInfoRequest status) { platformJobMapper.updateById(job);//更新作业状态 PlatformLog log = new PlatformLog(); log.setIsdeleted(Constants.ZERO); log.setCreateDate(new Date()); log.setEditDate(log.getCreateDate()); log.setJobId(job.getId()); log.setObjId(job.getId()+""); if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ //如果是作业完成 log.setObjType(Constants.PlatformJobLogType.DONE.getKey()); log.setTitle(Constants.PlatformJobLogType.DONE.getName()); log.setContent(Constants.PlatformJobLogType.DONE.getInfo()); //查询最后一次开始作业的日志 PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper().lambda() .eq(PlatformLog::getIsdeleted,Constants.ZERO) .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey()) .eq(PlatformLog::getJobId,job.getId()) .orderByDesc(PlatformLog::getCreateDate) .last(" limit 1")); String v = Long.toString(job.getDoneDate().getTime() - lastBeginPlatform.getCreateDate().getTime() / 1000) ; lastBeginPlatform.setRemark(job.getPlatformId().toString()); lastBeginPlatform.setParam3(v); lastBeginPlatform.setParam2(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); platformLogMapper.updateById(lastBeginPlatform);//更新上一次作业的完成时间和作业时长 }else{ //如果是作业中 log.setObjType(Constants.PlatformJobLogType.WORKING.getKey()); log.setTitle(Constants.PlatformJobLogType.WORKING.getName()); log.setContent(Constants.PlatformJobLogType.WORKING.getInfo()); log.setParam1(DateUtil.getDate(log.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); } platformLogMapper.insert(log); } /** * 处理车辆进入错误月台业务逻辑 * @param model (月台设备关联信息) * @param status */ private void dealCarsInErrorPlatformBiz( PlatformJob model,EventPlatformCarsStatusInfoRequest status) { //处理车辆进入错误月台业务逻辑 SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO(); savePlatformWarnEventDTO.setPlatformJobId(model.getId()); savePlatformWarnEventDTO.setPlatformId(model.getPlatformId()); savePlatformWarnEventDTO.setCarCode(model.getCarCodeFront()); savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.STOP_ERROR.getKey()); platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO); int speed = 13; try { speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode()); }catch (Exception e){ } List deviceList = platformDeviceMapper.selectList(new QueryWrapper().lambda() .eq(PlatformDevice::getPlatformId,model.getPlatformId()) .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); if(deviceList ==null || deviceList.size() == 0){ return; } String content =Constants.PlatformLedContent.WRONG_IN.getInfo(); content = content.replace("${param2}",model.getPlatformName()); content = content.replace("${param}",status.getPlateNo()); List broadcastList = new ArrayList<>(); List ledList = new ArrayList<>(); String bNames = ""; List logList = new ArrayList<>(); for(PlatformDevice device : deviceList){ if(StringUtils.isBlank(device.getHkId())){ continue; } /*if(Constants.equalsInteger(device.getType(),Constants.ZERO)){ //如果是LED PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1); logList.add(log); ledList.add(device.getHkId()); }else */if(Constants.equalsInteger(device.getType(),Constants.TWO)){ //如果是广播点 bNames += device.getName()+";"; broadcastList.add(device.getHkId()); } } if(broadcastList.size()>0){ PlatformBroadcastLog log = dealBroadcastBiz(model,broadcastList,bNames,Constants.PlatformBroadcastContent.WRONG_IN.getInfo().replace("${param}",status.getPlateNo())); logList.add(log); } if(logList.size()>0){ platformBroadcastLogMapper.insert(logList); } } private void dealCarsAndPlatformErrorBiz( Platform model, EventPlatformCarsStatusInfoRequest status) { //处理车辆进入错误月台业务逻辑 SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO(); savePlatformWarnEventDTO.setPlatformJobId(model.getId()); savePlatformWarnEventDTO.setPlatformId(model.getId()); savePlatformWarnEventDTO.setCarCode(status.getPlateNo()); savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.STOP_ERROR.getKey()); platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO); int speed = 13; try { speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode()); }catch (Exception e){ } List deviceList = platformDeviceMapper.selectList(new QueryWrapper().lambda() .eq(PlatformDevice::getPlatformId,model.getId()) .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); if(deviceList ==null || deviceList.size() == 0){ return; } String content =Constants.PlatformLedContent.WRONG_IN.getInfo(); content = content.replace("${param2}",model.getName()); content = content.replace("${param}",status.getPlateNo()); List broadcastList = new ArrayList<>(); List ledList = new ArrayList<>(); String bNames = ""; List logList = new ArrayList<>(); for(PlatformDevice device : deviceList){ if(StringUtils.isBlank(device.getHkId())){ continue; } if(Constants.equalsInteger(device.getType(),Constants.TWO)){ //如果是广播点 bNames += device.getName()+";"; broadcastList.add(device.getHkId()); } } if(broadcastList.size()>0){ PlatformJob job = new PlatformJob(); job.setId(-1); job.setCarCodeFront(status.getPlateNo()); job.setPlatformId(model.getId()); PlatformBroadcastLog log = dealBroadcastBiz(job,broadcastList,bNames,Constants.PlatformBroadcastContent.WRONG_IN.getInfo().replace("${param}",status.getPlateNo())); logList.add(log); } if(logList.size()>0){ platformBroadcastLogMapper.insert(logList); } } /** * 广播通知 * @param model * @param broadcastList * @param bNames * @param content1 * @return */ public static PlatformBroadcastLog dealBroadcastBiz(PlatformJob model, List broadcastList,String bNames , String content1) { PlatformBroadcastLog log = new PlatformBroadcastLog(); content1 = content1.replace("${param}",model.getCarCodeFront()); log.setObjId(model.getId().toString()); log.setCreateDate(new Date()); log.setBizType(Constants.ONE); log.setHkDate(new Date()); log.setObjType(Constants.ONE); log.setInfo(content1); log.setRemark(bNames); log.setNum(Constants.ONE); log.setIds(String.join(",",broadcastList)); CustomBroadcastRequest request = new CustomBroadcastRequest(); request.setAudioPointIndexCode(broadcastList); request.setPlayDuration(15);//单位秒 request.setBroadCastMode("tts"); request.setPriority(1); request.setState(1);//播放/停止标识 1-播放,0-停止 request.setPlayTtsContent(content1); BaseResponse response = HKService.customBroadcast(request); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ log.setHkInfo("请求失败:"+JSONObject.toJSONString(response)); log.setHkStatus(Constants.THREE); }else{ log.setHkInfo("请求成功"); log.setHkStatus(Constants.TWO); } log.setDeviceType(Constants.ZERO); log.setName("发送广播播报内容"); return log; } public static PlatformBroadcastLog dealLedContentBiz(Integer platformId,String hkNo,String hkName, String content,int speed,int color) { PlatformBroadcastLog log = new PlatformBroadcastLog(); log.setCreateDate(new Date()); log.setBizType(Constants.ONE); log.setHkDate(new Date()); log.setObjType(Constants.ONE); log.setIds(hkNo); log.setRemark(hkName); log.setInfo(content); log.setNum(Constants.ONE); log.setObjId(platformId.toString()); TransparentChannelBodyRequest body = new TransparentChannelBodyRequest(); TransparentChannelHeadRequest head = new TransparentChannelHeadRequest(); TransparentChannelBodyParamRequest request = new TransparentChannelBodyParamRequest(); TransparentChannelBodyRegionRequest regions = new TransparentChannelBodyRegionRequest(); head.setAbility("cld");//固定值 head.setTreatyType("haixuan_led_net");//固定值 head.setDeviceIndexCode(hkNo); body.setMethod("ControlLedGereral");//固定值 request.setIndexCode(hkNo); request.setOperationType(219);//固定值 regions.setActionType(32); regions.setContent(content); regions.setRegionNo(1); regions.setRegionType(14); regions.setFontColor(color>0?color:1); regions.setCircleTimes(1);//循环次数 regions.setFontSize(32);// regions.setStayTime(1);//单位?? regions.setRegionLeftTopXPos(0); regions.setRegionLeftTopYPos(0); regions.setRegionRightBottomXPos(255); regions.setRegionRightBottomYPos(31); request.setRegions(new ArrayList<>()); request.getRegions().add(regions); regions.setSpeed(speed>0?speed:13); body.setParams(request); BaseResponse response = HKService.transparentchannel(head,body); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ log.setHkInfo("请求失败:"+JSONObject.toJSONString(response)); log.setHkStatus(Constants.THREE); }else{ log.setHkInfo("请求成功"); log.setHkStatus(Constants.TWO); } log.setDeviceType(Constants.ONE); log.setName("设置LED屏显内容"); return log; } }