/// <summary> /// Назначить скан документа для записи в перечне. /// </summary> /// <param name="findModel">Запись перечня.</param> /// <param name="folders">Список путей к папкам, содержащим сканы.</param> /// <param name="primaryModel">Основная запись перечня, к которой относится запись.</param> private void SetScan(FindModel findModel, FindModel primaryModel) { if (findModel.IsPrimary) { SetPrimaryScan(findModel); } else { SetSecondaryScan(findModel, primaryModel); } }
/// <summary> /// Установить скан основного докумена. /// </summary> /// <param name="findModel">Запись перечня.</param> private void SetPrimaryScan(FindModel findModel) { Regex actRegex = new Regex(@"[0-2]AJ\.(\d{5,6})\.[C|С]-2\.\d{3}.\d", RegexOptions.IgnoreCase); if (actRegex.IsMatch(findModel.DocNumber)) { findModel.IsAct = true; } var findFolderNameModel = GetDigitsFromText(findModel.DocNumber); foreach (var folder in baseSubFoldersPath) { var folderNameDisk = Path.GetFileName(folder); var findFolderNameDisk = GetDigitsFromText(folderNameDisk); if (findFolderNameDisk.Contains(findFolderNameModel) || findFolderNameModel.Contains(findFolderNameDisk)) { findModel.FindFolder = folder; findModel.FindFolderIsExist = true; // Назначить папку как из ИСУП исходя из длины ее названия. // Из исупа папка выгружается с именем следующего формата: "Акт № 1AJ.78717.С-2.0563", // при наименовании папок вручную, применяется формат "78717". if (folderNameDisk.Length > 5) { findModel.IsIsup = true; findModel.FindFolder = folder; findModel.ScanFileNameVariants = Directory.GetFiles(folder); var scanFileName = Directory.GetFiles(folder).FirstOrDefault(); SetScanFile(findModel, scanFileName); SetNewDocName(findModel); SetNewFileName(findModel); } else { findModel.IsIsup = false; FindAndSetScan(findModel, folder, true); } break; } } if (string.IsNullOrEmpty(findModel.FindFolder)) { if (!findModel.IsAct) { findModel.FindFolder = baseFolderPath; FindAndSetScan(findModel, baseFolderPath); } } }
/// <summary> /// Получить сканы для документов перечня. /// </summary> /// <param name="findModels"></param> /// <returns></returns> public IEnumerable <FindModel> GetMatchingResults(IEnumerable <FindModel> findModels) { var models = findModels.ToArray(); FindModel primaryModel = null; var groupId = 0; foreach (var model in models) { SetScan(model, primaryModel); if (model.IsPrimary) { groupId++; primaryModel = model; } model.GroupId = groupId; } return(models); }
/// <summary> /// Установить скан второстепенного документа. /// </summary> /// <param name="findModel"></param> /// <param name="primaryModel"></param> private void SetSecondaryScan(FindModel findModel, FindModel primaryModel) { if (primaryModel == null) { return; } if (primaryModel.IsIsup) { var findFolder = Directory.GetDirectories(primaryModel.FindFolder).FirstOrDefault(); findModel.FindFolder = findFolder; FindAndSetScan(findModel, findFolder); } else { var findFolder = primaryModel.FindFolder; findModel.FindFolder = findFolder; FindAndSetScan(findModel, findFolder); } }