using Newtonsoft.Json; using SvetoforVKBot.Models.Updates; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.SqlClient; using System.Linq; using System.Security.Cryptography; using System.Text.RegularExpressions; using VkNet; using VkNet.Enums.SafetyEnums; using VkNet.Model.Attachments; using VkNet.Model.Keyboard; using VkNet.Model.RequestParams; namespace SvetoforVKBot.Models.Commands.Admin { public class SelectTestNotifyCommand : Command { public override string Name => "/test"; public override void Execute(RootObject update, VkApi client, SvetoforVKBot.Data.SvetoforVKBotEntities db) { var chatId = update.@object.message.from_id; MessagesSendParams @params = new MessagesSendParams(); var keyboardBuilder = new KeyboardBuilder().Clear(); List users = new List(); List chatIds = new List(); string name = ""; int age = 0; int genderCoef = 0; double kkalResult = 0; double colorPercent = 0; double dayCoef = 0; double curDayKkal = 0; double kkalResultLow = 0; double kkalResultHigh = 0; try { Dictionary tracks = new Dictionary(7); tracks.Add(1, "Оптимизация питания"); tracks.Add(2, "Снижение жировой массы"); tracks.Add(3, "Увеличение мышечной массы"); tracks.Add(4, "Персональный режим"); //-- Вот этот запрос лучше сработает на стороне db.Database.ExecuteSqlCommand("UPDATE Users SET choosenProducts = @choosenProducts, cart = @cart;", new object[] { new SqlParameter("@choosenProducts", "[]"), new SqlParameter("@cart", "{\"orders\":[]}") }); //-- var user = db.Users.Single(usr => usr.chatId == 59111081); int id = user.id; string fio = user.fio; var birthday = user.birthday; var jsPhones = JsonConvert.DeserializeObject>(user.phone); int choosenTrack = user.track; int height = user.height; int weight = user.weight; int gender = user.gender; // 1 - М / 2 - Ж var activityCoef = user.activityCoef; //-- if ((DateTime.Now.Month >= birthday.Month) && (DateTime.Now.Day >= birthday.Day)) age = DateTime.Now.Year - birthday.Year; else age = DateTime.Now.Year - birthday.Year - 1; #region ccalCalculator Dictionary days = new Dictionary(7); days.Add(1, "Понедельник"); days.Add(2, "Вторник"); days.Add(3, "Среда"); days.Add(4, "Четверг"); days.Add(5, "Пятница"); days.Add(6, "Суббота"); days.Add(7, "Воскресенье"); Dictionary gend = new Dictionary(3); gend.Add(0, "Мужской"); gend.Add(1, "Мужской"); gend.Add(2, "Женский"); int curDay = (int)DateTime.Now.DayOfWeek; if (curDay == 0) curDay = 7; int nextDay = curDay + 1; if (nextDay == 8) nextDay = 1; //if (weight == 0 || height == 0) //{ // keyboardBuilder // .AddButton("📝Редактировать данные", "selectEditData-0", KeyboardButtonColor.Primary) // .AddLine() // .AddButton("Назад", "startPL", KeyboardButtonColor.Default); // @params.Message = "Не хватает данных о росте/весе.\n" + // "Нажмите \"📝Редактировать данные\" и заполните показатели."; // @params.Keyboard = keyboardBuilder.Build(); // @params.UserId = chatId; // @params.RandomId = GetRandomId(); // client.Messages.SendAsync(@params); // return; //} if (gender == 1) { genderCoef = 5; } else { genderCoef = -161; } switch (choosenTrack) { case 1: //не изменяя веса colorPercent = 1; break; case 2: colorPercent = 0.75; //1 - 15% break; case 3: colorPercent = 1.2; //1 - 15% break; default: colorPercent = 1; break; } for (int i = 1; i <= 7; i++) { switch (i) { case 2: dayCoef = 0.8; break; case 3: dayCoef = 1.2; break; case 5: dayCoef = 0.9; break; case 6: dayCoef = 1.1; break; default: dayCoef = 1; break; } kkalResult = Math.Round((((10 * weight) + (6.25 * height) - (5 * age) + genderCoef) * activityCoef) * colorPercent * dayCoef); kkalResultHigh = Math.Round(kkalResult * 1.2); kkalResultLow = Math.Round(kkalResult * 0.9); //if (i == nextDay) if (i == curDay) { curDayKkal = kkalResult; } } #endregion ccalCalculator //-- неожиданно пришлось преобразовывать типы данных к инту от double) var curChatIdUser = db.Users.Single(usr => usr.chatId == chatId); curChatIdUser.kkal = Convert.ToInt32(curDayKkal); db.SaveChanges(); //@params.Message = "🌙Добрый вечер!\n" + // $"Ваша норма калорий на завтра: {Math.Round(curDayKkal * 0.9)} - {Math.Round(curDayKkal * 1.2)}\n" + // "Мы подготовили для Вас блюда👇🏻"; @params.Message = "☀Доброе утро!\n" + $"Ваша норма калорий на сегодня: {Math.Round(curDayKkal * 0.9)} - {Math.Round(curDayKkal * 1.2)}\n" + "Мы подготовили для Вас блюда👇🏻\n\n" + "Меню также доступно в Личном кабинете в разделе \"Дневной рацион\""; keyboardBuilder .AddButton($"Завтрак (до {Math.Round(curDayKkal * 1.2 * 0.3)} ккал)", "selectPersonalMenu-1-" + Math.Round(curDayKkal), KeyboardButtonColor.Primary) .AddLine() .AddButton($"Обед (до {Math.Round(curDayKkal * 1.2 * 0.4)} ккал)", "selectPersonalMenu-2-" + Math.Round(curDayKkal), KeyboardButtonColor.Primary) .AddLine() .AddButton($"Перекус (до {Math.Round(curDayKkal * 1.2 * 0.1)} ккал)", "selectPersonalMenu-3-" + Math.Round(curDayKkal), KeyboardButtonColor.Primary) .AddLine() .AddButton($"Ужин (до {Math.Round(curDayKkal * 1.2 * 0.3)} ккал)", "selectPersonalMenu-4-" + Math.Round(curDayKkal), KeyboardButtonColor.Primary) .AddLine() .AddButton("Личный кабинет", "startPL", KeyboardButtonColor.Default) .SetInline(); @params.Keyboard = keyboardBuilder.Build(); @params.UserId = 59111081; //10160301; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } catch (Exception ee) { @params.Message = "Ошибка в SelectTestNotifyCommand: " + ee.Message; @params.Attachments = null; @params.Keyboard = null; @params.UserId = 59111081; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } } public override void ExecutePL(RootObject update, VkApi client, SvetoforVKBot.Data.SvetoforVKBotEntities db) { } } }