/// <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="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 ); } }
/// <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); } }
/// <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()); }
/// <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()); }
/// <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"); } }
/// <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); } }
/// <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); } }
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)); }
/// <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); }
/// <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); } }
/// <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); }
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));
public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C) => await ExecuteWithTryCatchAsync <WCFService1C>(() => Service1C.UpdateAccountAndClientInfoAsync(document1C), new LogShortMessage("Ошибка вызова метода. Метод {methodName}, document1C {document1C}.", "UpdateAccountAndClientInfo", document1C));
/// <summary> /// Обновить информацию по договору 1С. /// </summary> /// <param name="document1C">Договора 1С</param> public void UpdateAccountAndClientInfo(CreditDocumentNResult document1C) => Channel.UpdateAccountAndClientInfo(document1C);
/// <summary> /// Загрузить ПДН по договору асинхронно. /// </summary> /// <param name="document1C">Договор</param> /// <param name="pdnValue">Значение процента ПДН</param> public async Task LoadPDNFromFileAsync(CreditDocumentNResult document1C, double pdnValue) => await LoadPDNFromFileAsync(document1C, pdnValue, CancellationToken.None);
/// <summary> /// Обновить информацию по договору 1С асинхронно. /// </summary> /// <param name="document1C">Договора 1С</param> public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C) => await UpdateAccountAndClientInfoAsync(document1C, CancellationToken.None);
/// <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();
/// <summary> /// Обновить информацию по договору 1С. /// </summary> /// <param name="document1C">Договора 1С</param> public void UpdateAccountAndClientInfo(CreditDocumentNResult document1C) => UpdateAccountAndClientInfoAsync(document1C, CancellationToken.None).WaitAndThrowException();
/// <summary> /// Обновить информацию по договору 1С асинхронно. /// </summary> /// <param name="document1C">Договора 1С</param> public async Task UpdateAccountAndClientInfoAsync(CreditDocumentNResult document1C) => await Channel.UpdateAccountAndClientInfoAsync(document1C);
/// <summary> /// Загрузить ПДН по договору. /// </summary> /// <param name="document1C">Договор</param> /// <param name="pdnValue">Значение процента ПДН</param> public void LoadPDNFromFile(CreditDocumentNResult document1C, double pdnValue) => Channel.LoadPDNFromFile(document1C, pdnValue);
/// <summary> /// Загрузить ПДН по договору асинхронно. /// </summary> /// <param name="document1C">Договор</param> /// <param name="pdnValue">Значение процента ПДН</param> public async Task LoadPDNFromFileAsync(CreditDocumentNResult document1C, double pdnValue) => await Channel.LoadPDNFromFileAsync(document1C, pdnValue);