private void btTerminarExceso_Click(object sender, EventArgs e) { var inicio = InicioExceso; var fin = TestApp.Position.LastPosition; var point1 = new GPSPoint(inicio.FechaMensaje, (float)inicio.Latitud, (float)inicio.Longitud, inicio.Velocidad, GPSPoint.SourceProviders.GpsProvider, 50); var point2 = new GPSPoint(fin.FechaMensaje, (float)fin.Latitud, (float)fin.Longitud, fin.Velocidad, GPSPoint.SourceProviders.GpsProvider, 50); var limit = Convert.ToInt32(txtExcesoPermitida.Value); var evt = new SpeedingTicket(TestApp.Dispositivo.Id, 0, point1, point2, Math.Max(inicio.Velocidad, fin.Velocidad), limit, null); Sender.Enqueue(TestApp.Config.Queue, evt, TestApp.Config.QueueType); btCancelarExceso_Click(sender, e); }
public static IMessage Parse(String[] partes, INode node) { if (partes[partes.Length - 1].EndsWith("*")) { partes[partes.Length - 1] = partes[partes.Length - 1].TrimEnd('*'); } if (Convert.ToInt32(partes[2]) != node.Id) { return(null); } var evpos = Posicion.ParsearPosicionCorta(partes[4]); var mid = Convert.ToUInt32(partes[1]); var code = partes[3]; IMessage res; switch (code) { case EvCode.SpeedingTicket: res = new SpeedingTicket( node.Id, mid, Posicion.ParsearPosicionCorta(partes[5]), evpos, Speed.KnotToKm(Convert.ToInt16(partes[7])), Speed.KnotToKm(Convert.ToInt16(partes[6])), null); break; case EvCode.AcceleracionBrusca: res = FactoryBrusca(partes, node, evpos, MessageIdentifier.AccelerationEvent, mid); break; case EvCode.FrenadaBrusca: res = FactoryBrusca(partes, node, evpos, MessageIdentifier.DesaccelerationEvent, mid); break; default: res = TranslateLegacyCode(code, partes) .FactoryEvent(node.Id, mid, evpos, evpos.GetDate(), null, new List <Int64> { 0 }); break; } return(res.AddStringToSend(String.Format("REV;{0}", partes[1]))); }
private static bool UrbetrackUT_ExcesoVelocidad(object sender, ExcesoVelocidad pdu) { var d = Devices.I().FindById(pdu.IdDispositivo); if (d == null) { return(false); } // si alguna posicion DEL TICKET esta mocha... if (pdu.PosicionDeTicket == null || pdu.PosicionDeTicket.Lat == 0 || pdu.PosicionFinal == null || pdu.PosicionFinal.Lat == 0) { STrace.Debug(typeof(UrbetrackUT).FullName, d.Id, String.Format("CrapReceivedCounter -> Device[{0}]: TICKET[VELOCIDAD EXCEDIDA]/MALFORMACION DE DATOS", d.LogId)); return(true); } #region HACK FIX PARA LA VERSION 99 DEL FIRMWARE if (d.HackVersion99()) { if (pdu.PosicionDeAviso != null && pdu.PosicionDeAviso.Lat != 0) { var diferencia = pdu.PosicionDeTicket.Date - pdu.PosicionDeAviso.Date; STrace.Debug(typeof(UrbetrackUT).FullName, d.Id, String.Format("TICKET[VELOCIDAD EXCEDIDA/DEVICE={0}]: DIFERENCIA CALCULADA {1}", d.LogId, diferencia)); if (diferencia.TotalSeconds > 21) { if (QuadTree.QuadTree.i() == null) { return(false); } // esto me indica que aplico el b-u-g var claseAviso = QuadTree.QuadTree.i().GetPositionClass(pdu.PosicionDeAviso.Lat, pdu.PosicionDeAviso.Lon); var claseTicket = QuadTree.QuadTree.i().GetPositionClass(pdu.PosicionDeTicket.Lat, pdu.PosicionDeTicket.Lon); if (claseAviso == -1 || claseTicket == -1) { return(false); } if (claseAviso == claseTicket) { return(true); } STrace.Debug(typeof(UrbetrackUT).FullName, d.Id, String.Format("TICKET[VELOCIDAD EXCEDIDA/DEVICE={0}/RIDER={1}]: REPARANDO EVENTO MALFORMADO X BUG v99", d.LogId, pdu.RiderIdentifier)); pdu.PosicionDeAviso = null; } } if (pdu.PosicionDeAviso != null && pdu.PosicionDeAviso.Lat != 0) { var duracion = pdu.PosicionFinal.Date.Subtract(pdu.PosicionDeAviso.Date).TotalSeconds; if (duracion < 21) { return(true); } } } #endregion DecorateFixWithZone(pdu.PosicionDeTicket); DecorateFixWithZone(pdu.PosicionDeTicket); DecorateFixWithZone(pdu.PosicionFinal); if (DataTransportLayer.IsRetransmission(d.Id, pdu.Seq)) { return(false); } var msg = new SpeedingTicket(d.Id, pdu.Seq) { StartPoint = pdu.PosicionDeAviso, UserIdentifier = pdu.RiderIdentifier, TicketPoint = pdu.PosicionDeTicket, EndPoint = pdu.PosicionFinal, SpeedReached = Speed.KnotToKm(pdu.VelocidadMaximaAlcanzada), SpeedLimit = Speed.KnotToKm(pdu.VelocidadMaximaPermitida), Tiempo = (pdu.PosicionDeAviso ?? pdu.PosicionDeTicket).GetDate(), }; Dispatcher.Dispatch(msg); return(true); }
private void OnFinInfraccion(VehicleState vehicleState) { var duracion = LastPosition.Fecha.Subtract(_inicioExceso.Fecha); if (duracion.TotalSeconds < 15) { return; } var strMsg = string.Format (": Permitida {0} - Alcanzada {1} - Duracion: {2}", Convert.ToInt32(_velocidadInfraccion), Convert.ToInt32(_velocidadAlcanzada), duracion); var speedTicket = new SpeedingTicket(vehicleState.DeviceId, vehicleState.NextMsgId, _inicioExceso.ToGpsPoint(), LastPosition.ToGpsPoint(), _velocidadAlcanzada, _velocidadInfraccion, string.Empty); var dao = new DAOFactory(); var dispositivo = dao.DispositivoDAO.FindById(vehicleState.DeviceId); var coche = dao.CocheDAO.FindMobileByDevice(vehicleState.DeviceId); Empleado chofer = null; Zona zona = null; var messageSaver = new MessageSaver(dao); var evento = messageSaver.Save(speedTicket, MessageCode.SpeedingTicket.GetMessageCode(), dispositivo, coche, chofer, _inicioExceso.Fecha, _inicioExceso.ToGpsPoint(), LastPosition.ToGpsPoint(), strMsg, _velocidadInfraccion, _velocidadAlcanzada, null, zona); var infraccion = new Infraccion { Vehiculo = coche, Alcanzado = _velocidadAlcanzada, CodigoInfraccion = Infraccion.Codigos.ExcesoVelocidad, Empleado = evento.Chofer, Fecha = _inicioExceso.Fecha, Latitud = _inicioExceso.Latitud, Longitud = _inicioExceso.Longitud, FechaFin = LastPosition.Fecha, LatitudFin = LastPosition.Latitud, LongitudFin = LastPosition.Longitud, Permitido = _velocidadInfraccion, Zona = zona, FechaAlta = DateTime.UtcNow }; dao.InfraccionDAO.SaveOrUpdate(infraccion); Console.WriteLine(strMsg); }