From 3f4f9965e81f00ecee476a64549b86cd31f7d7ec Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 14 Sep 2021 19:27:16 +0200 Subject: [PATCH] Ancora fix procedura decodifica tags --- MP.FileData/Controllers/FileController.cs | 99 ++++++++++++++++++++--- MP.FileData/TagsUtils.cs | 20 +++-- MP.Prog/Components/ArchiveStatus.razor | 9 +++ MP.Prog/Components/ArchiveStatus.razor.cs | 40 +++++++-- MP.Prog/Conf/Rule03.json | 10 ++- MP.Prog/Data/FileArchDataService.cs | 12 +-- MP.Prog/Pages/Archive.razor.cs | 2 +- 7 files changed, 156 insertions(+), 36 deletions(-) diff --git a/MP.FileData/Controllers/FileController.cs b/MP.FileData/Controllers/FileController.cs index 3ca0e800..e2a87abd 100644 --- a/MP.FileData/Controllers/FileController.cs +++ b/MP.FileData/Controllers/FileController.cs @@ -48,9 +48,10 @@ namespace MP.FileData.Controllers /// path ricerca x macchina /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite /// pattern di ricerca (*.*) + /// Forza il controllo dei Tags /// Regole di ricerca applicate /// - public int CheckFileArchived(string idxMacchina, string path, int numDayPre, string searchPattern, SearchRules currRule) + public int CheckFileArchived(string idxMacchina, string path, int numDayPre, string searchPattern, bool forceTag, SearchRules currRule) { Log.Info($"CheckFileArchived S00 | macchina: {idxMacchina} | path: {path} | pattern: {searchPattern} | # ExcludedFileExt: {currRule.ExcludedFileExt.Count()}"); int checkDone = 0; @@ -92,7 +93,6 @@ namespace MP.FileData.Controllers } else { - checkDone++; // cerca nel DB... FileModel currRecord = archivedFile .Where(x => x.Active && x.Path == file.FullName) @@ -133,19 +133,22 @@ namespace MP.FileData.Controllers // salvo i NUOVI file if (fileNew != null && fileNew.Count > 0) { + checkDone += fileNew.Count; FileInsert(idxMacchina, path, fileNew, 0, currRule); Log.Info($"CheckFileArchived S03 | insert {fileNew.Count} files"); } // aggiorno i file modificati if (fileMod != null && fileMod.Count > 0) { + checkDone += fileMod.Count; FileSetUpdated(fileMod); Log.Info($"CheckFileArchived S04 | update {fileMod.Count} files"); } // segno data-ora ultimo controllo x file invariati if (fileChecked != null && fileChecked.Count > 0) { - FileSetChecked(fileChecked); + checkDone += fileChecked.Count; + FileSetChecked(fileChecked, path, currRule, forceTag); Log.Info($"CheckFileArchived S05 | refreshed {fileChecked.Count} files"); } @@ -272,9 +275,11 @@ namespace MP.FileData.Controllers /// /// Effettua inserimento di un elenco di record in archivio come NUOVO documento tracciato /// - /// - /// - /// + /// Macchina + /// Path base macchina + /// Elenco files + /// rev da usare x creazione + /// Configuraizone ricerca /// public bool FileInsert(string idxMacchina, string basePath, List newFiles, int rev, SearchRules currRule) { @@ -330,7 +335,7 @@ namespace MP.FileData.Controllers } else { - Tags = TagsUtils.searchPathName(fileName, basePath, currRule); + Tags = TagsUtils.searchPathName(item.Path, basePath, currRule); } foreach (var tag in Tags) @@ -448,23 +453,93 @@ namespace MP.FileData.Controllers /// /// Effettua update di un record in archivio da lista (SOLO STATUS) /// - /// + /// Elenco file controllati + /// Path base macchina + /// Configuraizone ricerca + /// Indica se fare COMUNQUE verifica del TAG /// - public bool FileSetChecked(List updFiles) + public bool FileSetChecked(List updFiles, string basePath, SearchRules currRule, bool forceTag) { bool answ = false; DateTime adesso = DateTime.Now; - using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { + // SOLO SE richiesto forzatura tags + if (forceTag) + { + // elenco Tags + List currTags = localDbCtx.DbSetTags.ToList(); + foreach (var item in updFiles) + { + // rimuovo tags vecchi + if (item.Tags != null) + { + item.Tags.Clear(); + localDbCtx.SaveChanges(); + } + + List Tags = new List(); + List Tag4File = new List(); + // se necessario bonifico filename... + string fileName = item.Name; + if (currRule.FileNameExtReplace.Count > 0) + { + foreach (var fReplace in currRule.FileNameExtReplace) + { + fileName = fileName.Replace(fReplace.Key, fReplace.Value).Trim(); + } + } + // cerco codice tag da configurazione + if (currRule.Mode == SearchMode.StringOnFile) + { + Tags = TagsUtils.searchProgComment(fileName, item.FileStringContent, currRule); + } + else + { + Tags = TagsUtils.searchPathName(item.Path, basePath, currRule); + } + + foreach (var tag in Tags) + { + var foundTag = currTags.SingleOrDefault(x => x.TagId == tag); + // aggiungo i tags SE non ci fossero + if (foundTag == null) + { + var newTag = new TagModel() { TagId = tag }; + currTags.Add(newTag); + Tag4File.Add(newTag); + } + else + { + // al file aggiungo comunque + Tag4File.Add(foundTag); + } + } + // aggiungo ai file + if (Tag4File.Count > 0) + { + // salvo i tags relativi ai files + item.Tags = Tag4File; + } + } + try + { + // salvo + localDbCtx.SaveChanges(); + } + catch (Exception exc) + { + Log.Error($"Errore in salvataggio FileSetChecked{Environment.NewLine}{exc}"); + } + } + // update comunque data-ora foreach (var item in updFiles) { + // salvo update file item.LastCheck = adesso; localDbCtx.Entry(item).State = EntityState.Modified; } - // salvo - localDbCtx.SaveChanges(); answ = true; } diff --git a/MP.FileData/TagsUtils.cs b/MP.FileData/TagsUtils.cs index 9233efed..ec9f5817 100644 --- a/MP.FileData/TagsUtils.cs +++ b/MP.FileData/TagsUtils.cs @@ -40,6 +40,7 @@ namespace MP.FileData { List answ = new List(); string fileName = Path.GetFileName(filePath); +#if false // dal nome se richeisto estraggo... if (!currRule.OutExcludeFileName) { @@ -51,20 +52,23 @@ namespace MP.FileData // aggiungo fileName answ.Add(fileName); } +#endif // ora da path... escludo base e file... - string dirPath = filePath.Replace(fileName, "").Replace(basePath, ""); + string dirPath = filePath.Replace(basePath, ""); + // bonifico + foreach (var item in currRule.OutReplace) + { + dirPath = dirPath.Replace(item.Key, item.Value); + } // splitto per "/" var pathTags = dirPath.Split(@"\"); - foreach (var segmenti in pathTags) + foreach (var item in pathTags) { - string rawData = segmenti; - // bonifico - foreach (var item in currRule.OutReplace) + if (!string.IsNullOrWhiteSpace(item)) { - rawData = rawData.Replace(item.Key, item.Value); + // fix replace filtro + answ.Add(item); } - // fix replace filtro - answ.Add(rawData); } // se nullo --> segnalo! diff --git a/MP.Prog/Components/ArchiveStatus.razor b/MP.Prog/Components/ArchiveStatus.razor index f35e8a8b..f9dee5a1 100644 --- a/MP.Prog/Components/ArchiveStatus.razor +++ b/MP.Prog/Components/ArchiveStatus.razor @@ -49,6 +49,7 @@ + @@ -59,6 +60,14 @@ @foreach (var record in ListRecords) { + diff --git a/MP.Prog/Components/ArchiveStatus.razor.cs b/MP.Prog/Components/ArchiveStatus.razor.cs index 8ecffc3c..de841b1d 100644 --- a/MP.Prog/Components/ArchiveStatus.razor.cs +++ b/MP.Prog/Components/ArchiveStatus.razor.cs @@ -38,19 +38,25 @@ namespace MP.Prog.Components #region Private Methods - private async Task verificaTutte(int maxHour) + private async Task verificaSingola(string idxMacchina, int numDays, int numMacchine) + { + // recupero elenco macchine + percLoading += 100 / numMacchine; + numChecks = await DataService.updateMachineArchive(idxMacchina, numDays, true, false); + await Task.Delay(1); + setupMessages.Add($"{idxMacchina}: {numChecks} files"); + StateHasChanged(); + await Task.Delay(1); + } + + private async Task verificaTutte(int numDays) { // recupero elenco macchine var listaMacchine = await DataService.MacchineGetAll(); int numMacchine = listaMacchine.Count(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - percLoading += 100 / numMacchine; - numChecks = await DataService.updateMachineArchive(item.IdxMacchina, maxHour, false); - setupMessages.Add($"{item.IdxMacchina}: {numChecks} files"); - StateHasChanged(); - - await Task.Delay(1); + await verificaSingola(item.IdxMacchina, numDays, numMacchine); } } @@ -68,6 +74,16 @@ namespace MP.Prog.Components await ReloadData(); } + protected async Task ArchiveSingleCheck(string idxMacchina, int maxHour) + { + showProgress = true; + percLoading = 0; + await verificaSingola(idxMacchina, maxHour, 2); + + setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); + await ReloadData(); + } + protected async Task ClearMessage() { await Task.Delay(500); @@ -84,6 +100,16 @@ namespace MP.Prog.Components await ReloadData(); } + protected async Task ForceCheckMacchina(string idxMacchina) + { + setupMessages.Add("Inizio Analisi Archivio..."); + ListRecords = null; + await Task.Delay(1); + await ArchiveSingleCheck(idxMacchina, 0); + await ClearMessage(); + await ReloadData(); + } + protected override async Task OnInitializedAsync() { ListRecords = null; diff --git a/MP.Prog/Conf/Rule03.json b/MP.Prog/Conf/Rule03.json index c6f6a369..e7cc1892 100644 --- a/MP.Prog/Conf/Rule03.json +++ b/MP.Prog/Conf/Rule03.json @@ -5,7 +5,10 @@ "M4+A", "M4+B", "M5+A", - "M5+B" + "M5+B", + "M6+A", + "M6+B", + "+A" ], "ExcludedFileExt": [ ".xls", @@ -13,7 +16,8 @@ ".xlsx" ], "FileNameExtReplace": { - ".P-2": "" + ".P-2": "", + ".tim": "" }, "MaxChar2Search": 100, "Mode": 0, @@ -25,7 +29,7 @@ "<": " ", ">": " " }, - "RegExPattern": "\\b{{fileName}}.{0,2}\\([\\w\\d\\s./\\-=]+\\)", + "RegExPattern": "\\b{{fileName}}.{0,2}\\([\\<\\w\\d\\s./\\-=\\+\\>]+\\)", "RegExRepFileName": true, "ReplaceCR": true } \ No newline at end of file diff --git a/MP.Prog/Data/FileArchDataService.cs b/MP.Prog/Data/FileArchDataService.cs index 5335a42e..9c5ef331 100644 --- a/MP.Prog/Data/FileArchDataService.cs +++ b/MP.Prog/Data/FileArchDataService.cs @@ -292,13 +292,13 @@ namespace MP.Prog.Data /// /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite /// - public async Task updateAllArchive(int numDayPre) + public async Task updateAllArchive(int numDayPre, bool forceTag) { int checkDone = 0; var listaMacchine = await MacchineGetAll(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - checkDone += await updateMachineArchive(item.IdxMacchina, numDayPre, false); + checkDone += await updateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false); } return await Task.FromResult(checkDone); @@ -309,13 +309,15 @@ namespace MP.Prog.Data /// /// Codice macchina /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite + /// Forza la riverifica dei tags (x update da setup) + /// Scrittura log verboso macchina /// - public async Task updateMachineArchive(string idxMacchina, int numDayPre, bool fullLog) + public async Task updateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog) { int checkDone = 0; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); - string ruleName = "Rule01.json"; + string ruleName = "Rule00.json"; try { var macchina = MacchinaGetByKey(idxMacchina).Result; @@ -370,7 +372,7 @@ namespace MP.Prog.Data Log.Info($"Conf rule generato:{Environment.NewLine}{rawRule}"); } } - checkDone = dbController.CheckFileArchived(macchina.IdxMacchina, macchina.BasePath, numDayPre, "*.*", currRule); + checkDone = dbController.CheckFileArchived(macchina.IdxMacchina, macchina.BasePath, numDayPre, "*.*", forceTag, currRule); } } } diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs index 904f407d..390f6e1d 100644 --- a/MP.Prog/Pages/Archive.razor.cs +++ b/MP.Prog/Pages/Archive.razor.cs @@ -240,7 +240,7 @@ namespace MP.Prog.Pages // importante altrimenti NON mostra update UI await Task.Delay(1); //AppMService.File_Filter = SelectData.Init(5, 10); - var numCheck = await DataService.updateAllArchive(numDays); + var numCheck = await DataService.updateAllArchive(numDays, false); await ReloadAllData(); await Task.Delay(1); await RefreshDisplayLoading();
Macchina Path Modificati
+ @if (!string.IsNullOrEmpty(record.BasePath)) + { + + } + @record.Nome