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 }); }
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 }; }
//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 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 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); }