Import chip virgens tables side by side

This commit is contained in:
Eduardo Lopes 2026-01-28 10:05:44 -03:00
parent b07b1d2cd7
commit f14059dd2c
1 changed files with 58 additions and 28 deletions

View File

@ -1360,45 +1360,60 @@ namespace line_gestao_api.Controllers
for (int i = 0; i < headers.Count; i++) for (int i = 0; i < headers.Count; i++)
{ {
var headerRow = headers[i]; var headerRow = headers[i];
var map = BuildHeaderMap(headerRow); var itemColumns = headerRow.CellsUsed()
int colItem = GetCol(map, "ITEM"); .Where(c => NormalizeHeader(c.GetString()) == "ITEM")
if (colItem == 0) continue; .Select(c => c.Address.ColumnNumber)
.OrderBy(c => c)
.ToList();
if (itemColumns.Count == 0) continue;
var startRow = headerRow.RowNumber() + 1; var startRow = headerRow.RowNumber() + 1;
var endRow = i + 1 < headers.Count ? headers[i + 1].RowNumber() - 1 : lastRow; var endRow = i + 1 < headers.Count ? headers[i + 1].RowNumber() - 1 : lastRow;
for (int r = startRow; r <= endRow; r++) for (int tableIndex = 0; tableIndex < itemColumns.Count; tableIndex++)
{ {
var itemStr = GetCellString(ws, r, colItem); var startCol = itemColumns[tableIndex];
if (string.IsNullOrWhiteSpace(itemStr)) continue; var endCol = tableIndex + 1 < itemColumns.Count
? itemColumns[tableIndex + 1] - 1
: headerRow.LastCellUsed()?.Address.ColumnNumber ?? startCol;
var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map, var map = BuildHeaderMapRange(headerRow, startCol, endCol);
"Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP", "N° DO CHIP")); int colItem = GetCol(map, "ITEM");
var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS"); if (colItem == 0) continue;
if (string.IsNullOrWhiteSpace(numeroChip) && string.IsNullOrWhiteSpace(observacoes))
for (int r = startRow; r <= endRow; r++)
{ {
continue; var itemStr = GetCellString(ws, r, colItem);
} if (string.IsNullOrWhiteSpace(itemStr)) continue;
var now = DateTime.UtcNow; var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map,
"Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP"));
var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS");
if (string.IsNullOrWhiteSpace(numeroChip) && string.IsNullOrWhiteSpace(observacoes))
{
continue;
}
var e = new ChipVirgemLine var now = DateTime.UtcNow;
{
Id = Guid.NewGuid(),
Item = TryInt(itemStr),
NumeroDoChip = numeroChip,
Observacoes = string.IsNullOrWhiteSpace(observacoes) ? null : observacoes.Trim(),
CreatedAt = now,
UpdatedAt = now
};
buffer.Add(e); var e = new ChipVirgemLine
{
Id = Guid.NewGuid(),
Item = TryInt(itemStr),
NumeroDoChip = numeroChip,
Observacoes = string.IsNullOrWhiteSpace(observacoes) ? null : observacoes.Trim(),
CreatedAt = now,
UpdatedAt = now
};
if (buffer.Count >= 500) buffer.Add(e);
{
await _db.ChipVirgemLines.AddRangeAsync(buffer); if (buffer.Count >= 500)
await _db.SaveChangesAsync(); {
buffer.Clear(); await _db.ChipVirgemLines.AddRangeAsync(buffer);
await _db.SaveChangesAsync();
buffer.Clear();
}
} }
} }
} }
@ -1632,6 +1647,21 @@ namespace line_gestao_api.Controllers
return map; return map;
} }
private static Dictionary<string, int> BuildHeaderMapRange(IXLRow headerRow, int startCol, int endCol)
{
var map = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
foreach (var cell in headerRow.CellsUsed())
{
var col = cell.Address.ColumnNumber;
if (col < startCol || col > endCol) continue;
var k = NormalizeHeader(cell.GetString());
if (!string.IsNullOrWhiteSpace(k) && !map.ContainsKey(k))
map[k] = col;
}
return map;
}
private static DateTime? ToUtc(DateTime? dt) private static DateTime? ToUtc(DateTime? dt)
{ {
if (dt == null) return null; if (dt == null) return null;