From 98b9a834913fe9e49c9f28e8f56ba875f687349c Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 7 Sep 2021 13:28:06 +0200 Subject: [PATCH] Update datamodel --- MP.FileData/Controllers/FileController.cs | 125 ++++++++++++++---- MP.FileData/DatabaseModels/FileModel.cs | 2 +- MP.FileData/Enum.cs | 1 - ...r.cs => 20210907103215_InitDb.Designer.cs} | 4 +- ...115_InitDb.cs => 20210907103215_InitDb.cs} | 2 +- .../MoonPro_ProgContextModelSnapshot.cs | 2 +- 6 files changed, 104 insertions(+), 32 deletions(-) rename MP.FileData/Migrations/{20210907100115_InitDb.Designer.cs => 20210907103215_InitDb.Designer.cs} (98%) rename MP.FileData/Migrations/{20210907100115_InitDb.cs => 20210907103215_InitDb.cs} (98%) diff --git a/MP.FileData/Controllers/FileController.cs b/MP.FileData/Controllers/FileController.cs index 9ff7ef26..f06561ae 100644 --- a/MP.FileData/Controllers/FileController.cs +++ b/MP.FileData/Controllers/FileController.cs @@ -86,25 +86,34 @@ namespace MP.FileData.Controllers // recupera elenco file nel DB var archivedFile = FileGetByPath(path, true); - - // verifica i file - foreach (var file in fileList) + using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) { - // cerca nel DB... - var currRecord = archivedFile - .Where(x => x.Path == file.FullName) - .FirstOrDefault(); - // se NON trova lo crea - if (currRecord == null) + // verifica i file + foreach (var file in fileList) { - fileNew.Add(file); - } - else - { - // verifico se data modifica e dimensione siano cambiati... - if (currRecord.LastMod != file.LastWriteTime || currRecord.Size != file.Length) + // cerca nel DB... + var currRecord = archivedFile + .Where(x => x.Path == file.FullName) + .FirstOrDefault(); + // se NON trova lo crea + if (currRecord == null) { - fileMod.Add(file); + fileNew.Add(file); + } + else + { + // verifico se data modifica sia cambiata... + if (currRecord.LastMod != file.LastWriteTime) + { + // calcolo e verifico MD5 + var fileContent = File.ReadAllBytes(file.FullName); + var hash = md5.ComputeHash(fileContent); + var newMD5 = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); + if (newMD5 != currRecord.MD5) + { + fileMod.Add(file); + } + } } } } @@ -112,7 +121,7 @@ namespace MP.FileData.Controllers // salvo i NUOVI file if (fileNew != null && fileNew.Count > 0) { - FileInsert(idxMacchina, fileNew); + FileInsert(idxMacchina, fileNew, 0); } // aggiorno i file modificati if (fileMod != null && fileMod.Count > 0) @@ -166,6 +175,22 @@ namespace MP.FileData.Controllers return done; } + public bool FileDiskStatusChange(List updFiles, FileState newStatus) + { + bool done = false; + using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) + { + foreach (var item in updFiles) + { + item.DiskStatus = newStatus; + localDbCtx.Entry(item).State = EntityState.Modified; + } + localDbCtx.SaveChanges(); + done = true; + } + return done; + } + public FileModel FileGetByKey(int FileId) { FileModel thisFile = null; @@ -193,7 +218,7 @@ namespace MP.FileData.Controllers return dbResult; } - public List FileGetFilt(string IdxMacchina, string CodArticolo, bool OnlyMod, string SearchVal = "") + public List FileGetFilt(string IdxMacchina, string CodArticolo, bool OnlyActive, bool OnlyMod, string SearchVal = "") { List dbResult = new List(); using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) @@ -202,20 +227,21 @@ namespace MP.FileData.Controllers .DbSetProgFile .Include(m => m.Macchina) .Include(a => a.Articolo) - .Where(x => ((x.IdxMacchina == IdxMacchina || IdxMacchina == "0") && (x.CodArticolo == CodArticolo || CodArticolo == "ND" || CodArticolo.StartsWith("##") || string.IsNullOrEmpty(CodArticolo))) && (x.Name.Contains(SearchVal) || string.IsNullOrEmpty(SearchVal)) && (!OnlyMod || x.DiskState != FileState.Unchanged)) - .OrderBy(x => x.Name) + .Where(x => (x.IdxMacchina == IdxMacchina || IdxMacchina == "0") && (x.Active == OnlyActive || !OnlyActive) && (!OnlyMod || x.DiskStatus != FileState.Unchanged) && (x.Name.Contains(SearchVal) || string.IsNullOrEmpty(SearchVal))) + .OrderByDescending(x => x.LastMod) .ToList(); } return dbResult; } /// - /// effettua inserimento di un record in archivio come NUOVO documento tracciato + /// Effettua inserimento di un elenco di record in archivio come NUOVO documento tracciato /// /// /// + /// /// - public bool FileInsert(string idxMacchina, List newFiles) + public bool FileInsert(string idxMacchina, List newFiles, int rev) { bool answ = false; DateTime adesso = DateTime.Now; @@ -229,14 +255,14 @@ namespace MP.FileData.Controllers { Active = true, CodArticolo = "ND", - DiskState = FileState.New, + DiskStatus = FileState.Unchanged, IdxMacchina = idxMacchina, LastCheck = adesso, LastMod = o.LastWriteTime, MimeType = o.Extension, Name = o.Name, Path = o.FullName, - Rev = 0, + Rev = rev, Size = o.Length, FileContent = File.ReadAllBytes(o.FullName) }).ToList(); @@ -261,6 +287,53 @@ namespace MP.FileData.Controllers return answ; } + public bool FileModApprove(FileModel currFile) + { + bool done = false; + List listUpdate = new List(); + using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) + { + // rileggo dati file... + var newFileInfo = new FileInfo(currFile.Path); + listUpdate.Add(newFileInfo); + + // inserisco come REVISIONE + FileInsert(currFile.IdxMacchina, listUpdate, currFile.Rev + 1); + + // archivio vecchio file + currFile.Active = false; + currFile.DiskStatus = FileState.Unchanged; + localDbCtx.Entry(currFile).State = EntityState.Modified; + // salvo DB + localDbCtx.SaveChanges(); + + done = true; + } + return done; + } + + public bool FileModReject(FileModel currFile) + { + bool done = false; + using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) + { + // sovrascrivo il file su disco + File.WriteAllBytes(currFile.Path, currFile.FileContent); + + // rileggo file... + var newFileInfo = new FileInfo(currFile.Path); + + // aggiorno stato del file a unchanged e data mod ad ora... + currFile.DiskStatus = FileState.Unchanged; + currFile.LastMod = newFileInfo.LastWriteTime; + + // salvo DB + localDbCtx.SaveChanges(); + done = true; + } + return done; + } + /// /// Aggiorna un Ordine /// @@ -280,7 +353,7 @@ namespace MP.FileData.Controllers .FirstOrDefault(); if (currData != null) { - updItem.DiskState = FileState.Changed; + updItem.DiskStatus = FileState.Changed; localDbCtx.Entry(updItem).State = EntityState.Modified; localDbCtx.SaveChanges(); } @@ -377,7 +450,7 @@ namespace MP.FileData.Controllers List newRec = updFiles.Select(o => new DatabaseModels.FileModel() { Active = true, - DiskState = FileState.Changed, + DiskStatus = FileState.Changed, CodArticolo = "ND", FileContent = File.ReadAllBytes(o.FullName), IdxMacchina = idxMacchina, diff --git a/MP.FileData/DatabaseModels/FileModel.cs b/MP.FileData/DatabaseModels/FileModel.cs index 1ba32544..32f645ab 100644 --- a/MP.FileData/DatabaseModels/FileModel.cs +++ b/MP.FileData/DatabaseModels/FileModel.cs @@ -31,7 +31,7 @@ namespace MP.FileData.DatabaseModels public string Path { get; set; } = ""; public string MimeType { get; set; } = ""; public string MD5 { get; set; } = ""; - public FileState DiskState { get; set; } = FileState.New; + public FileState DiskStatus { get; set; } = FileState.Unchanged; public DateTime LastCheck { get; set; } = DateTime.Now.AddYears(-1); public byte[] FileContent { get; set; } diff --git a/MP.FileData/Enum.cs b/MP.FileData/Enum.cs index a514cd02..c4104772 100644 --- a/MP.FileData/Enum.cs +++ b/MP.FileData/Enum.cs @@ -12,7 +12,6 @@ namespace MP.FileData public enum FileState { ND = 0, - New, Changed, Deleted, Unchanged diff --git a/MP.FileData/Migrations/20210907100115_InitDb.Designer.cs b/MP.FileData/Migrations/20210907103215_InitDb.Designer.cs similarity index 98% rename from MP.FileData/Migrations/20210907100115_InitDb.Designer.cs rename to MP.FileData/Migrations/20210907103215_InitDb.Designer.cs index 4886b82e..eca66e12 100644 --- a/MP.FileData/Migrations/20210907100115_InitDb.Designer.cs +++ b/MP.FileData/Migrations/20210907103215_InitDb.Designer.cs @@ -10,7 +10,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace MP.FileData.Migrations { [DbContext(typeof(MoonPro_ProgContext))] - [Migration("20210907100115_InitDb")] + [Migration("20210907103215_InitDb")] partial class InitDb { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -78,7 +78,7 @@ namespace MP.FileData.Migrations b.Property("CodArticolo") .HasColumnType("nvarchar(450)"); - b.Property("DiskState") + b.Property("DiskStatus") .HasColumnType("int"); b.Property("FileContent") diff --git a/MP.FileData/Migrations/20210907100115_InitDb.cs b/MP.FileData/Migrations/20210907103215_InitDb.cs similarity index 98% rename from MP.FileData/Migrations/20210907100115_InitDb.cs rename to MP.FileData/Migrations/20210907103215_InitDb.cs index 3c346aac..4ab48e1b 100644 --- a/MP.FileData/Migrations/20210907100115_InitDb.cs +++ b/MP.FileData/Migrations/20210907103215_InitDb.cs @@ -66,7 +66,7 @@ namespace MP.FileData.Migrations Path = table.Column(type: "nvarchar(max)", nullable: true), MimeType = table.Column(type: "nvarchar(max)", nullable: true), MD5 = table.Column(type: "nvarchar(max)", nullable: true), - DiskState = table.Column(type: "int", nullable: false), + DiskStatus = table.Column(type: "int", nullable: false), LastCheck = table.Column(type: "datetime2", nullable: false), FileContent = table.Column(type: "varbinary(max)", nullable: true) }, diff --git a/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs b/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs index 3ab6f202..1be4c878 100644 --- a/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs +++ b/MP.FileData/Migrations/MoonPro_ProgContextModelSnapshot.cs @@ -76,7 +76,7 @@ namespace MP.FileData.Migrations b.Property("CodArticolo") .HasColumnType("nvarchar(450)"); - b.Property("DiskState") + b.Property("DiskStatus") .HasColumnType("int"); b.Property("FileContent")