50 lines
1.5 KiB
C#
50 lines
1.5 KiB
C#
using YY.Admin.Core.Entity;
|
||
|
||
namespace YY.Admin.Core.Util;
|
||
|
||
/// <summary>
|
||
/// 「货物皮重」桌面端本地累计计算器。
|
||
/// 与后端 IMesXslRawMaterialEntryService.sumCargoTareByBillNos 保持同一口径:
|
||
/// 同一榜单(BillNo)下所有原料入场记录的 PalletTareTotal(托盘及皮重合计)累加。
|
||
/// </summary>
|
||
public static class CargoTareWeightCalculator
|
||
{
|
||
/// <summary>按 BillNo 分组累计「货物皮重」。</summary>
|
||
public static Dictionary<string, double> SumByBillNos(
|
||
IEnumerable<MesXslRawMaterialEntry> entries,
|
||
IEnumerable<string?> billNos)
|
||
{
|
||
var keys = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||
foreach (var b in billNos)
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(b)) keys.Add(b!);
|
||
}
|
||
var result = new Dictionary<string, double>(StringComparer.OrdinalIgnoreCase);
|
||
if (keys.Count == 0)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
foreach (var e in entries)
|
||
{
|
||
if (string.IsNullOrWhiteSpace(e.BillNo) || !keys.Contains(e.BillNo!))
|
||
{
|
||
continue;
|
||
}
|
||
if (e.PalletTareTotal is not { } tare || tare == 0d)
|
||
{
|
||
continue;
|
||
}
|
||
if (result.TryGetValue(e.BillNo!, out var acc))
|
||
{
|
||
result[e.BillNo!] = acc + tare;
|
||
}
|
||
else
|
||
{
|
||
result[e.BillNo!] = tare;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
}
|