Example #1
0
        private static void HiloSecundario()
        {
            var            polizaPL  = new PolizaPL();
            PolizaAbstract polizaSAP = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaVenta);
            int            organizacionID;
            int            polizaID         = 0;
            int            tipoPolizaID     = 0;
            var            intentos         = new List <int>();
            var            archivosEnviados = new HashSet <string>();
            var            thread           = new Thread(delegate()
            {
                Queue <IList <PolizaInfo> > polizas = null;
                try
                {
                    polizas = polizaPL.ObtenerPolizasPendientes();
                }
                catch (Exception ex)
                {
                    logger.WriteEntry(
                        string.Format(
                            "ERROR AL QUERER RECUPERAR POLIZAS PENDIENTES {0}",
                            ex.StackTrace),
                        EventLogEntryType.Error);
                }
                if (polizas != null)
                {
                    while (polizas.Count > 0)
                    {
                        IList <PolizaInfo> poliza = polizas.Dequeue();
                        organizacionID            =
                            poliza.Select(org => org.OrganizacionID).FirstOrDefault();
                        try
                        {
                            lock (archivosEnviados)
                            {
                                polizaID     = poliza.Select(id => id.PolizaID).FirstOrDefault();
                                tipoPolizaID = poliza.Select(id => id.TipoPolizaID).FirstOrDefault();
                                switch ((TipoPoliza)tipoPolizaID)
                                {
                                case TipoPoliza.EntradaGanado:
                                case TipoPoliza.EntradaCompra:
                                case TipoPoliza.PolizaSacrificio:
                                    IList <string> referencia3 =
                                        poliza.Select(ref3 => ref3.Referencia3).Distinct().ToList();
                                    for (int indexRef3 = 0; indexRef3 < referencia3.Count; indexRef3++)
                                    {
                                        IList <PolizaInfo> polizasEntrada =
                                            poliza.Where(ref3 => ref3.Referencia3.Equals(referencia3[indexRef3])).
                                            ToList();
                                        if (polizasEntrada != null && polizasEntrada.Any())
                                        {
                                            if (!archivosEnviados.Contains(
                                                    polizasEntrada.Select(nombre => nombre.ArchivoFolio).First()))
                                            {
                                                polizaSAP.GuardarArchivoXML(polizasEntrada, organizacionID);
                                            }
                                            archivosEnviados.Add(
                                                polizasEntrada.Select(nombre => nombre.ArchivoFolio).First());
                                        }
                                    }
                                    break;

                                default:
                                    if (
                                        !archivosEnviados.Contains(
                                            poliza.Select(nombre => nombre.ArchivoFolio).First()))
                                    {
                                        polizaSAP.GuardarArchivoXML(poliza, organizacionID);
                                    }
                                    archivosEnviados.Add(
                                        poliza.Select(nombre => nombre.ArchivoFolio).First());
                                    break;
                                }
                                logger.WriteEntry(
                                    string.Format(
                                        "ESCRIBIO EL ARCHIVO PARA LA CLAVE DE POLIZA {0}",
                                        polizaID), EventLogEntryType.Information);
                                try
                                {
                                    polizaPL.ActualizaArchivoEnviadoSAP(polizaID);
                                }
                                catch (Exception)
                                {
                                    logger.WriteEntry(
                                        string.Format(
                                            "OCURRIO UN ERROR AL QUERER ACTUALIZAR BANDERA DE ENVIADO A SERVIDOR {0}",
                                            polizaID), EventLogEntryType.Error);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            lock (archivosEnviados)
                            {
                                if (!archivosEnviados.Contains(poliza.Select(nombre => nombre.ArchivoFolio).First()))
                                {
                                    lock (intentos)
                                    {
                                        if (intentos.Count(clave => clave == polizaID) < 3)
                                        {
                                            polizas.Enqueue(poliza);
                                            intentos.Add(polizaID);
                                        }
                                        else
                                        {
                                            intentos.RemoveAll(clave => clave == polizaID);
                                        }
                                    }
                                }
                                if (intentos.Count(clave => clave == polizaID) > 0)
                                {
                                    logger.WriteEntry(
                                        string.Format(
                                            "ERROR AL QUERER ESCRIBIR EL ARCHIVO PARA LA CLAVE DE POLIZA {0}, EN EL INTENTO {1}",
                                            polizaID, intentos.Count(clave => clave == polizaID)),
                                        EventLogEntryType.Error);
                                }
                            }
                        }
                    }
                }
            });

            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();
        }