MdpIqcReceiptStateLoader.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.L1;
  2. using SqlSugar;
  3. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.L0;
  4. /// <summary>
  5. /// L0 生产 loader:实现 <see cref="IIqcReceiptStateLoader"/>,从标准层 <see cref="IIqcReceiptStdReader"/>
  6. /// 组装 <see cref="IqcReceiptState"/>。**只读 mdp_std**,不直连源库/旧表。
  7. ///
  8. /// 计算口径(B6:由事实读时计算,不存易过期布尔):
  9. /// HasPendingReceipt = ReceiptPendingQty &gt; 0(PurOrdDetail.ReceiptQty)
  10. /// HasReceivableDetails = ReceivableDetailCount &gt; 0(MissedPrint Status='N')
  11. /// UNRESOLVED(不猜测):
  12. /// Refs → 恒空 ""(收货上下文无此列,与库存层默认一致);
  13. /// 新收货号 → 写侧 pr_SFM_GetOrdNbr 生成;本 loader 供既有收货号 RctNbr(=PurOrdRctDetail.Receiver)。
  14. /// freshness:透传 SourceSyncedAt(=sync_time),由消费端与事件时刻比对(见 B8)。
  15. /// </summary>
  16. public sealed class MdpIqcReceiptStateLoader : IIqcReceiptStateLoader, ITransient
  17. {
  18. private readonly IIqcReceiptStdReader _reader;
  19. public MdpIqcReceiptStateLoader(IIqcReceiptStdReader reader) => _reader = reader ?? throw new ArgumentNullException(nameof(reader));
  20. public async Task<IqcReceiptState> LoadAsync(long tenantId, string domainCode, string fbillno)
  21. {
  22. var row = await _reader.LoadRowAsync(tenantId, domainCode, fbillno);
  23. if (row == null)
  24. return new IqcReceiptState { Found = false }; // 标准层暂无 → 数据未就绪,可重试
  25. return new IqcReceiptState
  26. {
  27. Found = true,
  28. HasPendingReceipt = row.ReceiptPendingQty > 0m,
  29. HasReceivableDetails = row.ReceivableDetailCount > 0,
  30. ItemNum = row.ItemNum ?? "",
  31. Location = row.Location ?? "",
  32. LotSerial = row.LotSerial ?? "",
  33. Refs = "", // UNRESOLVED:收货态无 Refs
  34. RctNbr = row.RctNbr ?? "", // 既有收货号(新号写侧生成)
  35. PurOrd = row.PurOrd ?? "",
  36. PurLine = row.PurLine,
  37. Potype = row.Potype ?? "",
  38. OrderedQty = row.OrderedQty,
  39. BeforeReceivedQty = row.ReceivedCumQty, // 累计已收
  40. ReturnedQty = row.ReturnedCumQty,
  41. SampleQty = row.SampleQty,
  42. SourceSyncedAt = row.SourceSyncedAt,
  43. };
  44. }
  45. }