BaseCalculation Engine

This commit is contained in:
Michał Zieliski
2024-05-24 20:38:32 +02:00
parent 25cf75e883
commit 7e084b4af2
5 changed files with 252 additions and 5 deletions

View File

@@ -1,6 +1,7 @@
using DiunaBIWebAPI.dataProcessors;
using Google.Apis.Sheets.v4;
using Microsoft.EntityFrameworkCore;
using WebAPI.Calculator;
using WebAPI.Controllers;
using WebAPI.Models;
@@ -11,15 +12,18 @@ namespace WebAPI.dataProcessors
private readonly AppDbContext db;
private readonly SpreadsheetsResource.ValuesResource googleSheetValues;
private readonly LayersController controller;
private readonly LogsController logsController;
public T3MultiSourceSummaryProcessor(
AppDbContext _db,
SpreadsheetsResource.ValuesResource _googleSheetValues,
LayersController _controller)
LayersController _controller,
LogsController _logsController)
{
db = _db;
googleSheetValues = _googleSheetValues;
controller = _controller;
logsController = _logsController;
}
public void process(Layer processWorker)
@@ -105,6 +109,71 @@ namespace WebAPI.dataProcessors
}
newRecords.Add(processedRecord);
}
// Dynamic Codes
List<Record>? dynamicCodes = processWorker.Records?.Where(x => x.Code == "DynamicCode").ToList();
if (dynamicCodes != null && dynamicCodes.Any())
{
foreach (Record dynamicCode in dynamicCodes)
{
try
{
if (dynamicCode.Desc1 == null)
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Formula in Record {dynamicCode.Id} is missing.",
CreatedAt = DateTime.UtcNow
});
continue;
}
BaseCalc calc = new BaseCalc(dynamicCode.Desc1);
if (!calc.IsFormulaCorrect())
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Formula {calc.Expresion} in Record {dynamicCode.Id} is not correct",
CreatedAt = DateTime.UtcNow
});
continue;
}
try
{
newRecords.Add(calc.CalculateT3(newRecords));
}
catch (Exception e)
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Formula {calc.Expresion} in Record {dynamicCode.Id} error: {e.Message}",
CreatedAt = DateTime.UtcNow
});
}
}
catch (Exception e)
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Calculation error {dynamicCode.Id}: {e.Message} ",
CreatedAt = DateTime.UtcNow
});
}
}
}
if (isNew)
{

View File

@@ -1,6 +1,7 @@
using DiunaBIWebAPI.dataProcessors;
using Google.Apis.Sheets.v4;
using Microsoft.EntityFrameworkCore;
using WebAPI.Calculator;
using WebAPI.Controllers;
using WebAPI.Models;
@@ -11,15 +12,18 @@ namespace WebAPI.dataProcessors
private readonly AppDbContext db;
private readonly SpreadsheetsResource.ValuesResource googleSheetValues;
private readonly LayersController controller;
private readonly LogsController logsController;
public T3MultiSourceYearSummaryProcessor(
AppDbContext _db,
SpreadsheetsResource.ValuesResource _googleSheetValues,
LayersController _controller)
LayersController _controller,
LogsController _logsController)
{
db = _db;
googleSheetValues = _googleSheetValues;
controller = _controller;
logsController = _logsController;
}
public void process(Layer processWorker)
@@ -140,8 +144,73 @@ namespace WebAPI.dataProcessors
}
}
newRecords.Add(processedRecord);
}
}
// Dynamic Codes
List<Record>? dynamicCodes = processWorker.Records?.Where(x => x.Code == "DynamicCode").ToList();
if (dynamicCodes != null && dynamicCodes.Any())
{
foreach (Record dynamicCode in dynamicCodes)
{
try
{
if (dynamicCode.Desc1 == null)
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Formula in Record {dynamicCode.Id} is missing.",
CreatedAt = DateTime.UtcNow
});
continue;
}
BaseCalc calc = new BaseCalc(dynamicCode.Desc1);
if (!calc.IsFormulaCorrect())
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Formula {calc.Expresion} in Record {dynamicCode.Id} is not correct",
CreatedAt = DateTime.UtcNow
});
continue;
}
try
{
newRecords.Add(calc.CalculateT3(newRecords));
}
catch (Exception e)
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Formula {calc.Expresion} in Record {dynamicCode.Id} error: {e.Message}",
CreatedAt = DateTime.UtcNow
});
}
}
catch (Exception e)
{
logsController.AddEntry(new LogEntry
{
Title = $"{processWorker!.Name}, {processWorker.Id}",
Type = LogEntryType.warning,
LogType = LogType.process,
Message = $"Calculation error {dynamicCode.Id}: {e.Message} ",
CreatedAt = DateTime.UtcNow
});
}
}
}
if (isNew)
{
db.Layers.Add(processedLayer);