Exemplo n.º 1
0
        public DishesModel GetDishByUser(string openId)
        {
            List <DishScore> score = QueryScoreByUser(openId);

            if (score.Count == 0)
            {
                GetFactorScore(openId);
                score = QueryScoreByUser(openId);
            }
            DishScore   dishscore = score.OrderByDescending(r => r.Score).ThenBy(r => r.DishesId).First();
            Dishes      dish      = QueryDishesById(dishscore.DishesId);
            DishesModel model     = new DishesModel()
            {
                Id              = dishscore.DishesId,
                SecondTaste     = dish.SecondTaste,
                Status          = dish.Status,
                Accessory       = dish.Accessory,
                CreateTime      = dish.CreateTime,
                DishName        = dish.DishName,
                Explain         = dish.Explain,
                FirstTaste      = dish.FirstTaste,
                MainIngredients = dish.MainIngredients,
                PracticeUrl     = dish.PracticeUrl,
                Score           = dishscore.Score
            };

            return(model);
        }
Exemplo n.º 2
0
        public bool UpdateScore(string openId, string disedId)
        {
            DishScore     dish   = QuerySingleScoreByUser(openId, disedId);
            SQLiteHelper  sh     = new SQLiteHelper();
            StringBuilder strSql = new StringBuilder();

            strSql.Append("update DishScore set ");
            strSql.Append("Score=@Score,");
            strSql.Append("Time=@Time");
            strSql.Append(" where OpenId=@OpenId and DishesId=@DishesId");
            SQLiteParameter[] parameters =
            {
                sh.MakeSQLiteParameter("@Score",    DbType.Double, dish.FactorScore * Math.Log10(dish.Time == 1?10:dish.Time - 1)),
                sh.MakeSQLiteParameter("@Time",     DbType.Int32,  dish.Time == 1?10:dish.Time - 1),
                sh.MakeSQLiteParameter("@OpenId",   DbType.String, openId),
                sh.MakeSQLiteParameter("@DishesId", DbType.String, disedId)
            };

            if (sh.ExecuteSql(strSql.ToString(), parameters) >= 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 3
0
        public DishScore QuerySingleScoreByUser(string openId, string disedId)
        {
            SQLiteHelper  sh     = new SQLiteHelper();
            StringBuilder strSql = new StringBuilder();

            strSql.Append("select * FROM DishScore");
            strSql.Append(" where OpenId=@OpenId and DishesId=@DishesId ");
            SQLiteParameter[] parameters =
            {
                sh.MakeSQLiteParameter("@OpenId",   DbType.String, openId),
                sh.MakeSQLiteParameter("@DishesId", DbType.String, disedId.ToString())
            };
            DishScore DishScore = sh.Query(strSql.ToString(), parameters).Tables[0].AsEnumerable().Select(r => new DishScore
            {
                Id          = r[0].ToString(),
                OpenId      = r[1].ToString(),
                DishesId    = r[2].ToString(),
                DishName    = r[3].ToString(),
                Score       = double.Parse(r[4].ToString()),
                FactorScore = double.Parse(r[5].ToString()),
                Time        = Int32.Parse(r[6].ToString()),
                CreateTime  = DateTime.Parse(r[7].ToString()),
                UpdateTime  = DateTime.Parse(r[8].ToString())
            }).ToList <DishScore>()[0];

            return(DishScore);
        }
Exemplo n.º 4
0
        public bool GetFactorScore(string openId)
        {
            List <DishScore> scorelist = QueryScoreByUser(openId);

            if (scorelist.Count != 0)
            {
                DeleteScore(openId);
            }
            TasteHistory     taste     = QueryTasteHistoryByUser(openId);
            List <Dishes>    dishes    = QueryDishes();
            List <DishScore> scoreList = new List <DishScore>();

            foreach (var item in dishes)
            {
                double x = 0;
                double y = 0;
                double z = 0;
                if (taste.LikeFlavor.Contains(item.FirstTaste) || taste.LikeFlavor.Contains(item.SecondTaste))
                {
                    x = 0.5F;
                }
                if (taste.DisLikeFlavor.Contains(item.FirstTaste) || taste.DisLikeFlavor.Contains(item.SecondTaste))
                {
                    x = -0.5F;
                }
                if (taste.Dieteticrestraint.Split(',').Where(r => item.MainIngredients.Contains(r)).Count() > 0)
                {
                    y = -1F;
                }
                if (taste.Dieteticrestraint.Split(',').Where(r => item.Accessory.Contains(r)).Count() > 0)
                {
                    z = -0.25F;
                }
                DishScore score = new DishScore()
                {
                    Id          = Guid.NewGuid().ToString(),
                    DishesId    = item.Id,
                    OpenId      = taste.OpenId,
                    DishName    = item.DishName,
                    FactorScore = x + y + z,
                    Time        = 10,
                    Score       = (x + y + z) * Math.Log10(10),
                    CreateTime  = DateTime.UtcNow.AddHours(8),
                    UpdateTime  = DateTime.UtcNow.AddHours(8)
                };
                scoreList.Add(score);
            }
            InsertScore(scoreList);
            return(true);
        }