/// <summary>読み込み・検証・一時データ登録処理</summary> /// <param name="source"></param> /// <param name="token"></param> /// <returns></returns> public async Task <ImportDataResult> ReadAsync(TransactionImportSource source, CancellationToken token = default(CancellationToken)) { var encoding = Encoding.GetEncoding(source.EncodingCodePage); var csv = encoding.GetString(source.Data); var companyTask = companyProcessor.GetAsync(new CompanySearch { Id = source.CompanyId, }, token); var appConTask = applicationControlProcessor.GetAsync(source.CompanyId, token); await Task.WhenAll(companyTask, appConTask); var company = companyTask.Result.First(); var applicationControl = appConTask.Result; var importer = new BillingImporterBase(applicationControl) { CompanyId = source.CompanyId, CompanyCode = company.Code, LoginUserId = source.LoginUserId, ImporterSettingId = source.ImporterSettingId, FilePath = csv, CsvParser = new CsvParser { Encoding = encoding, StreamCreator = new PlainTextMemoryStreamCreator(), }, GetImporterSettingAsync = settingId => GetImporterSettingAsync(settingId, token), GetImporterSettingDetailAsync = settingId => GetImporterSettingDetailsAsync(settingId, token), GetCurrencyAsync = companyId => GetCurrenciesAsync(companyId, token), GetJuridicalParsonalitiesAsync = companyId => GetJuridicalParsonalitiesAsync(companyId, token), GetGeneralSettingValueAsync = (companyId, code) => GetGeneralSettingValueAsync(companyId, code, token), GetTaxClassAsync = () => GetTaxClassesAsync(token), GetBillingDivisionContractByCustomerIdsAsync = ids => GetBillingDivisionsByCustomerIdsAsync(ids, token), GetHolidayCalendarsAsync = companyId => GetHolidayCalendarsAsync(companyId, token), LoadColumnNameSettingsInnerAsync = tableName => GetColumnNamesAsync(source.CompanyId, tableName, token), BillingImportDuplicationCheckAsync = (companyId, items, details) => GetDuplicationRows(companyId, items, details, token), GetCustomerByCodesAsync = (companyId, codes) => GetCustomersAsync(companyId, codes, token), GetDepartmentByCodesAsync = (companyId, codes) => GetDepartmntsAdync(companyId, codes, token), GetAccountTitleByCodesAsync = (companyId, codes) => GetAccountTitlesAsync(companyId, codes, token), GetStaffByCodesAsync = (companyId, codes) => GetStaffsAsync(companyId, codes, token), GetCategoriesByCodesAsync = (companyId, categoryType, codes) => GetCategoriesAsync(companyId, categoryType, codes, token), GetIsEnableToEditNoteAsync = companyId => GetIsEnableToEditNoteAsync(companyId, token), Serialize = item => serializer.PackSingleObject(item), SaveImportDataAsync = data => importDataProcessor.SaveAsync(data, token), }; var readResult = await importer.ReadCsvAsync(); return(new ImportDataResult { ImportData = importer.ImportData, ReadCount = importer.ReadCount, ValidCount = importer.ValidCount, InvalidCount = importer.InvalidCount, NewCustomerCreationCount = importer.NewCustomerCreationCount, Logs = importer.GetValidationLogs(), }); }
/// <summary>インポート処理 データ登録</summary> /// <param name="source"></param> /// <param name="token"></param> /// <returns></returns> public async Task <ImportDataResult> ImportAsync(TransactionImportSource source, CancellationToken token = default(CancellationToken)) { var companyTask = companyProcessor.GetAsync(new CompanySearch { Id = source.CompanyId, }, token); var appConTask = applicationControlProcessor.GetAsync(source.CompanyId, token); await Task.WhenAll(companyTask, appConTask); var company = companyTask.Result.First(); var applicationControl = appConTask.Result; var importDataId = source.ImportDataId ?? 0; var importer = new BillingImporterBase(applicationControl) { CompanyId = source.CompanyId, CompanyCode = company.Code, LoginUserId = source.LoginUserId, ImporterSettingId = source.ImporterSettingId, Deserialize = bytes => serializer.UnpackSingleObject(bytes), LoadImportDataAsync = () => importDataProcessor.GetAsync(importDataId, objectType: 0, token: token), ImportInnerAsync = (companyId, loginUserId, settingId, items) => billingImporterProcessor.ImportAsync(new BillingImportItems { CompanyId = companyId, LoginUserId = loginUserId, ImporterSettingId = settingId, Items = items, }, token), }; var result = await importer.ImportAsync(); return(new ImportDataResult { SaveCount = importer.SaveCount, SaveAmount = importer.SaveAmount, }); }