059895d1c3
- Чтение СПРАВКИ из Excel (ClosedXML), поддержка нескольких файлов - Группировка по ТН ВЭД: схлопывание строк с суммированием кол-ва/веса/суммы - Автоназначение кодов деклараций по справочнику ТН ВЭД (87 пар) - Цветовая маркировка: зелёный/жёлтый/красный по уровню уверенности - Самообучение: ручной выбор кода сохраняется в tnved_codes.json - Формирование Лист3 с разворачиванием строк по рег. номерам (ключевая функция) - Экспорт Лист2 + Лист3 в Excel
59 lines
1.9 KiB
C#
59 lines
1.9 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using DeclarationAutomatization.Models;
|
|
|
|
namespace DeclarationAutomatization.Services;
|
|
|
|
public class Sheet3ExpandService
|
|
{
|
|
// Строит строки Листа3, разворачивая позиции по регистрационным номерам.
|
|
// Группировка по ТН ВЭД: все рег. номера с таким же ТН ВЭД из СПРАВКИ.
|
|
public List<Sheet3Row> Expand(
|
|
IEnumerable<DeclarationItem> declarationItems,
|
|
IEnumerable<SpravkaItem> allSpravkaItems)
|
|
{
|
|
// Индекс: ТнВэд → уникальные (РегНомер, Дата)
|
|
var regByTnVed = allSpravkaItems
|
|
.Where(s => !string.IsNullOrWhiteSpace(s.RegNumber))
|
|
.GroupBy(s => s.TnVed)
|
|
.ToDictionary(
|
|
g => g.Key,
|
|
g => g
|
|
.Select(s => (s.RegNumber, s.RegDate))
|
|
.Distinct()
|
|
.ToList()
|
|
);
|
|
|
|
var result = new List<Sheet3Row>();
|
|
|
|
foreach (var item in declarationItems)
|
|
{
|
|
if (regByTnVed.TryGetValue(item.TnVed, out var regPairs) && regPairs.Count > 0)
|
|
{
|
|
foreach (var (regNum, regDate) in regPairs)
|
|
{
|
|
result.Add(new Sheet3Row
|
|
{
|
|
SequentialNumber = item.SequentialNumber,
|
|
ClassifierCode = "09035",
|
|
RegNumber = regNum,
|
|
RegDate = regDate,
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
result.Add(new Sheet3Row
|
|
{
|
|
SequentialNumber = item.SequentialNumber,
|
|
ClassifierCode = "09035",
|
|
RegNumber = "",
|
|
RegDate = "",
|
|
});
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|