IqcInventoryBatchBuilder.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Inventory;
  2. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Receipt;
  3. /// <summary>
  4. /// 由 IQC 合格收货命令构造库存命令批(纯逻辑,无 DB)。据 Phase 6A LIVE 取证:
  5. /// ① `rct-po` +AcceptedQty(进可用库存);
  6. /// ② 若 SampleQty&gt;0 再加 `iss-unp` -SampleQty(同 item/loc/lot,Reason='iqc')。
  7. /// 顺序与 LIVE 一致(rct-po 先、iss-unp 后)。**不构造 rct-po-ins / iss-tr-ins**(非 IQC 链)。
  8. /// </summary>
  9. public static class IqcInventoryBatchBuilder
  10. {
  11. public static InventoryPostingBatch Build(IqcAcceptedReceipt r)
  12. {
  13. if (r == null) throw new ArgumentNullException(nameof(r));
  14. var batch = new InventoryPostingBatch();
  15. var seq = 0;
  16. // ① 主收货 rct-po(进可用库存)
  17. batch.Commands.Add(new InventoryTransactionCommand
  18. {
  19. TenantId = r.TenantId, DomainCode = r.DomainCode,
  20. PostingId = r.PostingId, TransactionGroupId = r.TransactionGroupId, Seq = ++seq,
  21. TransType = InventoryTransType.RctPo,
  22. ChangeQty = r.AcceptedQty, UmConversion = r.UmConversion == 0m ? 1m : r.UmConversion,
  23. ItemNum = r.ItemNum, Location = r.Location, LotSerial = r.LotSerial ?? "", Refs = r.Refs ?? "",
  24. OrdNbr = r.RctNbr, WorkOrd = r.WorkOrd, Receiver = r.Receiver, RctQcNbr = r.RctQcNbr, Fbillno = r.Fbillno,
  25. User = r.User,
  26. });
  27. // ② 留样 iss-unp(-SampleQty,同 item/loc/lot,Reason='iqc')
  28. if (r.SampleQty > 0m)
  29. {
  30. batch.Commands.Add(new InventoryTransactionCommand
  31. {
  32. TenantId = r.TenantId, DomainCode = r.DomainCode,
  33. PostingId = r.PostingId, TransactionGroupId = r.TransactionGroupId, Seq = ++seq,
  34. TransType = InventoryTransType.IssUnp,
  35. ChangeQty = -r.SampleQty, UmConversion = r.UmConversion == 0m ? 1m : r.UmConversion,
  36. ItemNum = r.ItemNum, Location = r.Location, LotSerial = r.LotSerial ?? "", Refs = r.Refs ?? "",
  37. OrdNbr = r.RctNbr, Reason = "iqc", User = r.User,
  38. });
  39. }
  40. return batch;
  41. }
  42. }