Esempio n. 1
0
        protected void DiscardEvent(MensajeVO mensaje, Dispositivo dispositivo, Coche coche, Empleado chofer, DateTime fecha, GPSPoint inicio, GPSPoint fin, DiscardReason discardReason, string codigo)
        {
            STrace.Debug(GetType().FullName, dispositivo.GetId(), String.Format(
                             "Descartando: mensaje={0} coche={1} chofer={2} fecha={3} inicio={4} fin={5} discardReason={6}",
                             mensaje,
                             coche,
                             chofer,
                             fecha,
                             inicio,
                             fin,
                             discardReason));
            var log = new LogMensajeDescartado
            {
                Chofer         = chofer,
                Coche          = coche,
                Dispositivo    = dispositivo,
                Fecha          = inicio != null ? inicio.Date : fecha,
                Expiracion     = DateTime.UtcNow.AddDays(1),
                Latitud        = inicio != null ? inicio.Lat : 0,
                Longitud       = inicio != null ? inicio.Lon : 0,
                FechaFin       = fin != null ? fin.Date : (DateTime?)null,
                LatitudFin     = fin != null ? new Double?(fin.Lat) : null,
                LongitudFin    = fin != null ? new Double?(fin.Lon) : null,
                Mensaje        = mensaje != null?DaoFactory.MensajeDAO.FindById(mensaje.Id) : null,
                Texto          = mensaje != null ? mensaje.Texto : codigo,
                MotivoDescarte = (int)discardReason,
            };

            DaoFactory.LogMensajeDescartadoDAO.Save(log);
        }
Esempio n. 2
0
        private void ProcessTaco(String file)
        {
            Empresa     empresa     = null;
            Dispositivo dev         = null;
            var         errorslist  = new List <String>();
            var         infoList    = new List <String>();
            var         moveAllFile = false;
            var         maxvel      = 0;
            var         maxrpm      = 0;
            String      chofer      = null;
            var         lastdt      = DateTime.MinValue;
            var         latestdt    = DateTime.MinValue;
            var         repro       = file.Contains("_r_");

            using (var sr = new StreamReader(file))
            {
                String line;
                while ((moveAllFile == false) && ((line = sr.ReadLine()) != null))
                {
                    var datos = line.Split('@');
                    try
                    {
                        switch (datos[0])
                        {
                        //default:
                        //STrace.Trace(GetType().FullName, "Tipo de linea ignorada: {0}", line);
                        //break;
                        case "1":                                 //info
                        {
                            infoList.Add(line);
                            try
                            {
                                switch (datos[1])
                                {
                                //default:
                                //STrace.Trace(GetType().FullName, "Tipo de linea de info ignorada: {0}", line);
                                //break;
                                case "3":                                                         //"Nombre de la Empresa"
                                    empresa = DaoFactory.EmpresaDAO.FindByCodigo(datos[2]);
                                    if (empresa == null)
                                    {
                                        throw new InvalidDataException(String.Format("No se encontro la empresa: {0}", datos[2]));
                                    }
                                    break;

                                case "4":                                                         //"Fecha Y Hora de la Captura"
                                    //generar un evento?
                                    break;

                                case "6":                                                         //"Numero de Movil"
                                    if (empresa == null)
                                    {
                                        throw new InvalidDataException("Primero declare la empresa!");
                                    }
                                    dev = DaoFactory.CocheDAO.FindByInterno(new List <int> {
                                            empresa.Id
                                        }, null, datos[2]).Dispositivo;
                                    if (dev == null)
                                    {
                                        throw new InvalidDataException(String.Format("No se encontro el dispositivo o el movil: {0}", datos[2]));
                                    }
                                    lastdt = GetLastDt(dev);
                                    break;

                                case "11":                                                         //"Velocidad Maxima Programada"
                                    maxvel = Convert.ToInt32(datos[2], CultureInfo.InvariantCulture);
                                    break;

                                case "12":                                                         //"RPM Maxima Programada"
                                    maxrpm = Convert.ToInt32(datos[2], CultureInfo.InvariantCulture);
                                    break;
                                }
                            }
                            catch
                            {
                                moveAllFile = true;
                                throw;
                            }
                            break;
                        }

                        case "2":                                 //data
                        {
                            if (dev == null)
                            {
                                moveAllFile = true;
                                throw new ArgumentNullException("", "Primero declare el movil!");
                            }
                            // usar el odometro para algo?
                            try
                            {
                                switch (datos[1])
                                {
                                //default:
                                //STrace.Trace(GetType().FullName, "Tipo de linea de datos ignorada: {0}", line);
                                //break;
                                case "1":                                                         //"Dato simple"
                                {
                                    //2@1@0@20111118@144100@27@270          "Evento;R;Fecha;Hora;Velocidad;Kilometros"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    //var code = (MessageIdentifier) Convert.ToInt16(datos[2], CultureInfo.InvariantCulture);
                                    //Dispatcher_Dispatch(code.FactoryEvent(dev.Id, 0, null, dt, null, null));
                                    ////
                                    ReportOdometer(datos[6], datos[5], dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "2":                                                         //"Motor apagado"
                                {
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    DispatcherDispatch(MessageIdentifier.EngineOffInternal.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], datos[5], dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "3":                                                         //"Motor encendido"
                                {
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    DispatcherDispatch(MessageIdentifier.EngineOnInternal.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], datos[5], dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "4":                                                         //"Aceleracion Brusca"
                                {
                                    //2@4@23418@20111202@135000@0@874           "Evento;CHOFER;Fecha;Hora;R;Kilometros"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifier.AccelerationEvent.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], null, dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "5":                                                         //"Desaceleracion Brusca"
                                {
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifier.DesaccelerationEvent.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], null, dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "6":                                                         //"Inicio Infraccion"
                                {
                                    //2@6@23418@20111203@203405@23418@880       "Evento;CHOFER;Fecha;Hora;CHOFER;Kilometros"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifier.SpeedingTicketInit.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], null, dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "7":                                                         //"Fin Infraccion"
                                {
                                    //2@7@23418@20111203@203405@195@2           "Evento;CHOFER;Fecha;Hora;Velocidad MAXIMA;minutos de infraccion"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    var lista = new List <Int64>
                                    {
                                        Convert.ToInt32(datos[5], CultureInfo.InvariantCulture),                                                                                 //reached speed
                                        Convert.ToInt32(datos[6], CultureInfo.InvariantCulture) * 60,                                                                            //duration
                                        maxvel,
                                    };

                                    DispatcherDispatch(MessageIdentifier.SpeedingTicketEnd.FactoryEvent(dev.Id, 0, null, dt, chofer, lista), lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "9":                                                         //"Desconexion"
                                {
                                    //2@9@23418@20111119@203405@213000@20111119@0     "Evento;CHOFER;Fecha(reco);Hora;Hora(desco);Fecha;R"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    var dt2 = DateTimeUtils.SafeParseFormat(datos[6] + datos[5].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    DispatcherDispatch(MessageIdentifier.SensorPowerDisconected.FactoryEvent(dev.Id, 0, null, dt2, chofer, null), lastdt, repro, ref latestdt);
                                    DispatcherDispatch(MessageIdentifier.SensorPowerReconected.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "10":                                                         //"Inicio RPM Maxima"
                                {
                                    //2@10@23418@20111119@203405@0@339          "Evento;R;Fecha;Hora;Velocidad;R;Kilometros"
                                    //todo, este ejemplo tomado del mail no concuerda con su descripcion...
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    //var chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifier.RpmTicketInit.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], datos[5], dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "11":                                                         //"Final RPM Maxima"
                                {
                                    //2@11@23418@20111119@203500@0@10300        "Evento;R;Fecha;Hora;Velocidad;R;RPM MAXIMA"
                                    //todo, este ejemplo tomado del mail no concuerda con su descripcion...
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    //var chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifier.RpmTicketEnd.FactoryEvent(dev.Id, 0, null, dt, chofer, new List <Int64> {
                                                Convert.ToInt32(datos[6], CultureInfo.InvariantCulture), maxrpm
                                            }), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(null, datos[5], dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "12":                                                         //"Inicio Chofer"
                                {
                                    //2@12@23418@20111120@132302@0@23418        "Evento;CHOFER;Fecha;Hora;R;CHOFER;"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifierX.FactoryRfid(dev.Id, 0, null, dt, chofer, 0), lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "13":                                                         //"Final Chofer"
                                {
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifierX.FactoryRfid(dev.Id, 0, null, dt, chofer, 1), lastdt, repro, ref latestdt);
                                    chofer = null;
                                    break;
                                }

                                case "15":                                                         //"Servicio Tecnico"
                                {
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    DispatcherDispatch(MessageIdentifier.TechnicalService.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "30":                                                         //"Movimiento desde hasta y minutos de marcha"
                                {
                                    //2@30@23418@20111119@81800@85200@34        "Evento;CHOFER;Fecha;Hora INI;Hora FIN;Minutos de marcha"
                                    var dt    = DateTimeUtils.SafeParseFormat(datos[3] + datos[5].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    var lista = new List <Int64>
                                    {
                                        (Int32)(DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss") - dt).TotalSeconds,                            //duration evento
                                        Convert.ToInt32(datos[6], CultureInfo.InvariantCulture) * 60,                                                                               //durationmarcha
                                    };
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    //DispatcherDispatch(MessageIdentifier.TraveledLeg.FactoryEvent(dev.Id, 0, null, dt, chofer, lista), lastdt, repro, ref latestdt);
                                    break;
                                }

                                case "31":                                                         //"Ultimo dato de detenido?"
                                {
                                    //2@31@23418@20111119@85200@0@327           "Evento;CHOFER;Fecha;Hora;R;Kilometros"
                                    var dt = DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss");
                                    chofer = GetChoferPin(empresa, datos[2], dev.Id);
                                    DispatcherDispatch(MessageIdentifier.StoppedEvent.FactoryEvent(dev.Id, 0, null, dt, chofer, null), lastdt, repro, ref latestdt);
                                    //
                                    ReportOdometer(datos[6], null, dev, dt, chofer, lastdt, repro, ref latestdt);
                                    break;
                                }
                                }
                            }
                            catch
                            {
                                errorslist.Add(line);
                                throw;
                            }
                            break;
                        }
                        }
                    }
                    catch (Exception e)
                    {
                        STrace.Exception(GetType().FullName, e, dev.GetId());
                    }
                }
                sr.Close();
            }
            Finishit(file, infoList, moveAllFile, errorslist, latestdt, dev.Id);
        }
Esempio n. 3
0
        private void ProcessGps(String file)
        {
            Empresa     empresa     = null;
            Dispositivo dev         = null;
            var         errorslist  = new List <String>();
            var         infoList    = new List <String>();
            var         moveAllFile = false;
            var         lastdt      = DateTime.MinValue;
            var         latestdt    = DateTime.MinValue;
            var         repro       = file.Contains("_r_");

            using (var sr = new StreamReader(file))
            {
                String line;
                while ((moveAllFile == false) && ((line = sr.ReadLine()) != null))
                {
                    var datos = line.Split('@');
                    try
                    {
                        switch (datos[0])
                        {
                        //default:
                        //STrace.Trace(GetType().FullName, "Tipo de linea ignorada: {0}", line);
                        //break;
                        case "1":                                 //info
                        {
                            infoList.Add(line);
                            try
                            {
                                switch (datos[1])
                                {
                                //default:
                                //STrace.Trace(GetType().FullName, "Tipo de linea de info ignorada: {0}", line);
                                //break;
                                case "3":                                                         //"Nombre de la Empresa"
                                    empresa = DaoFactory.EmpresaDAO.FindByCodigo(datos[2]);
                                    if (empresa == null)
                                    {
                                        throw new InvalidDataException(String.Format("No se encontro la empresa: {0}", datos[2]));
                                    }
                                    break;

                                case "4":                                                         //"Fecha Y Hora de la Captura"
                                    //generar un evento?
                                    break;

                                case "13":                                                         //"Numero de Movil"
                                    if (empresa == null)
                                    {
                                        throw new InvalidDataException("Primero declare la empresa!");
                                    }
                                    dev = DaoFactory.CocheDAO.FindByInterno(new List <int> {
                                            empresa.Id
                                        }, null, datos[2].Substring(0, datos[2].Length - 2)).Dispositivo;
                                    if (dev == null)
                                    {
                                        throw new InvalidDataException(String.Format("No se encontro el dispositivo o el movil: {0}", datos[2]));
                                    }
                                    lastdt = GetLastDt(dev);
                                    break;
                                }
                            }
                            catch
                            {
                                moveAllFile = true;
                                throw;
                            }
                            break;
                        }

                        case "2":                                 //data
                        {
                            if (dev == null)
                            {
                                moveAllFile = true;
                                throw new ArgumentNullException("", "Primero declare el movil!");
                            }
                            try
                            {
                                Debug.Assert(line.StartsWith("2@100@0@"));
                                DispatcherDispatch(GPSPoint.Factory(
                                                       DateTimeUtils.SafeParseFormat(datos[3] + datos[4].PadLeft(6, '0'), "yyyyMMddHHmmss"),
                                                       Convert.ToSingle(datos[5], CultureInfo.InvariantCulture),
                                                       Convert.ToSingle(datos[6], CultureInfo.InvariantCulture),
                                                       Convert.ToSingle(datos[7], CultureInfo.InvariantCulture)).ToPosition(dev.Id, 0), lastdt, repro, ref latestdt);
                            }
                            catch
                            {
                                errorslist.Add(line);
                                throw;
                            }
                            break;
                        }
                        }
                    }
                    catch (Exception e)
                    {
                        STrace.Exception(GetType().FullName, e, dev.GetId());
                    }
                }
                sr.Close();
            }
            Finishit(file, infoList, moveAllFile, errorslist, latestdt, dev.Id);
        }