Files
C4IT-F4SD-Client/FasdCockpitCommunicationDemo/cF4SDHealthCardJsonRawData.cs
2025-11-11 11:03:42 +01:00

154 lines
5.8 KiB
C#

using FasdCockpitCommunicationDemo;
using System;
using System.Collections.Generic;
using System.Reflection;
using static C4IT.Logging.cLogManager;
namespace C4IT.FASD.Base
{
public class cF4SDHealthCardJsonRawData
{
public class cHealthCardTableColumn
{
public string ColumnName { get; set; }
public object[] Values { get; set; }
}
public class cHealthCardTable
{
public string Name { get; set; }
public bool IsStatic { get; set; }
public DateTime[,] TimeFrames { get; set; }
public cHealthCardTableColumn[] Columns { get; set; }
}
public Guid SampleDataId { get; set; }
public string SampleDataName { get; set; }
public cHealthCardTable[] Tables { get; set; }
public List<cF4SDHealthCardRawData.cHealthCardDetailsTable> DetailsTables { get; set; }
public List<cF4SDTicket> Tickets { get; set; } = new List<cF4SDTicket>();
public cF4SDHealthCardRawData GetHealthCardData()
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
var output = new cF4SDHealthCardRawData() { Tables = new Dictionary<string, cF4SDHealthCardRawData.cHealthCardTable>() };
try
{
foreach (var table in Tables)
{
if (output.Tables.ContainsKey(table.Name))
continue;
var tableColumns = new Dictionary<string, cF4SDHealthCardRawData.cHealthCardTableColumn>();
foreach (var column in table.Columns)
{
if (tableColumns.ContainsKey(column.ColumnName))
continue;
var values = new List<object>();
values.AddRange(column.Values);
tableColumns.Add(column.ColumnName, new cF4SDHealthCardRawData.cHealthCardTableColumn() { ColumnName = column.ColumnName, Values = values });
}
output.Tables.Add(table.Name, new cF4SDHealthCardRawData.cHealthCardTable()
{
Name = table.Name,
IsStatic = table.IsStatic,
TimeFrames = table.TimeFrames,
Columns = tableColumns
});
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return output;
}
public static cF4SDHealthCardJsonRawData GetHealthCardJsonRawData(cF4SDHealthCardRawData rawData) // simplifies process for excel converter
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
var output = new cF4SDHealthCardJsonRawData();
try
{
output.Tables = new cHealthCardTable[rawData.Tables.Count];
for (int i = 0; i < output.Tables.Length; i++)
{
output.Tables[i] = new cHealthCardTable();
}
var outputTableEnumerator = output.Tables.GetEnumerator();
foreach (var table in rawData.Tables)
{
if (!outputTableEnumerator.MoveNext())
continue;
var outputTable = outputTableEnumerator.Current as cHealthCardTable;
outputTable.Name = table.Key;
int tableValueColumnsCount = table.Value.Columns.Count;
outputTable.Columns = new cHealthCardTableColumn[tableValueColumnsCount];
for (int i = 0; i < outputTable.Columns.Length; i++)
{
outputTable.Columns[i] = new cHealthCardTableColumn();
}
var outputTableColumnsEnumerator = outputTable.Columns.GetEnumerator();
int maxValueCount = 1;
foreach (var column in table.Value.Columns)
{
if (!outputTableColumnsEnumerator.MoveNext())
continue;
var outputTableColumn = outputTableColumnsEnumerator.Current as cHealthCardTableColumn;
outputTableColumn.ColumnName = column.Key;
outputTableColumn.Values = column.Value.Values.ToArray();
int? outputTableColumnValuesCount = outputTableColumn.Values?.Length;
if (outputTableColumnValuesCount != null)
maxValueCount = Math.Max(maxValueCount, outputTableColumnValuesCount.Value);
}
if (maxValueCount == 1)
outputTable.IsStatic = true;
outputTable.TimeFrames = new DateTime[maxValueCount, 2];
outputTable.TimeFrames[0, 0] = DateTime.UtcNow;
outputTable.TimeFrames[0, 1] = DateTime.UtcNow.Date;
for (int i = 1; i < outputTable.TimeFrames.GetLength(0); i++)
{
outputTable.TimeFrames[i, 0] = DateTime.UtcNow.Date.AddDays(-i);
outputTable.TimeFrames[i, 1] = DateTime.UtcNow.Date.AddDays(-i - 1);
}
}
}
catch (Exception E)
{
LogException(E);
}
finally
{
LogMethodEnd(CM);
}
return output;
}
}
}