Import multiple chip virgens tables

This commit is contained in:
Eduardo Lopes 2026-01-28 09:32:05 -03:00
parent c9d8bdfda6
commit cd1066f203
1 changed files with 57 additions and 31 deletions

View File

@ -1346,48 +1346,56 @@ namespace line_gestao_api.Controllers
if (ws == null) return; if (ws == null) return;
var headerRow = ws.RowsUsed().FirstOrDefault(r => r.CellsUsed().Any(c => NormalizeHeader(c.GetString()) == "ITEM")); var headers = ws.RowsUsed()
if (headerRow == null) return; .Where(IsChipsVirgensHeader)
.OrderBy(r => r.RowNumber())
var map = BuildHeaderMap(headerRow); .ToList();
int colItem = GetCol(map, "ITEM"); if (headers.Count == 0) return;
if (colItem == 0) return;
var startRow = headerRow.RowNumber() + 1;
var lastRow = ws.LastRowUsed()?.RowNumber() ?? startRow;
await _db.ChipVirgemLines.ExecuteDeleteAsync(); await _db.ChipVirgemLines.ExecuteDeleteAsync();
var buffer = new List<ChipVirgemLine>(500); var buffer = new List<ChipVirgemLine>(500);
var lastRow = ws.LastRowUsed()?.RowNumber() ?? 1;
for (int r = startRow; r <= lastRow; r++) for (int i = 0; i < headers.Count; i++)
{ {
var itemStr = GetCellString(ws, r, colItem); var headerRow = headers[i];
if (string.IsNullOrWhiteSpace(itemStr)) break; var map = BuildHeaderMap(headerRow);
int colItem = GetCol(map, "ITEM");
if (colItem == 0) continue;
var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map, var startRow = headerRow.RowNumber() + 1;
"Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP")); var endRow = i + 1 < headers.Count ? headers[i + 1].RowNumber() - 1 : lastRow;
var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS");
var now = DateTime.UtcNow; for (int r = startRow; r <= endRow; r++)
var e = new ChipVirgemLine
{ {
Id = Guid.NewGuid(), var itemStr = GetCellString(ws, r, colItem);
Item = TryInt(itemStr), if (string.IsNullOrWhiteSpace(itemStr)) continue;
NumeroDoChip = numeroChip,
Observacoes = string.IsNullOrWhiteSpace(observacoes) ? null : observacoes.Trim(),
CreatedAt = now,
UpdatedAt = now
};
buffer.Add(e); 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 (buffer.Count >= 500) var now = DateTime.UtcNow;
{
await _db.ChipVirgemLines.AddRangeAsync(buffer); var e = new ChipVirgemLine
await _db.SaveChangesAsync(); {
buffer.Clear(); Id = Guid.NewGuid(),
Item = TryInt(itemStr),
NumeroDoChip = numeroChip,
Observacoes = string.IsNullOrWhiteSpace(observacoes) ? null : observacoes.Trim(),
CreatedAt = now,
UpdatedAt = now
};
buffer.Add(e);
if (buffer.Count >= 500)
{
await _db.ChipVirgemLines.AddRangeAsync(buffer);
await _db.SaveChangesAsync();
buffer.Clear();
}
} }
} }
@ -1590,6 +1598,24 @@ namespace line_gestao_api.Controllers
return false; return false;
} }
private static bool IsChipsVirgensHeader(IXLRow row)
{
var hasItem = false;
var hasNumeroChip = false;
foreach (var cell in row.CellsUsed())
{
var k = NormalizeHeader(cell.GetString());
if (k == "ITEM") hasItem = true;
if (k == "NODOCHIP" || k == "NUMERODOCHIP" || k == "NDOCHIP" || k == "NUMDOCHIP")
{
hasNumeroChip = true;
}
}
return hasItem && hasNumeroChip;
}
// ========================================================== // ==========================================================
// HELPERS (SEUS) // HELPERS (SEUS)
// ========================================================== // ==========================================================