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