示例#1
0
        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);
            }
        }
示例#2
0
        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 });
        }
示例#3
0
        //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);
        }
示例#4
0
 public async Task AgregarRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion)
 {
     MongoDB db = new MongoDB();
     await db.InsertProducts(TiendaID, dataRecomendacion);
 }
示例#5
0
        public DataRecomendacion ObtenerRecomendacionesUsuario(string TiendaID, DataRecomendacion dataRecomendacion)
        {
            MongoDB db = new MongoDB();

            return(db.GetRecomendacionesUsuario(TiendaID, dataRecomendacion));
        }
示例#6
0
        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());
        }
示例#7
0
        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
            });
        }