Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }