/// <summary> /// Получить данные из 1С и подготовить для вывода на форму асинхронно. /// </summary> /// <param name="service1C">Сервис 1С</param> /// <param name="account1CCode">Номер договора</param> /// <param name="secret1C">Данные для подключения</param> /// <param name="region">Регион</param> /// <param name="configuration">Настройки подключения</param> /// <returns>Модель данных для отображения</returns> public static async Task <IndexModel> GetDataFrom1CAsync(IService1СSoap service1C, string account1CCode, ISecret1C secret1C, string region, IConfiguration configuration) { IndexModel result = new IndexModel(); CreditDocumentNResult account = await service1C.GetCreditDocumentAsync( secret1C.Servers[region], secret1C.Login, secret1C.Password, account1CCode, CancellationToken.None); if (account.CreditDocument == default) { throw new Exception($"{Environment.NewLine}{account.Errors}"); } if (account.CreditDocument.Client == default) { throw new Exception($"{Environment.NewLine}Договор с номером \"{account1CCode}\" в базе 1С не найден"); } CreditDocument creditDocument = account.CreditDocument; result.ClientPersonalInfo.AddressReq = (AddressReq[])creditDocument.Client; result.ClientPersonalInfo.IdReq = (IdReq)creditDocument.Client; result.ClientPersonalInfo.PersonReq = (PersonReq)creditDocument.Client; result.InquiryReq = (InquiryReq)creditDocument; result.Client1CCode = creditDocument.Client.ID1C; result.Account1CCode = creditDocument.Code1C; result.Account1CDate = SOAPNBCH.StringToDateTime(creditDocument.DateOfCredit); return(result); }
/// <summary> /// Получить КИ клиента из НБКИ асинхронно. /// </summary> /// <param name="url">Урл веб службы</param> /// <param name="request">Данные клиента</param> /// <param name="account1CCode">Номер договора в 1С</param> /// <param name="client1CCode">Код клиента в 1С</param> /// <param name="clientTimeZone">Часовой пояс, откуда пришел запрос</param> /// <param name="cancellationToken">Токен отмены</param> /// <returns>КИ из НБКИ</returns> public async Task <Report> GetReportAsync(string url, ProductRequest request, string account1CCode, string client1CCode, int clientTimeZone, CancellationToken cancellationToken) { GetReportCheckParams(url, request, account1CCode, client1CCode, clientTimeZone); int serverTimeZone = ServerTimeZone; if (!await ReportIsExpiredAsync(client1CCode, clientTimeZone, cancellationToken)) { Report nullReport = new Report { ErrorMessage = $"КИ НБКИ по одному клиенту можно запрашивать не чаще чем раз в {SOAPNBCH.ReportCanReaplyMinute} минут", calc = { ReportDate = DateTime.Now.AddHours(clientTimeZone - serverTimeZone) } }; return(nullReport); } request = UpdateDateToMoscowTimeZone(request); ProductResponse productResponse = default; byte[] signedResponse = default; byte[] clearResponse = default; try { signedResponse = await SOAPNBCH.GetSignedReportAsync(url, request, cancellationToken); clearResponse = SOAPNBCH.RemoveSignature(signedResponse); productResponse = SOAPNBCH.DeserializeProductRequest(clearResponse) ?? new ProductResponse(); } catch (Exception exception) { LogAndThrowException <Exception, ServiceNBCHsoap>( _Logger, "", "Ошибка запроса анкеты НБКИ. Ошибка {ExceptionMessage}./* Метод: {methodName}, запрос: {request}," + " url: {url}, Exception: {Exception}.*/", exception.Message, "GetReportAsync", request, url, exception); } try { await _ServiceNBCH.WriteCreditHistoryAsync(account1CCode, client1CCode, signedResponse, clearResponse, clientTimeZone, productResponse?.Preply?.Error?.CtErr, cancellationToken); } catch (Exception exception) { LogAndThrowException <Exception, ServiceNBCHsoap>( _Logger, "", "Ошибка сохранения анкеты НБКИ. Ошибка {ExceptionMessage}./* Метод: {methodName}," + " account1CCode: {account1CCode}, client1CCode: {client1CCode}.*/", exception.Message, "GetReportAsync", account1CCode, client1CCode); } Report report = productResponse?.Preply?.Report ?? new Report(); report.ErrorMessage = productResponse?.Preply?.Error?.CtErr.Code == SOAPNBCH.ClientNotFoundNBCH ? "В базе НБКИ, клиент с такими данными не найден" : productResponse?.Preply?.Error?.CtErr.Text; report.calc.ReportDate = DateTime.Now.AddHours(clientTimeZone - serverTimeZone); report.Client1CCode = client1CCode; return(report); }
/// <summary> /// Изменить дату и время согласия клиента в соответствии с Московским временем. /// </summary> /// <param name="request">Запрос в НБКИ</param> /// <returns></returns> private ProductRequest UpdateDateToMoscowTimeZone(ProductRequest request) { DateTime consentDate = SOAPNBCH.StringToDateTime(request.Prequest.Req.InquiryReq.ConsentReq.consentDate); consentDate = EndOfDay(consentDate); DateTime moscowDate = DateTime.Now.AddHours(SOAPNBCH.MoscowTimeZone - ServerTimeZone); consentDate = consentDate > moscowDate?consentDate.AddDays(-1) : consentDate; request.Prequest.Req.InquiryReq.ConsentReq.consentDate = SOAPNBCH.DateTimeToString(consentDate); return(request); }