Пример #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);
        }
Пример #2
0
        /// <summary>
        /// Загрузить ПДН по договору асинхронно.
        /// </summary>
        /// <param name="document1C">Договор</param>
        /// <param name="pdnValue">Значение процента ПДН</param>
        /// <param name="cancellationToken">Токен отмены</param>
        public async Task LoadPDNFromFileAsync(CreditDocumentNResult document1C, double pdnValue,
                                               CancellationToken cancellationToken)
        {
            LoadPDNFromFileAsyncCheckParams(document1C);

            await UpdateAccountAndClientInfoAsync(document1C, cancellationToken);

            string account1CCode = document1C.CreditDocument.Code1C;

            using (IDBSource dbSource = new MKKContext()) {
                PDNResultDB pdn = await dbSource.PDNResultDBs.
                                  AsNoTracking().
                                  Where(i => i.Account1C.Account1CCode.Equals(account1CCode)).
                                  SingleOrDefaultAndErrorAsync <PDNResultDB, EFService1C>(cancellationToken);

                if (pdn == default)
                {
                    pdn = new PDNResultDB();
                    dbSource.Entry(pdn).State = EntityState.Added;
                }

                Account1C account1CInDB = await FindAccountAndLogErrorAsync <EFService1C>(account1CCode, cancellationToken);

                pdn.Account1C = account1CInDB;
                pdn.Percent   = pdnValue;
                dbSource.Entry(account1CInDB).State = EntityState.Unchanged;

                await dbSource.SaveChangesAndLogErrorAsync <EFService1C>(new LogShortMessage(
                                                                             message : "/*Метод {methodName}, document1C {document1C}, pdnValue {pdnValue}*/",
                                                                             "AddNewAccountRecordAsync", document1C, pdnValue),
                                                                         cancellationToken
                                                                         );
            }
        }
Пример #3
0
        /// <summary>
        /// Обновить информацию по договору 1С асинхронно.
        /// </summary>
        /// <param name="document1C">Договора 1С</param>
        /// <param name="cancellationToken">Токен отмены</param>
        public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C,
                                                          CancellationToken cancellationToken)
        {
            UpdateAccountAndClientInfoCheckParams(document1C);

            Account1C account1C = (Account1C)document1C.CreditDocument;

            ClientDB[] clientDBs = ClientsFromAccount(document1C, account1C);

            ClientTask[] presentClientsTask = clientDBs.AsParallel().
                                              Select(i => new ClientTask()
            {
                ClientDB = i,
                Task     = FindClientAndLogErrorAsync <EFService1C>(i.Code1C, cancellationToken)
            }).
                                              WithCancellation(cancellationToken).
                                              ToArray();

            UpdateClientsInfo(presentClientsTask, cancellationToken);

            Account1C presentAccount1CTask = await FindAccountAndLogErrorAsync <EFService1C>(
                account1C.Account1CCode,
                cancellationToken,
                c => c.Client, o => o.Organization, sp => sp.SellPont, cht => cht.TypeOfCharge);

            await UpdateAccount1CInfoAsync(account1C, presentAccount1CTask, cancellationToken);

            if (clientDBs.Length > 1)
            {
                await UpdateGuarantorsAsync(clientDBs, cancellationToken);
            }
        }
Пример #4
0
        /// <summary>
        /// Получить из 1С список клиентов по номеру договора асинхронно.
        /// </summary>
        /// <param name="service1C">Сервис 1С</param>
        /// <param name="secret1Cs">Данные для подключения к сервису 1С</param>
        /// <param name="region">Регион для определения приоритетного сервера</param>
        /// <param name="account1CCode">Номер договора 1С</param>
        /// <returns>Список клиентов</returns>
        public static async Task <(Client[] Clients, string[] Errors)> GetClientsFrom1CAccountAsync(IService1СSoap service1C, ISecret1C secret1Cs, string region, string account1CCode)
        {
            List <string> errors = new List <string>();

            Client[] clients = new Client[0];

            try {
                CreditDocumentNResult creditDocument =
                    await service1C.GetCreditDocumentAsync(
                        secret1Cs.Servers[region],
                        secret1Cs.Login,
                        secret1Cs.Password,
                        account1CCode,
                        CancellationToken.None);

                if (creditDocument.Errors.Length > 0)
                {
                    errors.AddRange(creditDocument.Errors);
                }
                clients = (Client[])creditDocument.CreditDocument;
            }
            catch (EndpointNotFoundException) {
                errors.Add("Не удалось подключиться к службе 1C (запрос данных кредитного договора)");
            }
            catch (Exception ex) {
                errors.Add(ex.Message);
            }

            return(clients, errors.ToArray());
        }
Пример #5
0
        /// <summary>
        /// Получить список клиентов из договора.
        /// </summary>
        /// <param name="document">Договор 1С из вебсервиса</param>
        /// <param name="account1C">Договор 1С</param>
        /// <returns>Список клиентов</returns>
        private static ClientDB[] ClientsFromAccount(CreditDocumentNResult document, Account1C account1C)
        {
            List <ClientDB> clientDBs = new List <ClientDB> {
                (ClientDB)document.CreditDocument.Client
            };

            foreach (ClientProfile client in document.CreditDocument?.Guarantors ?? new ClientProfile[0])
            {
                if (SOAP1C.StringToDateTime(client.BirthDate) < new DateTime(1920, 1, 1))
                {
                    LogAndThrowException <Exception, EFService1C>(_Logger,
                                                                  "",
                                                                  "Проверьте год рождения клиента {clientLastName} {clientFirstName} {clientSecondName}" +
                                                                  " (код клиента {clientID1C}). Год рождения:{clientBirthDate)}./* Метод {methodName}.*/",
                                                                  client.LastName, client.FirstName, client.SecondName, client.ID1C, client.BirthDate,
                                                                  "CreditDocumentNResult");
                }

                ClientDB           clientDB   = (ClientDB)client;
                List <GuarantorDB> guarantors = new List <GuarantorDB> {
                    new GuarantorDB()
                    {
                        Account = account1C
                    }
                };
                clientDB.GuarantorDBs = guarantors;

                clientDBs.Add(clientDB);
            }

            return(clientDBs.ToArray());
        }
Пример #6
0
 /// <summary>
 /// Проверить входные параметры метода LoadPDNFromFile.
 /// </summary>
 /// <param name="document1C"></param>
 private void LoadPDNFromFileAsyncCheckParams(CreditDocumentNResult document1C)
 {
     if (string.IsNullOrEmpty(document1C?.CreditDocument?.Code1C ?? ""))
     {
         LogAndThrowException <ArgumentNullException, EFService1C>(_Logger,
                                                                   nameof(document1C),
                                                                   "Не задан документ 1С./* Метод {methodName}.*/",
                                                                   "LoadPDNFromFileAsyncCheckParams");
     }
 }
Пример #7
0
 /// <summary>
 /// Проверить входные параметры UpdateAccountAndClientInfoCheck.
 /// </summary>
 /// <param name="document1C">Договор 1С</param>
 private void UpdateAccountAndClientInfoCheckParams(CreditDocumentNResult document1C)
 {
     if (document1C?.CreditDocument == default)
     {
         LogAndThrowException <ArgumentNullException, EFService1C>(_Logger,
                                                                   nameof(document1C),
                                                                   "Не задан договор./* Метод {methodName} document1C {document1C}.*/",
                                                                   "UpdateAccountAndClientInfoCheckParams", document1C);
     }
 }
Пример #8
0
        /// <summary>
        /// Загрузить ПДН %
        /// </summary>
        /// <param name="webServiceURLs">Адреса веб сервисов 1С</param>
        /// <param name="userName">Пользователь веб сервиса 1С</param>
        /// <param name="userPassword">Пароль веб сервиса 1С</param>
        /// <param name="account1CCode">Код договора 1С</param>
        /// <param name="pdnValue">Процент ПДН</param>
        public void LoadPDNFromFile(string[] webServiceURLs, string userName, string userPassword, string account1CCode, double pdnValue)
        {
            LoadPDNFromFileCheck(webServiceURLs, userName, account1CCode);

            CreditDocumentNResult result = SOAP1C.GetCreditDocument(webServiceURLs, userName, userPassword, account1CCode);

            if (result.CreditDocument?.Client?.ID1C != default)
            {
                _Service1C.UpdateAccountAndClientInfo(result);
                _Service1C.LoadPDNFromFile(result, pdnValue);
            }
        }
Пример #9
0
        public IActionResult Index(NBCHRequestIndex data, string submit)
        {
            if (submit == "GetFrom1S")
            {
                CreditDocumentNResult dogovor1C      = Service1C.GetCreditDocument(new string[] { "" }, "sap", "~sap", "ddd");
                CreditDocument        creditDocument = dogovor1C.CreditDocument;

                data.AddressReq = (AddressReq[])creditDocument.Client;
                data.IdReq      = (IdReq)creditDocument.Client;
                data.PersonReq  = (PersonReq)creditDocument.Client;
            }
            return(View(data));
        }
Пример #10
0
        /// <summary>
        /// Получить из 1С информацию по номеру договора.
        /// </summary>
        /// <param name="webServiceURLs">Список адресов, для подключения к веб службе</param>
        /// <param name="userName">Имя пользователя для подключения к веб службе</param>
        /// <param name="userPassword">Пароль для для подключения к веб службе</param>
        /// <param name="account1CCode">Номер договора в 1С</param>
        /// <returns>CreditDocumentNError описание кредитного договора и ошибки при получении данных если были</returns>
        public CreditDocumentNResult GetCreditDocument(string[] webServiceURLs, string userName, string userPassword,
                                                       string account1CCode)
        {
            GetCreditDocumentCheckParams(webServiceURLs, userName, account1CCode);

            CreditDocumentNResult result = SOAP1C.GetCreditDocument(webServiceURLs, userName, userPassword, account1CCode);

            if (result.CreditDocument?.Client?.ID1C != default)
            {
                _Service1C.UpdateAccountAndClientInfo(result);
            }

            return(result);
        }
Пример #11
0
        /// <summary>
        /// Загрузить ПДН % асинхронно.
        /// </summary>
        /// <param name="webServiceURLs">Адреса веб сервисов 1С</param>
        /// <param name="userName">Пользователь веб сервиса 1С</param>
        /// <param name="userPassword">Пароль веб сервиса 1С</param>
        /// <param name="account1CCode">Код договора 1С</param>
        /// <param name="pdnValue">Процент ПДН</param>
        /// <param name="cancellationToken">Токен отмены</param>
        public async Task LoadPDNFromFileAsync(string[] webServiceURLs, string userName, string userPassword,
                                               string account1CCode, double pdnValue, CancellationToken cancellationToken)
        {
            LoadPDNFromFileCheck(webServiceURLs, userName, account1CCode);

            CreditDocumentNResult result =
                await SOAP1C.GetCreditDocumentAsync(webServiceURLs, userName, userPassword, account1CCode, cancellationToken);

            if (result.CreditDocument?.Client?.ID1C != default)
            {
                await _Service1C.UpdateAccountAndClientInfoAsync(result, cancellationToken);

                await _Service1C.LoadPDNFromFileAsync(result, pdnValue, cancellationToken);
            }
        }
Пример #12
0
        /// <summary>
        /// Получить из 1С информацию по номеру договора асинхронно.
        /// </summary>
        /// <param name="webServiceURLs">Список адресов, для подключения к веб службе</param>
        /// <param name="userName">Имя пользователя для подключения к веб службе</param>
        /// <param name="userPassword">Пароль для для подключения к веб службе</param>
        /// <param name="account1CCode">Номер договора в 1С</param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <returns>CreditDocumentNError описание кредитного договора и ошибки при получении данных если были</returns>
        public async Task <CreditDocumentNResult> GetCreditDocumentAsync(string[] webServiceURLs, string userName,
                                                                         string userPassword, string account1CCode, CancellationToken cancellationToken)
        {
            GetCreditDocumentCheckParams(webServiceURLs, userName, account1CCode);

            CreditDocumentNResult result =
                await SOAP1C.GetCreditDocumentAsync(webServiceURLs, userName, userPassword, account1CCode, cancellationToken);

            if (result.CreditDocument?.Client?.ID1C != default)
            {
                await _Service1C.UpdateAccountAndClientInfoAsync(result, cancellationToken);
            }

            return(result);
        }
Пример #13
0
 public async Task LoadPDNFromFileAsync(CreditDocumentNResult document1C, double pdnValue) =>
 await ExecuteWithTryCatchAsync <WCFService1C>(() => Service1C.LoadPDNFromFileAsync(document1C, pdnValue),
                                               new LogShortMessage("Ошибка вызова метода. Метод {methodName}, document1C {document1C}, pdnValue {pdnValue}.",
                                                                   "LoadPDNFromFile", document1C, pdnValue));
Пример #14
0
 public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C) =>
 await ExecuteWithTryCatchAsync <WCFService1C>(() =>
                                               Service1C.UpdateAccountAndClientInfoAsync(document1C),
                                               new LogShortMessage("Ошибка вызова метода. Метод {methodName}, document1C {document1C}.",
                                                                   "UpdateAccountAndClientInfo", document1C));
Пример #15
0
 /// <summary>
 /// Обновить информацию по договору 1С.
 /// </summary>
 /// <param name="document1C">Договора 1С</param>
 public void UpdateAccountAndClientInfo(CreditDocumentNResult document1C) =>
 Channel.UpdateAccountAndClientInfo(document1C);
Пример #16
0
 /// <summary>
 /// Загрузить ПДН по договору асинхронно.
 /// </summary>
 /// <param name="document1C">Договор</param>
 /// <param name="pdnValue">Значение процента ПДН</param>
 public async Task LoadPDNFromFileAsync(CreditDocumentNResult document1C, double pdnValue) =>
 await LoadPDNFromFileAsync(document1C, pdnValue, CancellationToken.None);
Пример #17
0
 /// <summary>
 /// Обновить информацию по договору 1С асинхронно.
 /// </summary>
 /// <param name="document1C">Договора 1С</param>
 public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C) =>
 await UpdateAccountAndClientInfoAsync(document1C, CancellationToken.None);
Пример #18
0
 /// <summary>
 /// Загрузить ПДН по договору.
 /// </summary>
 /// <param name="document1C">Договор</param>
 /// <param name="pdnValue">Значение процента ПДН</param>
 public void LoadPDNFromFile(CreditDocumentNResult document1C, double pdnValue) => Task.Run(() =>
                                                                                            LoadPDNFromFileAsync(document1C, pdnValue, CancellationToken.None)).WaitAndThrowException();
Пример #19
0
 /// <summary>
 /// Обновить информацию по договору 1С.
 /// </summary>
 /// <param name="document1C">Договора 1С</param>
 public void UpdateAccountAndClientInfo(CreditDocumentNResult document1C) =>
 UpdateAccountAndClientInfoAsync(document1C, CancellationToken.None).WaitAndThrowException();
Пример #20
0
 /// <summary>
 /// Обновить информацию по договору 1С асинхронно.
 /// </summary>
 /// <param name="document1C">Договора 1С</param>
 public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C) =>
 await Channel.UpdateAccountAndClientInfoAsync(document1C);
Пример #21
0
 /// <summary>
 /// Загрузить ПДН по договору.
 /// </summary>
 /// <param name="document1C">Договор</param>
 /// <param name="pdnValue">Значение процента ПДН</param>
 public void LoadPDNFromFile(CreditDocumentNResult document1C, double pdnValue) =>
 Channel.LoadPDNFromFile(document1C, pdnValue);
Пример #22
0
 /// <summary>
 /// Загрузить ПДН по договору асинхронно.
 /// </summary>
 /// <param name="document1C">Договор</param>
 /// <param name="pdnValue">Значение процента ПДН</param>
 public async Task LoadPDNFromFileAsync(CreditDocumentNResult document1C, double pdnValue) =>
 await Channel.LoadPDNFromFileAsync(document1C, pdnValue);