public void custom_algorithm(Personalizacion personalizacion, List <Producto> products, Usuario user, string tiendaID) { Assembly ddl = Assembly.Load(personalizacion.algoritmo); var t = ddl.GetType("Chebay.AlgorithmDLL.ChebayAlgorithm"); dynamic c = Activator.CreateInstance(t); DataRecomendacion dr = new DataRecomendacion { UsuarioID = user.UsuarioID }; Thread timeThread = new Thread(() => { try { dr.productos = (List <DataProducto>)c.getProducts(products, user); IDALUsuario udal = new DALUsuarioEF(); udal.AgregarRecomendacionesUsuario(tiendaID, dr); } catch (Exception e) { //si falla entonces default default_recomendation_algorithm(products, user, tiendaID); } }); timeThread.Start(); bool finished = timeThread.Join(5000); if (!finished) { Debug.WriteLine("ALGORITMO PERSONALIZADO SUSPENDIDO... EXCESO TIEMPO"); timeThread.Abort(); default_recomendation_algorithm(products, user, tiendaID); } }
public async Task InsertProducts(string TiendaID, DataRecomendacion dataRecomendacion) { var db = _client.GetDatabase(_database); var collection = db.GetCollection <DataRecomendacion>(TiendaID); var docs = collection.Find(new BsonDocument()).FirstOrDefaultAsync(); await collection.ReplaceOneAsync(d => d.UsuarioID == dataRecomendacion.UsuarioID, dataRecomendacion, new UpdateOptions { IsUpsert = true }); }
//default algorithm return the mosts visited product public void default_recomendation_algorithm(List <Producto> products, Usuario user, String tiendaID) { IDALUsuario udal = new DALUsuarioEF(); var query = from p in products orderby(p.visitas.Count) descending select p; DataRecomendacion dr = new DataRecomendacion { UsuarioID = user.UsuarioID, productos = new List <DataProducto>() }; foreach (var p in query.ToList()) { dr.productos.Add(new DataProducto(p)); } udal.AgregarRecomendacionesUsuario(tiendaID, dr); }
public async Task AgregarRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion) { MongoDB db = new MongoDB(); await db.InsertProducts(TiendaID, dataRecomendacion); }
public DataRecomendacion ObtenerRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion) { MongoDB db = new MongoDB(); return(db.GetRecomendacionesUsuario(TiendaID, dataRecomendacion)); }
public ActionResult Index(string urlTienda) { try { Tienda t = cT.ObtenerTienda(urlTienda); //Si cambio de tienda destruimos la sesion if (Session["Tienda_Nombre"] != null && Session["Tienda_Anterior"] != null && Session["Tienda_Nombre"].ToString() != Session["Tienda_Anterior"].ToString()) { FormsAuthentication.SignOut(); Session.Abandon(); //Destruye todos los objetos de la sesion //Eliminar cookies (relacionados con la tienda anterior) int cookieCount = Request.Cookies.Count; for (var i = 0; i < cookieCount; i++) { var cookie = Request.Cookies[i]; if (cookie != null) { var cookieName = cookie.Name; var expiredCookie = new HttpCookie(cookieName) { Expires = DateTime.Now.AddDays(-1) }; Response.Cookies.Add(expiredCookie); // overwrite it } } // eliminar cookies server side Request.Cookies.Clear(); Response.Redirect(Request.Url.ToString(), true); } ViewBag.Message = urlTienda; Session["Tienda_Nombre"] = urlTienda; List <DataProducto> prodsRec = new List <DataProducto>(); List <DataProducto> prodsFav = new List <DataProducto>(); bool hayFav = false; bool hayRec = false; int counter = 0; if (User.Identity.IsAuthenticated) { String user = User.Identity.Name; DataRecomendacion dr = new DataRecomendacion { UsuarioID = user, productos = prodsRec }; try { //Recomendados para el usuario DataRecomendacion drRes = cU.ObtenerRecomendacionesUsuario(urlTienda, dr); if (drRes != null) { foreach (DataProducto dp in drRes.productos) { if (dp.fecha_cierre >= DateTime.UtcNow && counter < 3) { prodsRec.Add(dp); counter++; hayRec = true; } } } ViewBag.productosRec = prodsRec; ViewBag.hayRecomendados = hayRec; //Favoritos del usuario List <DataProducto> dpFav = controladorSubasta.ObtenerProductosFavoritos(user, urlTienda); if (dpFav.Count > 0) { if (dpFav.Count > 2) { prodsFav = dpFav.GetRange(0, 2); } else { prodsFav = dpFav; } hayFav = true; } ViewBag.hayFavoritos = hayFav; ViewBag.productosFav = prodsFav; } catch (Exception eRec) { prodsRec = controladorSubasta.ObtenerProductosPorTerminar(3, urlTienda); ViewBag.productosRec = prodsRec; if (prodsRec.Count > 0) { hayRec = true; } ViewBag.hayRecomendados = hayRec; ViewBag.hayFavoritos = hayFav; return(View()); } } else { ViewBag.hayRecomendados = false; ViewBag.hayFavoritos = false; } } catch (Exception e) { ViewBag.ErrorMessage = e.Message; return(View("Error")); } return(View()); }
public DataRecomendacion GetRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion) { var db = _client.GetDatabase(_database); var collection = db.GetCollection <BsonDocument>(TiendaID); var query = collection.Find(new BsonDocument("UsuarioID", dataRecomendacion.UsuarioID)); var count = query.CountAsync(); count.Wait(); if (count.Result == 0) { return(null); } var prod = query.FirstAsync(); List <DataProducto> listDP = new List <DataProducto>(); string UsuarioID = prod.Result["UsuarioID"].AsString; BsonArray ar = prod.Result["productos"].AsBsonArray; string nombre = ""; long productoid = 0; string descripcion = ""; int precio_base_subasta = 0; int precio_compra = 0; DateTime fecha_cierre = DateTime.UtcNow; string idOfertante = ""; foreach (var a in ar) { if (!a["nombre"].IsBsonNull) { nombre = a["nombre"].AsString; } if (!a["ProductoID"].IsBsonNull) { productoid = a["ProductoID"].AsInt64; } if (!a["descripcion"].IsBsonNull) { descripcion = a["descripcion"].AsString; } if (!a["precio_base_subasta"].IsBsonNull) { precio_base_subasta = a["precio_base_subasta"].AsInt32; } if (!a["precio_compra"].IsBsonNull) { precio_compra = a["precio_compra"].AsInt32; } if (!a["fecha_cierre"].IsBsonNull) { fecha_cierre = a["fecha_cierre"].ToUniversalTime(); } if (!a["idOfertante"].IsBsonNull) { idOfertante = a["idOfertante"].AsString; } DataProducto dp = new DataProducto { descripcion = descripcion, fecha_cierre = fecha_cierre, idOfertante = idOfertante, nombre = nombre, precio_compra = precio_compra, precio_base_subasta = precio_base_subasta, ProductoID = productoid }; listDP.Add(dp); } return(new DataRecomendacion { UsuarioID = UsuarioID, productos = listDP }); }