Commit 1d750e2b9192d591ab6df9125741cfce41128255

Authored by 潘钊
1 parent 712c343e

update...

src/main/java/com/bsth/data/gpsdata_v2/utils/SignalSchPlanMatcher.java 0 → 100644
  1 +package com.bsth.data.gpsdata_v2.utils;
  2 +
  3 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  4 +import com.bsth.data.schedule.DayOfSchedule;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.stereotype.Component;
  10 +
  11 +/**
  12 + * 班次匹配器
  13 + * Created by panzhao on 2016/12/31.
  14 + */
  15 +@Component
  16 +public class SignalSchPlanMatcher {
  17 +
  18 + @Autowired
  19 + DayOfSchedule dayOfSchedule;
  20 +
  21 + Logger log = LoggerFactory.getLogger(this.getClass());
  22 +
  23 + /**
  24 + * 发车信号匹配
  25 + * @param gps
  26 + * @param sch
  27 + * @return
  28 + */
  29 + public void outMatch(GpsEntity gps, ScheduleRealInfo sch){
  30 + long t = gps.getTimestamp();
  31 + if(t < sch.getDfsjT())
  32 + return;
  33 +
  34 + try{
  35 + //会不会是分班没有完成
  36 + if(sch.getBcType().equals("in") && t - sch.getDfsjT() > 1000 * 60 * 20){
  37 + ScheduleRealInfo fbFirst = dayOfSchedule.nextByBcType(sch, "normal");
  38 +
  39 + if(fbFirst == null || !fbFirst.getQdzCode().equals(gps.getStopNo()))
  40 + return;
  41 +
  42 + long dt = fbFirst.getDfsjT();
  43 + //晚于待发前4分钟 -执行分班的首个营运
  44 + if(dt - t < 1000 * 60 * 4){
  45 + dayOfSchedule.addExecPlan(fbFirst);
  46 + return;
  47 + }
  48 + }
  49 +
  50 + //线路编码不匹配
  51 + if("out".equals(sch.getBcType()) && !sch.getXlBm().equals(gps.getLineId())){
  52 + ScheduleRealInfo nextOut = dayOfSchedule.nextByBcType(sch, "out");
  53 + if(nextOut != null && nextOut.getXlBm().equals(gps.getLineId())
  54 + && fcSpace(sch, gps) > fcSpace(nextOut, gps)){
  55 + dayOfSchedule.addExecPlan(nextOut);
  56 + return;
  57 + }
  58 + }
  59 + }catch (Exception e){
  60 + log.error("", e);
  61 + }
  62 +
  63 + //下一个相同走向的班次
  64 + ScheduleRealInfo next = dayOfSchedule.nextSame(sch);
  65 + if(next == null || !next.getQdzCode().equals(sch.getQdzCode()))
  66 + return;
  67 +
  68 + //晚于班次间隔百分之70,跳下一个班次
  69 + double s = (int) (next.getDfsjT() - sch.getDfsjT());
  70 + double r = (int) (t - sch.getDfsjT());
  71 + if(r / s > 0.7){
  72 + if(dayOfSchedule.addExecPlan(next))
  73 + outMatch(gps, next);
  74 + }
  75 + }
  76 +
  77 + public static int fcSpace(ScheduleRealInfo sch, GpsEntity gps){
  78 + return (int) Math.abs((sch.getDfsjT() - gps.getTimestamp()));
  79 + }
  80 +}
... ...