private async Task SendNotifications() { using (SqlConnection conn = this._sqlServer.GetConnection()) { await conn.OpenAsync(); List <Message> messages = new List <Message>(); using (SqlCommand cmd = this._sqlServer.GetSpCommand("telegram.GetUsersToNotify", conn)) { using (SqlDataReader dr = await cmd.ExecuteReaderAsync()) { while (dr.Read()) { Message m = new Message(dr); messages.Add(m); } } } foreach (Message m in messages) { string text = m.ToString(); using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.UpdateLastBalanceLogId", conn)) { cmd.AddBigIntParam("@UserId", m.TelegramId); cmd.AddBigIntParam("@LastBalanceLogId", m.EmployeeBalanceLogId); cmd.AddNVarCharParam("@Message", 200, text); await cmd.ExecuteNonQueryAsync(); } } } }
private async Task TurnExit(Update update, Employee employee) { TurnSessionData session = (TurnSessionData)employee.DialogSession; if (employee.Turn != null) { using (SqlConnection conn = _sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.DialogSession_Turn_Exit", conn)) { cmd.AddBigIntParam("@TelegramId", employee.TelegramUserId); cmd.AddIntParam("@EmployeeId", employee.Id); cmd.AddIntParam("@PlaceId", employee.Place.Id); cmd.AddNVarCharParam("@Message", 200, employee.GetTurnExitMessage()); await cmd.ExecuteNonQueryAsync(); } } } string text = "Вы вышли из смены"; ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee); await _telegramClient.SendTextMessageAsync(update.Message.From.Id, text, ParseMode.Default, false, false, 0, keyboard, _cts.Token); await this.WriteMessageLog(new MessageLog(text, employee, keyboard)); }
private async Task WriteMessageLog(MessageLog log) { try { using (SqlConnection conn = this._sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = this._sqlServer.GetSpCommand("telegram.WriteMessageLog", conn)) { cmd.AddBitParam("@InputMessage", log.InputMessage); cmd.AddBigIntParam("@TelegramId", log.TelegramId); cmd.AddCharParam("@Phone", 10, log.Phone); cmd.AddIntParam("@EmployeeId", log.EmployeeId); cmd.AddNVarCharMaxParam("@MessageData", log.GetJson()); await cmd.ExecuteNonQueryAsync(); } } } catch (Exception ex) { string exStr = ex.ToString(); _logger.LogError(exStr, "Ошибка при сохранениии записи в журнале сообщений"); Helper.SaveDiagMessage(_sqlServer, DiagOptions.Tech, "TelegramHostedService.WriteMessageLog, Ошибка при сохранениии записи в журнале сообщений: " + exStr, _logger); } }
private async Task CompleteRequest(PaymentRequest request, CheckPaymentRequestData data, SqlConnection conn, SqlTransaction tx) { using (SqlCommand cmd = _sqlServer.GetSpCommand("payment.CompleteYandexKassaRequest", conn, tx)) { cmd.AddIntParam("@RequestId", request.Id); cmd.AddVarCharParam("@KassaPaymentId", 50, data.ResponseData.Response.Id); cmd.AddBigIntParam("@PaymentId", request.PaymentId); await cmd.ExecuteNonQueryAsync(); } }
private async Task SavePayment(Payment payment, SqlConnection conn, SqlTransaction tx) { DataAccess.StructuredParamValue amounts = null; if (payment.PersonalAmounts.Count > 0) { amounts = new DataAccess.StructuredParamValue(_amountsMetadata, payment.PersonalAmounts.Count); foreach (PersonalAmount pa in payment.PersonalAmounts) { amounts.NewRecord(); amounts.AddInt32(pa.EmployeeId); amounts.AddDecimal(pa.Amount); } } using (SqlCommand cmd = _sqlServer.GetSpCommand("payment.SavePayment", conn, tx)) { cmd.AddIntParam("@PlaceId", payment.PlaceId); cmd.AddIntParam("@EmployeeId", payment.EmployeeId); cmd.AddIntParam("@ShareSchemeHistoryId", payment.ShareSchemeHistoryId); cmd.AddTinyIntParam("@Status", (byte)payment.Status); cmd.AddTinyIntParam("@ReasonToReturn", (byte?)payment.ReasonToReturn); cmd.AddCharParam("@DataSource", 6, payment.DataSource); cmd.AddCharParam("@Provider", 6, payment.Provider); cmd.AddDecimalParam("@OriginalAmount", 18, 2, payment.OriginalAmount); cmd.AddDecimalParam("@ReceivedAmount", 18, 2, payment.ReceivedAmount); cmd.AddDecimalParam("@BankCommissionAmount", 18, 2, payment.BankCommissionAmount); cmd.AddDecimalParam("@AgentCommissionAmount", 18, 2, payment.AgentCommissionAmount); cmd.AddDecimalParam("@IncomeAmount", 18, 2, payment.IncomeAmount); cmd.AddDecimalParam("@PayoutAmount", 18, 2, payment.PayoutAmount); cmd.AddDateTime2Param("@PaymentDateTime", payment.PaymentDateTime); cmd.AddBitParam("@IsTimeSpecified", payment.IsTimeSpecified); cmd.AddDateTime2Param("@ArrivalDateTime", payment.ArrivalDateTime); cmd.AddVarCharParam("@DocumentName", 100, (payment.DocumentId.HasValue ? null : payment.DocumentName)); SqlParameter documentIdParam = cmd.AddIntParam("@DocumentId", payment.DocumentId).InputOutput(); cmd.AddVarCharParam("@DocumentNumber", 40, (payment.DocumentId.HasValue ? null : payment.DocumentNumber)); cmd.AddDateParam("@DocumentDate", (payment.DocumentId.HasValue ? null : payment.DocumentDate)); cmd.AddVarCharParam("@ExternalId", 50, payment.ExternalId); cmd.AddNVarCharParam("@Fio", 100, payment.Fio); cmd.AddNVarCharParam("@Address", 150, payment.Address); cmd.AddNVarCharParam("@Purpose", 150, payment.Purpose); cmd.AddNVarCharMaxParam("@RawData", payment.RawData); cmd.AddStructuredParam("@Amounts", "payment.PaymentShare", amounts); SqlParameter PaymentIdParam = cmd.AddBigIntParam("@PaymentId").Output(); SqlParameter StatusParam = cmd.AddTinyIntParam("@FinalStatus").Output(); await cmd.ExecuteNonQueryAsync(); payment.Id = PaymentIdParam.GetInt64(); payment.Status = (PaymentStatus)StatusParam.GetByte(); if (!payment.DocumentId.HasValue) { payment.DocumentId = documentIdParam.GetInt32OrNull(); } } }
public async Task CancelSession(SqlServer sqlServer, Employee employee) { using (SqlConnection conn = sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = sqlServer.GetSpCommand("telegram.DialogSession_Cancel", conn)) { cmd.AddBigIntParam("@TelegramId", employee.TelegramUserId); await cmd.ExecuteNonQueryAsync(); } } }
public async Task UpdateSession(SqlServer sqlServer, Employee employee) { using (SqlConnection conn = sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = sqlServer.GetSpCommand("telegram.DialogSession_Update", conn)) { cmd.AddBigIntParam("@TelegramId", employee.TelegramUserId); cmd.AddTinyIntParam("@Step", this.StepByte); cmd.AddNVarCharParam("@Data", 200, this.SerializeToJson()); await cmd.ExecuteNonQueryAsync(); } } }
private async Task CompleteRequest(PaymentRequest request, SqlConnection conn, SqlTransaction tx) { try { using (SqlCommand cmd = _sqlServer.GetSpCommand("payment.SbAcquiring_CompleteRequest", conn, tx)) { cmd.AddIntParam("@RequestId", request.RequestId); cmd.AddVarCharParam("@OrderId", 50, request.OrderId); cmd.AddBigIntParam("@PaymentId", request.PaymentId); await cmd.ExecuteNonQueryAsync(); } } catch (Exception ex) { string exStr = ex.ToString(); _logger.LogError(exStr); Helper.SaveDiagMessage(_sqlServer, DiagOptions.Tech, "SbAcquiringHostedService.CompleteRequest: " + exStr, _logger); } }
public async Task <Employee> GetEmployeeByTelegramUserIdAsync(long telegramUserId) { using (SqlConnection conn = this._sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = this._sqlServer.GetSpCommand("telegram.GetUserRecordByUserId", conn)) { cmd.AddBigIntParam("@UserId", telegramUserId); using (SqlDataReader dr = await cmd.ExecuteReaderAsync()) { if (dr.Read()) { return(AcquireEmployee(telegramUserId, dr)); } return(null); } } } }
public async Task <Employee> SetPhoneAndGetEmployee(long telegramUserId, string phone) { if (string.IsNullOrEmpty(phone) || (phone.Length == 12 && !phone.StartsWith("+7")) || (phone.Length == 11 && !phone.StartsWith("7")) || phone.Length < 11 || phone.Length > 12) { return(null); } if (phone.Length == 12) { phone = phone.Substring(2, 10); } else { phone = phone.Substring(1, 10); } using (SqlConnection conn = _sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.CreateAndGetUserRecord", conn)) { cmd.AddBigIntParam("@UserId", telegramUserId); cmd.AddCharParam("@Phone", 10, phone); using (SqlDataReader dr = await cmd.ExecuteReaderAsync()) { if (dr.Read()) { return(AcquireEmployee(telegramUserId, dr)); } return(null); } } } }
public override async Task <bool> CompleteSession(SqlServer sqlServer, Employee employee) { using (SqlConnection conn = sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = sqlServer.GetSpCommand("telegram.DialogSession_YandexKassa_Complete", conn)) { cmd.AddBigIntParam("@TelegramId", employee.TelegramUserId); cmd.AddIntParam("@PlaceId", employee.Place.Id); cmd.AddIntParam("@EmployeeId", employee.Id); cmd.AddVarCharParam("@UserLogin", 50, this.UserLogin); cmd.AddDecimalParam("@Amount", 18, 2, this.Amount.Value); cmd.AddTinyIntParam("@ProviderId", (byte)this.Provider); SqlParameter retValParam = cmd.AddReturnValue(); await cmd.ExecuteNonQueryAsync(); int retVal = retValParam.GetInt32OrDefault(); return(retVal == 0); } } }
private async Task TurnEnterExitEmployee(Update update, Employee employee, string command) { TurnSessionData session = (TurnSessionData)employee.DialogSession; bool isCorrect = true; if (command.Length < 2 || command[0] != '-' && command[0] != '+') { isCorrect = false; } bool isEnter = (command[0] == '+'); int employeeId = 0; if (isCorrect) { for (int i = 1; i < command.Length; i++) { if (!char.IsDigit(command[i])) { isCorrect = false; break; } } if (isCorrect) { if (!int.TryParse(command.Substring(1), out employeeId)) { isCorrect = false; } } } int retVal = 0; if (isCorrect) { using (SqlConnection conn = _sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.DialogSession_Turn_EnterExitEmployee", conn)) { cmd.AddIntParam("@ManagerId", employee.Id); cmd.AddBigIntParam("@ManagerTelegramId", employee.TelegramUserId); cmd.AddNVarCharParam("@ManagerName", 101, employee.GetFullName()); cmd.AddIntParam("@EmployeeId", employeeId); cmd.AddIntParam("@PlaceId", employee.Place.Id); cmd.AddBitParam("@IsEnter", isEnter); SqlParameter retValParam = cmd.AddReturnValue(); await cmd.ExecuteNonQueryAsync(); retVal = retValParam.GetInt32OrDefault(); } } isCorrect = (retVal >= 0); } if (isCorrect) { string text; if (retVal == 1) { text = "Сотрудник уже вошёл в смену"; } else if (retVal == 2) { text = "Сотрудник уже вышел из смены"; } else { text = "Команда успешно выполнена"; } ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee); await _telegramClient.SendTextMessageAsync(update.Message.From.Id, text, ParseMode.Default, false, false, 0, keyboard, _cts.Token); await this.WriteMessageLog(new MessageLog(text, employee, keyboard)); } else { StringBuilder sb = new StringBuilder(); if (retVal == -1) { sb.Append("Вы не можете управлять сменами сотрудников. Нажмите кнопку <b>Назад</b>"); } else if (retVal == -2) { sb.Append("Сотрудник не принадлежит вашему заведению. Исправьте или нажмите кнопку <b>Назад</b>"); } else { sb.Append("Вы ввели неизвестную команду. Исправьте или нажмите кнопку <b>Назад</b>"); } TurnSessionData.Employees employees = null; if (retVal != -1) { employees = await session.GetEmployeesStatus(employee, _sqlServer); sb.AppendLine().AppendLine(); this.GetEmployeesTurnStatusMessageForManager(employees, sb); } string text = sb.ToString(); ReplyKeyboardMarkup keyboard = employee.DialogSession.GetKeyboardMarkup(employee, employees); await _telegramClient.SendTextMessageAsync(update.Message.From.Id, text, ParseMode.Html, false, false, 0, keyboard, _cts.Token); await this.WriteMessageLog(new MessageLog(text, employee, keyboard)); } }
private async Task GetQrCodeAsync(Update update, Employee employee) { string receiverCode = employee.Place.Id.ToString() + "-" + employee.Id.ToString(); string qrString = "ST00011|Name=ООО Чаевые-24|PersonalAcc=40702810970010113722|BankName=МОСКОВСКИЙ ФИЛИАЛ АО КБ \"МОДУЛЬБАНК\"|" + "BIC=044525092|CorrespAcc=30101810645250000092|PayeeINN=1651083591|" + "Purpose=Дарение чаевых коллективу по договору-оферте tips24.ru/" + receiverCode + "|" + "PayerAddress=" + employee.Place.City + ", " + employee.Place.Address + "|LastName=Гость|FirstName=заведения"; //string qrString = "ST00011|Name=ИП Галяутдинов Ринат Ибрагимович|PersonalAcc=40802810470210002677|BankName=МОСКОВСКИЙ ФИЛИАЛ АО КБ \"МОДУЛЬБАНК\"|BIC=044525092|CorrespAcc=30101810645250000092|PayeeINN=165117672519|" + // "Purpose=Дарение чаевых коллективу по договору-оферте tips24.ru/" + receiverCode + "|" + // "PayerAddress="+ employee.PlaceCity + ", " + employee.PlaceAddress + "|LastName=Гость|FirstName=заведения"; byte[] hash = GetQrHash(qrString); if (employee.QrCode != null && employee.QrCode.IsValid(hash)) { ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee); Message response = await _telegramClient.SendPhotoAsync(update.Message.From.Id, new InputOnlineFile(employee.QrCode.FileId), null, ParseMode.Default, false, 0, keyboard, _cts.Token); await this.WriteMessageLog(new QrCodeOutputMessageLog(employee, employee.QrCode.FileId, receiverCode, keyboard)); return; } QRCodeWriter qrWriter = new QRCodeWriter(); Dictionary <ZXing.EncodeHintType, object> hints = new Dictionary <ZXing.EncodeHintType, object>(); hints.Add(ZXing.EncodeHintType.CHARACTER_SET, "windows-1251"); hints.Add(ZXing.EncodeHintType.MARGIN, 1); ZXing.Common.BitMatrix matrix = qrWriter.encode(qrString, ZXing.BarcodeFormat.QR_CODE, 640, 640, hints); BarcodeWriter <Rgb24> writer = new BarcodeWriter <Rgb24>(); string fileId = null; using (MemoryStream ms = new MemoryStream()) { using (Image <Rgb24> image = writer.Write(matrix)) { image.Save(ms, new PngEncoder() { ColorType = PngColorType.Grayscale, BitDepth = PngBitDepth.Bit8 }); } ms.Position = 0; ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee); Message response = await _telegramClient.SendPhotoAsync(update.Message.From.Id, new InputOnlineFile(ms), null, ParseMode.Default, false, 0, keyboard, _cts.Token); fileId = response.Photo[0].FileId; await this.WriteMessageLog(new QrCodeOutputMessageLog(employee, fileId, receiverCode, keyboard)); } using (SqlConnection conn = _sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.UpdateQrCodeFileId", conn)) { cmd.AddBigIntParam("@UserId", employee.TelegramUserId); cmd.AddVarCharParam("@QrCodeFileId", 64, fileId); cmd.AddBinaryParam("@QrCodeStringHash", 40, hash); await cmd.ExecuteNonQueryAsync(); } } }
private async Task GetBalanceAsync(Update update, Employee employee) { StringBuilder sb = new StringBuilder(); sb.Append("<b>Ваш баланс: ").Append(employee.Balance.ToString("F2", _ruCulture)).Append(" рублей</b>") .AppendLine(); bool hasRecords = false; using (SqlConnection conn = _sqlServer.GetConnection()) { await conn.OpenAsync(); using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.GetBalance", conn)) { cmd.AddBigIntParam("@EmployeeId", employee.Id); using (SqlDataReader dr = await cmd.ExecuteReaderAsync()) { while (dr.Read()) { if (!hasRecords) { sb.AppendLine().Append("<b>Последние операции:</b>"); hasRecords = true; } DateTime logDateTime = dr.GetDateTime("LogDateTime"); byte operationType = dr.GetByte("OperationType"); decimal amount = dr.GetDecimal("Amount"); long? paymentId = dr.GetInt64OrNull("PaymentId"); decimal? originalAmount = dr.GetDecimalOrNull("OriginalAmount"); sb.AppendLine() .Append("<b>").Append(amount < 0 ? "−" : "+").Append(Math.Abs(amount).ToString("F2", _ruCulture)) .Append("</b> руб. - ").Append(logDateTime.ToTelegramReportString()).Append(", "); if (operationType == 1) { sb.Append("общая сумма чаевых ").Append(originalAmount.Value.ToString("F2", _ruCulture)); } else if (operationType == 2) { sb.Append("вывод на карту"); } else if (operationType == 3) { sb.Append("возврат чаевых по запросу гостя"); } } } } } if (!hasRecords) { sb.Append("По Вашему счёту операций не зарегистрировано"); } string text = sb.ToString(); ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee); await _telegramClient.SendTextMessageAsync(update.Message.From.Id, text, ParseMode.Html, false, false, 0, keyboard, _cts.Token); await this.WriteMessageLog(new MessageLog(text, employee, keyboard)); }