新增密炼物料皮重策略功能,包括相关实体、服务、控制器及接口,支持桌面端免密CRUD操作,优化打印记录与原料入场记录的衍生字段填充逻辑,提升用户体验。
This commit is contained in:
@@ -113,18 +113,15 @@ public class WeightRecordService : IWeightRecordService, ISingletonDependency
|
||||
var filtered = ApplyFilters(source, filterBillNo, filterPlateNumber, filterInoutDirection, filterDriverName, filterMixerMaterialName);
|
||||
var total = filtered.Count;
|
||||
var records = filtered.Skip(Math.Max(0, (pageNo - 1) * pageSize)).Take(pageSize).ToList();
|
||||
// 当前页结果按本地入场记录缓存,按 BillNo 实时累计「已入场重量」(与后端口径一致)。
|
||||
// 放在分页之后做:避免对全量 source 做不必要的计算。
|
||||
FillEnteredWeightFromLocalEntries(records);
|
||||
// 当前页结果按本地入场记录缓存,按 BillNo 实时累计「已入场重量」「货物皮重」(与后端口径一致)。
|
||||
FillEntryDerivedFieldsFromLocalEntries(records);
|
||||
return new WeightRecordPageResult(records, total, pageNo, pageSize);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 给一批磅单记录批量填充「已入场重量」。
|
||||
/// 数据来源:本地 RawMaterialEntry 缓存的拆码明细字段(totalPortions / portionWeight)。
|
||||
/// 与后端 sumEnteredWeightByBillNos 同口径,确保离线场景也能正确显示。
|
||||
/// 给一批磅单记录批量填充由原料入场记录衍生的 transient 字段。
|
||||
/// </summary>
|
||||
private void FillEnteredWeightFromLocalEntries(List<MesXslWeightRecord> records)
|
||||
private void FillEntryDerivedFieldsFromLocalEntries(List<MesXslWeightRecord> records)
|
||||
{
|
||||
if (records.Count == 0)
|
||||
{
|
||||
@@ -137,22 +134,38 @@ public class WeightRecordService : IWeightRecordService, ISingletonDependency
|
||||
.ToList();
|
||||
if (billNos.Count == 0)
|
||||
{
|
||||
// 全部磅单都没有 BillNo:保留服务端返回值(若有),避免无端置 0。
|
||||
foreach (var r in records)
|
||||
{
|
||||
ApplyRawMaterialWeight(r);
|
||||
}
|
||||
return;
|
||||
}
|
||||
var entries = _rawMaterialEntryService.GetCachedSnapshot();
|
||||
var sumMap = EnteredWeightCalculator.SumByBillNos(entries, billNos!);
|
||||
var enteredMap = EnteredWeightCalculator.SumByBillNos(entries, billNos!);
|
||||
var cargoTareMap = CargoTareWeightCalculator.SumByBillNos(entries, billNos!);
|
||||
foreach (var r in records)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(r.BillNo))
|
||||
{
|
||||
r.EnteredWeight = 0d;
|
||||
r.CargoTareWeight = 0d;
|
||||
ApplyRawMaterialWeight(r);
|
||||
continue;
|
||||
}
|
||||
r.EnteredWeight = sumMap.TryGetValue(r.BillNo, out var v) ? v : 0d;
|
||||
r.EnteredWeight = enteredMap.TryGetValue(r.BillNo, out var entered) ? entered : 0d;
|
||||
r.CargoTareWeight = cargoTareMap.TryGetValue(r.BillNo, out var cargoTare) ? cargoTare : 0d;
|
||||
ApplyRawMaterialWeight(r);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>原料重量 = 净重 - 货物皮重(不落库)</summary>
|
||||
private static void ApplyRawMaterialWeight(MesXslWeightRecord record)
|
||||
{
|
||||
record.RawMaterialWeight = record.NetWeight.HasValue
|
||||
? record.NetWeight.Value - (record.CargoTareWeight ?? 0d)
|
||||
: null;
|
||||
}
|
||||
|
||||
public async Task<MesXslWeightRecord?> GetByIdAsync(string id, CancellationToken ct = default)
|
||||
{
|
||||
MesXslWeightRecord? record = null;
|
||||
@@ -190,7 +203,7 @@ public class WeightRecordService : IWeightRecordService, ISingletonDependency
|
||||
|
||||
if (record != null)
|
||||
{
|
||||
FillEnteredWeightFromLocalEntries(new List<MesXslWeightRecord> { record });
|
||||
FillEntryDerivedFieldsFromLocalEntries(new List<MesXslWeightRecord> { record });
|
||||
}
|
||||
return record;
|
||||
}
|
||||
@@ -725,8 +738,10 @@ public class WeightRecordService : IWeightRecordService, ISingletonDependency
|
||||
GrossWeight = input.GrossWeight,
|
||||
TareWeight = input.TareWeight,
|
||||
NetWeight = input.NetWeight,
|
||||
// 「已入场重量」由实时聚合写入,Clone 也要原样传递,避免本地缓存 / Pending 重放后被抹掉
|
||||
// transient 聚合字段:Clone 原样传递,避免本地缓存 / Pending 重放后被抹掉
|
||||
EnteredWeight = input.EnteredWeight,
|
||||
CargoTareWeight = input.CargoTareWeight,
|
||||
RawMaterialWeight = input.RawMaterialWeight,
|
||||
DriverName = input.DriverName,
|
||||
DriverPhone = input.DriverPhone,
|
||||
BillType = input.BillType,
|
||||
|
||||
Reference in New Issue
Block a user