Update datamodel

This commit is contained in:
Samuele Locatelli
2021-09-07 13:28:06 +02:00
parent e5d6f579f4
commit 98b9a83491
6 changed files with 104 additions and 32 deletions
+99 -26
View File
@@ -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<FileModel> 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<DatabaseModels.FileModel> FileGetFilt(string IdxMacchina, string CodArticolo, bool OnlyMod, string SearchVal = "")
public List<DatabaseModels.FileModel> FileGetFilt(string IdxMacchina, string CodArticolo, bool OnlyActive, bool OnlyMod, string SearchVal = "")
{
List<DatabaseModels.FileModel> dbResult = new List<DatabaseModels.FileModel>();
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;
}
/// <summary>
/// effettua inserimento di un record in archivio come NUOVO documento tracciato
/// Effettua inserimento di un elenco di record in archivio come NUOVO documento tracciato
/// </summary>
/// <param name="idxMacchina"></param>
/// <param name="newFiles"></param>
/// <param name="rev"></param>
/// <returns></returns>
public bool FileInsert(string idxMacchina, List<FileInfo> newFiles)
public bool FileInsert(string idxMacchina, List<FileInfo> 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<FileInfo> listUpdate = new List<FileInfo>();
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;
}
/// <summary>
/// Aggiorna un Ordine
/// </summary>
@@ -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<DatabaseModels.FileModel> newRec = updFiles.Select(o => new DatabaseModels.FileModel()
{
Active = true,
DiskState = FileState.Changed,
DiskStatus = FileState.Changed,
CodArticolo = "ND",
FileContent = File.ReadAllBytes(o.FullName),
IdxMacchina = idxMacchina,