public ActionResult <CatalogoQuery> ActualizarCatalogo(RequestBase <CatalogoCmd> request) { bool esError = true; ResponseBase <CatalogoQuery> response = new ResponseBase <CatalogoQuery>(); response.code = 500; try { response.data = _catalogosServiceCmd.ActualizarCatalogo(request.data); //response.data = getCatalogosEjemplo().FirstOrDefault(); if (response.data == null) { response.code = 202; response.message = "No se ha podido completar el proceso"; } else { response.code = 200; response.message = "Catálogo actualizado"; esError = false; } } catch (Exception e) { response.message = e.Message; } response.date = DateTime.Now; //Auditoria var jrq = JsonConvert.SerializeObject(request); var jrp = JsonConvert.SerializeObject(response); var host = ""; try { var remoteIpAddress = HttpContext.Connection.RemoteIpAddress.ToString(); host = Dns.GetHostEntry(remoteIpAddress).HostName; } catch (Exception e) { } _AuditoriaInventarios log = new _AuditoriaInventarios("AcualizarCatalogo", (response.data != null)?response.data.CodigoCatalogo:"", esError, request.usuario, MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "Host: " + host, ""); _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log); // return(StatusCode(response.code, response)); }
public void ProcesarEstadoProducto(EventBase <EstadoProductoCmd> EventoEstado) { bool EsError = true; var jrq = JsonConvert.SerializeObject(EventoEstado); var jrp = ""; if (!(_ufwLog.Repository <_AuditoriaInventarios>().Contains(new LogInventarioSpecification(EventoEstado.Data.SKU, jrq)))) { try { Producto producto = _ufwProductos.Repository <Producto>().Find(new ProductoSKUSpecification(EventoEstado.Data.SKU)).FirstOrDefault(); if ((producto != null)) { producto.Estado = EventoEstado.Data.Estado; producto.EnAlmacen = EventoEstado.Data.EnAlmacen; producto.NivelInventario = EventoEstado.Data.NivelInventario; //Persistencia _ufwProductos.Repository <Producto>().ReplaceOne(producto); EsError = false; jrp = JsonConvert.SerializeObject(producto); } else { throw new Exception("No se ha encontrado el producto"); } } catch (Exception e) { jrp = JsonConvert.SerializeObject(e); } //Auditoría _AuditoriaInventarios log = new _AuditoriaInventarios("EstadoActualizado", EventoEstado.Data.SKU, EsError, EventoEstado.Usuario, MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "", "SKU: " + EventoEstado.Data.SKU + " NivelInventario: " + EventoEstado.Data.NivelInventario.ToString() + ""); _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log); } else { //Ya fue ejecutada } }
public ActionResult <string> ProbarKafka(EventBase <List <VentaCmd> > evento) { bool esError = true; string response = "Descripción del evento enviado por el servicio Kafka/test/venta"; try { evento.Evento = "VentaProductos"; evento.Fecha = DateTime.Now; evento.Origen = "api-inventarios"; evento.Topico = "TP_Venta"; var json = JsonConvert.SerializeObject(evento); this._producer.Produce("TP_Venta", new Message <string, string> { Key = "VentaProductos", Value = json }); esError = false; } catch (Exception e) { Console.WriteLine($"MENSAJE: '{e.Message}' STACKTRACE: '{e.StackTrace}' \n\n"); _logger.LogError($"MENSAJE: '{e.Message}' STACKTRACE: '{e.StackTrace}' \n\n\n"); response = e.Message; } //response.date = DateTime.Now; //Auditoría var jrq = JsonConvert.SerializeObject(evento); var jrp = JsonConvert.SerializeObject(response); var host = ""; try { var remoteIpAddress = HttpContext.Connection.RemoteIpAddress.ToString(); host = Dns.GetHostEntry(remoteIpAddress).HostName; } catch (Exception e) { } _AuditoriaInventarios log = new _AuditoriaInventarios("ProbarVenta", "", esError, "", MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "Host: " + host, ""); _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log); // return(StatusCode(200, response)); }
public void ProcesarVenta(EventBase <List <VentaCmd> > eventoVenta) { try { string[] skus = eventoVenta.Data.ConvertAll <string>(u => u.SKU).ToArray(); IEnumerable <ExistenciaProducto> existencias = this._inventariosServiceQ.ConsultarDisponibilidad(skus); Dictionary <VentaCmd, Producto> productos = new Dictionary <VentaCmd, Producto>(); if (existencias.Any(e => (!e.Disponible))) { throw new Exception("Hay productos no disponibles"); } foreach (VentaCmd v in eventoVenta.Data) { ExistenciaProducto e = existencias.Where(e => e.sku == v.SKU).FirstOrDefault(); if ((e != null)) { if ((e.Disponible) && (e.CantidadDisponibles >= v.Unidades)) { Producto p = this._ufwProductos.Repository <Producto>().Find(new ProductoSKUSpecification(e.sku)).FirstOrDefault(); p.NivelInventario = p.NivelInventario - v.Unidades; p.EnAlmacen = (p.NivelInventario > 0) ? true : false; productos.Add(v, p); } else { throw new Exception("No hay unidades disponibles del producto SKU: " + v.SKU); } } else { throw new Exception("Error en la consulta de disponibilidad"); } } foreach (KeyValuePair <VentaCmd, Producto> pair in productos) { //Seguimiento Producto p = this.HacerSeguimiento(pair.Value); //Auditoría var jrq = JsonConvert.SerializeObject(eventoVenta); var jrp = JsonConvert.SerializeObject(p); _AuditoriaInventarios log = new _AuditoriaInventarios("Venta", pair.Key.Referencia, false, eventoVenta.Usuario, MethodInfo.GetCurrentMethod().Name, this.ToString(), jrq, jrp, "", "Referencia: " + pair.Key.Referencia + " SKU: " + pair.Key.SKU + " Unidades: " + pair.Key.Unidades + ""); //Persistencia _ufwProductos.Repository <Producto>().ReplaceOne(p); _ufwLog.Repository <_AuditoriaInventarios>().InsertOne(log); } } catch (Exception e) { throw e; } }
private void Start(CancellationToken stoppingToken) { try { CancellationTokenSource cts = new CancellationTokenSource(); Console.CancelKeyPress += (_, e) => { e.Cancel = true; cts.Cancel(); }; using (var c = new ConsumerBuilder <string, string>(this._consumerConfig).Build()) { c.Subscribe(new List <string>() { "TP_Venta", "TP_Inventario" }); while (!stoppingToken.IsCancellationRequested) { _AuditoriaInventarios log = null; using (var scope = this._serviceProvider.CreateScope()) { _inventariosServiceCmd = (IInventariosServiceCmd)scope.ServiceProvider.GetRequiredService(typeof(IInventariosServiceCmd)); _log = (IUnitOfWork <_AuditoriaInventarios>)scope.ServiceProvider.GetRequiredService(typeof(IUnitOfWork <_AuditoriaInventarios>)); try { var cr = c.Consume(cts.Token); _logger.LogInformation($"\n\n"); _logger.LogInformation($"--------------------------------------------------{DateTime.Now}\n"); _logger.LogInformation($"TOPIC: '{cr.Topic}' EVENTO: '{cr.Key}' MENSAJE CONSUMIDO: '{cr.Value}' \n"); //log = new _AuditoriaInventarios("TOPIC", "", false, "", "sad", this.ToString(), $"TOPIC: '{cr.Topic}' EVENTO: '{cr.Key}' MENSAJE CONSUMIDO: '{cr.Value}' ", "", "", ""); //_log.Repository<_AuditoriaInventarios>().InsertOne(log); switch (cr.Topic) { case "TP_Venta": switch (cr.Key) { case "er la integración con": EventBase <List <VentaCmd> > eventoVenta = JsonConvert.DeserializeObject <EventBase <List <VentaCmd> > >(cr.Value); this._inventariosServiceCmd.ProcesarVenta(eventoVenta); break; default: throw new Exception("Evento no identificado"); } break; case "TP_Inventario": switch (cr.Key) { case "EstadoActualizado": EventBase <EstadoProductoCmd> eventoEstado = JsonConvert.DeserializeObject <EventBase <EstadoProductoCmd> >(cr.Value); this._inventariosServiceCmd.ProcesarEstadoProducto(eventoEstado); break; default: throw new Exception("Evento no identificado"); } break; } } catch (Exception e) { log = new _AuditoriaInventarios("TOPIC PROCESO EXCEPTION", "", true, "", "", this.ToString(), e.Message, e.StackTrace, "", ""); _log.Repository <_AuditoriaInventarios>().InsertOne(log); } } } } } catch (Exception e) { _logger.LogError($"MENSAJE: '{e.Message}' STACKTRACE: '{e.StackTrace}' \n\n\n"); } }