using YY.Admin.Core.Entity; namespace YY.Admin.Core.Util; /// /// 「货物皮重」桌面端本地累计计算器。 /// 与后端 IMesXslRawMaterialEntryService.sumCargoTareByBillNos 保持同一口径: /// 同一榜单(BillNo)下所有原料入场记录的 PalletTareTotal(托盘及皮重合计)累加。 /// public static class CargoTareWeightCalculator { /// 按 BillNo 分组累计「货物皮重」。 public static Dictionary SumByBillNos( IEnumerable entries, IEnumerable billNos) { var keys = new HashSet(StringComparer.OrdinalIgnoreCase); foreach (var b in billNos) { if (!string.IsNullOrWhiteSpace(b)) keys.Add(b!); } var result = new Dictionary(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; } }