private void manageModeloFlujo(CentroCostos centroCostos, Empresa empresa, DateTime fechaactual) { StopWatch swGral = new StopWatch($"manageModeloFlujo cc={centroCostos.desc_id} emp={empresa.desc_id} fec={fechaactual}"); swGral.start(); int numInserts = 0; Int64 modeloId = centroCostos.modelo_negocio_flujo_id; Modelo_Negocio mn = new ModeloNegocioDataAccessLayer().GetModelo(modeloId.ToString()); if (!mn.activo) { return; } List <Rubros> rubrosDeModelo = GetRubrosFromModeloId(modeloId); Int64 numRegistrosExistentes = getNumMontosOfTipoCaptura(TipoCapturaFlujo); ConcurrentQueue <Rubros> rubrosSinMontos = new ConcurrentQueue <Rubros>(); ConcurrentDictionary <Int32, byte> aniosDefault = new ConcurrentDictionary <Int32, byte>(); Parallel.ForEach(rubrosDeModelo, (rubro) => { StopWatch sw = new StopWatch( $"consulta_flujo cc.id='{centroCostos.id}',empr.id='{centroCostos.empresa_id}',proy.id='{centroCostos.proyecto_id}',modelo.id='{centroCostos.modelo_negocio_flujo_id}',rubro.id='{rubro.id}'"); sw.start("getQuerySemanalSums"); GeneraQry qry = new GeneraQry("semanal", "itm::text", 2); String consulta = qry.getQuerySemanalSums(rubro, centroCostos, empresa, numRegistrosExistentes); logger.Debug( "consulta_flujo cc.id='{0}',empr.id='{1}',proy.id='{2}',modelo.id='{3}',rubro.id='{4}', ===>> '{5}'", centroCostos.id, centroCostos.empresa_id, centroCostos.proyecto_id, centroCostos.modelo_negocio_flujo_id, rubro.id, consulta); DataTable sumaMontos = new QueryExecuter().ExecuteQuery(consulta); sw.stop(); sw.start("BuildMontosFujo"); if (sumaMontos.Rows.Count > 0) { BuildMontosFujo(sumaMontos, centroCostos, modeloId, rubro.id, fechaactual, aniosDefault); } else { rubrosSinMontos.Enqueue(rubro); } sw.stop(); logger.Info(sw.prettyPrint()); }); foreach (var rubro in rubrosSinMontos) { foreach (var anio in aniosDefault.Keys) { MontosConsolidados montos = new MontosConsolidados(); montos.anio = anio; montos.activo = true; montos.fecha = fechaactual; montos.mes = fechaactual.Month; montos.centro_costo_id = centroCostos.id; montos.empresa_id = centroCostos.empresa_id; montos.modelo_negocio_id = modeloId; montos.proyecto_id = centroCostos.proyecto_id; montos.rubro_id = rubro.id; montos.tipo_captura_id = TipoCapturaFlujo; insertarMontos(montos); } } swGral.stop(); logger.Info(swGral.prettyPrint()); }
private void manageModeloContable(CentroCostos centroCostos, Empresa empresa, DateTime fechaactual) { StopWatch swGral = new StopWatch($"manageModeloContable cc={centroCostos.desc_id} emp={empresa.desc_id} fec={fechaactual}"); swGral.start(); int numInserts = 0; Int64 modeloId = centroCostos.modelo_negocio_id; Modelo_Negocio mn = new ModeloNegocioDataAccessLayer().GetModelo(modeloId.ToString()); if (!mn.activo) { return; } List <Rubros> rubrosDeModelo = GetRubrosFromModeloId(modeloId); Int64 numRegistrosExistentes = getNumMontosOfTipoCaptura(TipoCapturaContable); GeneraQry qry = new GeneraQry("balanza", "cuenta_unificada", 12); ConcurrentDictionary <Int32, byte> aniosDefecto = new ConcurrentDictionary <Int32, byte>(); ConcurrentQueue <Rubros> rubrosSinMontos = new ConcurrentQueue <Rubros>(); Parallel.ForEach(rubrosDeModelo, (rubro) => { StopWatch sw = new StopWatch( $"consulta_contables cc.id='{centroCostos.id}',empr.id='{centroCostos.empresa_id}',proy.id='{centroCostos.proyecto_id}',modelo.id='{centroCostos.modelo_negocio_flujo_id}',rubro.id='{rubro.id}'"); sw.start("getQuerySums"); String consulta = qry.getQuerySums(rubro, centroCostos, empresa, numRegistrosExistentes); logger.Debug( "consulta_contables cc.id='{0}',empr.id='{1}',proy.id='{2}',modelo.id='{3}',rubro.id='{4}', ===>> '{5}'", centroCostos.id, centroCostos.empresa_id, centroCostos.proyecto_id, centroCostos.modelo_negocio_id, rubro.id, consulta); DataTable sumaMontosDt = new QueryExecuter().ExecuteQuery(consulta); sw.stop(); sw.start("BuildMontosConsolContable"); if (sumaMontosDt.Rows.Count > 0) { foreach (DataRow rubroMontosRow in sumaMontosDt.Rows) { BuildMontosConsolContable(rubroMontosRow, centroCostos, modeloId, rubro.id, fechaactual); aniosDefecto.TryAdd(ToInt32(rubroMontosRow["year"]), 1); } } else { rubrosSinMontos.Enqueue(rubro); } sw.stop(); logger.Info(sw.prettyPrint()); }); foreach (var rubro in rubrosSinMontos) { foreach (var anio in aniosDefecto.Keys) { BuildMontosConsolContable(centroCostos, modeloId, rubro.id, fechaactual, anio); } } swGral.stop(); logger.Info(swGral.prettyPrint()); }