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;
|
|||
|
|
}
|
|||
|
|
}
|