private static bool Estabilidad(VW_MOD_POZO mod_pozo, CONFIGURACION configuracion) { Console.WriteLine("Inicia Estabilidad: " + mod_pozo.POZO); bool Executed; try { ModeloProsper.Estabilidad ObjEstabilidad = new ModeloProsper.Estabilidad(configuracion); var deletes = db.RESULTADOS.Where(w => w.IDDATOSENTRADAEST == configuracion.IDDATOSENTRADAEST).ToList(); // Models.ResultadoModel ResultadoModel = new Models.ResultadoModel(); if (deletes.Count > 0) { Task.Run(() => { deletes.ForEach(e => db.RESULTADOS.Remove(e)); db.SaveChanges(); }); } if (Executed = ObjEstabilidad.Execute()) { var Resultados = ObjEstabilidad.Mapa; //Ejecucion de manera asyncrona y desplegado de errores independientes Task.Run(() => SaveEstabilidad(configuracion, Resultados)); } configuracion.QL = ObjEstabilidad.Ql; configuracion.ESTATUS = Executed?2:-1; configuracion.RECOMENDACIONES = ObjEstabilidad.Recomendacion; db.Entry(configuracion).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); WriteLineText("Termina Estabilidad: " + mod_pozo.POZO, "success"); return(true); } catch (Exception ex) { configuracion.ESTATUS = -1; configuracion.RECOMENDACIONES = ex.Message; db.Entry(configuracion).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); throw new Exception(ex.Message); } }
/// <summary> /// Ejecuta los procesos de la cola en modo remoto /// </summary> /// <param name="db">Instancia de la Base de Datos</param> /// <param name="mod_pozo">Modelo del Pozo</param> /// <param name="server">Interface del servidor</param> /// <param name="MError">Tipo de mensaje al desplegar los errores</param> /// <returns></returns> private static bool ExecRemote(Entities_ModeloCI db, VW_MOD_POZO mod_pozo, Interfaces.IModelos server, Modo MError) { try { bool result = false; switch (mod_pozo.FUNCION) { case 1: result = server.Sensibilidad_BN(mod_pozo.IDMODPOZO); break; case 2: result = server.Condicion(mod_pozo.IDMODPOZO, null); break; default: result = server.Execute(mod_pozo.IDMODPOZO, null); break; } if (MError == Modo.console) { WriteLineText(mod_pozo.POZO + ": Modelo ejecutado correctamente", "success"); } return(true); } catch (Exception ex) { WriteEventLogEntry(System.Diagnostics.EventLogEntryType.Error, 22, mod_pozo.POZO + ": " + ex.Message, MError); return(false); } }
private static bool Execute(VW_MOD_POZO mod_pozo) { bool response = false; ModeloProsper.Logger Logger = new ModeloProsper.Logger(mod_pozo.IDMODPOZO); ModeloProsper.Modelo modelo = new ModeloProsper.Modelo(mod_pozo.IDMODPOZO); var factory = new ChannelFactory <Interfaces.IModelo>(new BasicHttpBinding() { SendTimeout = TimeSpan.Parse("0:15:00") }, EndPointModelo); Interfaces.IModelo server = factory.CreateChannel(); WriteLineText("Inicia modelo: " + mod_pozo.POZO); Dictionary <int, int> CatSaps = db.CAT_SAP.ToDictionary(k => k.IDCATSAP, d => d.PROSPER.GetValueOrDefault()); try { Logger.SetEstatus(2); switch (mod_pozo.FUNCION) { case 1: response = modelo.Sensibilidad_BN(); var conds = db.PA_operacionPozosFecha(mod_pozo.IDPOZO).ToList(); PA_operacionPozosFecha_Result cond = conds[0]; var cabezera = db.CabeceraPozoGBN.Where(w => w.bajaLogica == null && w.idPozo == mod_pozo.IDPOZO).SingleOrDefault(); if (response && cabezera != null && cond.FEC_CONDICION == mod_pozo.FECHAMODELO) { var inyeccion = db.DatosInyeccion.Where(w => w.idCabeceraPozoGBN == cabezera.idCabeceraPozoGBN).ToList(); inyeccion.ForEach(e => db.DatosInyeccion.Remove(e)); db.SaveChanges(); var QGI = db.COMPORTAMIENTO_GAS.Where(w => w.IDMODPOZO == mod_pozo.IDMODPOZO).SingleOrDefault(); if (QGI != null) { var QGIDetalles = db.COMPORTAMIENTO_GAS_DETALLES.Where(w => w.IDCOMPORTAMIENTOGAS == QGI.IDCOMPORTAMIENTOGAS).OrderBy(o => o.XAUX).ToList(); if (QGIDetalles.Count > 0) { foreach (var dt in QGIDetalles) { db.DatosInyeccion.Add(new DatosInyeccion() { idCabeceraPozoGBN = cabezera.idCabeceraPozoGBN, qLiq = dt.YAUX.GetValueOrDefault(), qGasBN = dt.XAUX.GetValueOrDefault() }); //Multiplicacion x 1000 fue removida de xaux } db.SaveChanges(); } } cabezera.porc_agua = cond.gastoagua; cabezera.presionCabeza = cond.PRESION_TP.GetValueOrDefault(); cabezera.qGasBN = cond.VOLUMEN_BN.GetValueOrDefault(); cabezera.fecha = cond.FEC_CONDICION.GetValueOrDefault(); db.Entry(cabezera).State = EntityState.Modified; db.SaveChanges(); } break; case 2: response = modelo.Update(); break; default: //ModeloProsper.Modelo modelo = new ModeloProsper.Modelo(mod_pozo.IDMODPOZO); response = modelo.Create(); break; } if (response) { if (mod_pozo.ESTABILIDAD > 0) { var Configuracion = (from config in db.CONFIGURACION where config.IDMODPOZO == mod_pozo.IDMODPOZO && config.Fecha == (db.CONFIGURACION.Where(w => w.IDMODPOZO == mod_pozo.IDMODPOZO && config.ESTATUS == 1).Max(m => m.Fecha)) select config).SingleOrDefault(); //if (Configuracion != null) //{ // Estabilidad(mod_pozo, Configuracion); //} ModeloProsper.Estabilidad estabilidad = new Estabilidad(Configuracion); estabilidad.Execute(); estabilidad.Save(); } Logger.SetEstatus(3, "Ejecución correcta"); WriteLineText("Termina modelo: " + mod_pozo.POZO, "success"); } return(response); } catch (Exception ex) { Logger.SetLog(-1, ex.Message); if ((Logger.Intentos + 1) > Logger.Configuracion.MAXREINTENTOS) //revisar hay observaciones en este algoritmo { Logger.SetEstatus(-1); } else { modelo.Reset(mod_pozo.IDMODPOZO, 0); } WriteLineText(ex.Message, "danger"); return(false); } }
private static bool ExecLocal(Entities_ModeloCI db, VW_MOD_POZO mod_pozo, Modo MError) { bool response = false; ModeloProsper.Logger Logger = new ModeloProsper.Logger(mod_pozo.IDMODPOZO); ModeloProsper.Modelo modelo = new ModeloProsper.Modelo(mod_pozo.IDMODPOZO); try { Logger.SetEstatus(2); switch (mod_pozo.FUNCION) { case 1: response = modelo.Sensibilidad_BN(); var conds = db.PA_operacionPozosFecha(mod_pozo.IDPOZO).ToList(); PA_operacionPozosFecha_Result cond = conds[0]; var cabezera = db.CabeceraPozoGBN.Where(w => w.bajaLogica == null && w.idPozo == mod_pozo.IDPOZO).SingleOrDefault(); if (response && cabezera != null && cond.FEC_CONDICION == mod_pozo.FECHAMODELO) { var inyeccion = db.DatosInyeccion.Where(w => w.idCabeceraPozoGBN == cabezera.idCabeceraPozoGBN).ToList(); inyeccion.ForEach(e => db.DatosInyeccion.Remove(e)); db.SaveChanges(); var QGI = db.COMPORTAMIENTO_GAS.Where(w => w.IDMODPOZO == mod_pozo.IDMODPOZO).SingleOrDefault(); if (QGI != null) { var QGIDetalles = db.COMPORTAMIENTO_GAS_DETALLES.Where(w => w.IDCOMPORTAMIENTOGAS == QGI.IDCOMPORTAMIENTOGAS).OrderBy(o => o.XAUX).ToList(); if (QGIDetalles.Count > 0) { foreach (var dt in QGIDetalles) { db.DatosInyeccion.Add(new DatosInyeccion() { idCabeceraPozoGBN = cabezera.idCabeceraPozoGBN, qLiq = dt.YAUX.GetValueOrDefault(), qGasBN = dt.XAUX.GetValueOrDefault() }); //Multiplicacion x 1000 fue removida de xaux } db.SaveChanges(); } } cabezera.porc_agua = cond.gastoagua; cabezera.presionCabeza = cond.PRESION_TP.GetValueOrDefault(); cabezera.qGasBN = cond.VOLUMEN_BN.GetValueOrDefault(); cabezera.fecha = cond.FEC_CONDICION.GetValueOrDefault(); db.Entry(cabezera).State = EntityState.Modified; db.SaveChanges(); } break; case 2: response = modelo.Update(); break; default: response = modelo.Create(); break; } Logger.SetEstatus(3, "Ejecución correcta"); if (MError == Modo.console) { WriteLineText(mod_pozo.POZO + ": Modelo ejecutado correctamente", "success"); } return(response); } catch (Exception ex) { if (Logger.Configuracion.ESTATUS == 2) { Logger.SetEstatus(-1, ex.Message); } if ((Logger.Intentos + 1) < Logger.Configuracion.MAXREINTENTOS) { modelo.Reset(mod_pozo.IDMODPOZO, 0); } WriteEventLogEntry(System.Diagnostics.EventLogEntryType.Error, 21, mod_pozo.POZO + ": " + ex.Message, MError); return(false); } }