IIqcReceiptUnitOfWork.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Inventory;
  2. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Receipt;
  3. /// <summary>
  4. /// IQC 收货**外层工作单元**(Phase 6B:C2 拥有唯一外层事务)。C6 与 C5 使用同一事务;
  5. /// **C5 不自行 Commit**,由外层统一 Commit/Rollback。对齐 Phase 6A:C1 BEGIN … CheckInv→C6→C5 … COMMIT。
  6. ///
  7. /// 生命周期:Create → BeginAndLock(BeginTran + 库存行 FOR UPDATE + 锁内快照) → [守卫] →
  8. /// WritePurchaseReceipt(C6) → WriteInventory(C5,同事务不提交) → [下游] → Commit / Rollback。
  9. /// </summary>
  10. public interface IIqcReceiptUnitOfWork : IAsyncDisposable
  11. {
  12. /// <summary>开外层事务并锁定库存自然键,返回锁内变动前快照(守卫与 C5 据此)。</summary>
  13. Task<InventoryContext> BeginAndLockAsync(IReadOnlyList<InventoryTransactionCommand> invCmds);
  14. /// <summary>仅开外层事务(无库存锁/加载)——供 MRB 挑选等「任务-only」路径用。</summary>
  15. Task BeginAsync(long tenantId, string domainCode);
  16. /// <summary>C6:写采购收货回写(DOP shadow,同一事务)。</summary>
  17. Task WritePurchaseReceiptAsync(PurchaseReceiptWriteback c6);
  18. /// <summary>C5:写库存过账集(同一事务,**不提交**)。</summary>
  19. Task WriteInventoryAsync(InventoryWriteSet writeSet);
  20. /// <summary>C7:写移动任务(DOP shadow,同一事务,**不提交**)。</summary>
  21. Task WriteMobileTaskAsync(MobileTaskCommand task);
  22. /// <summary>
  23. /// 完成锚(Phase 7C):写 `ado_iqc_posting_completion`(DOP shadow,同一事务,**不提交**),
  24. /// 作为业务事务已完整提交的权威证据。**须在 C6/C5/C7 之后、Commit 之前调用**——与业务写同成同败。
  25. /// </summary>
  26. Task WriteCompletionAsync(IqcCompletionMarker marker);
  27. Task CommitAsync();
  28. Task RollbackAsync();
  29. }
  30. public interface IIqcReceiptUnitOfWorkFactory
  31. {
  32. IIqcReceiptUnitOfWork Create();
  33. }