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