using Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Entity; using SqlSugar; namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Receipt; /// /// 业务事务完成锚读取(Phase 7C)。用于 stale Processing 重投时判定「业务是否已完整提交」, /// 从而闭合 commit→MarkPosted 崩溃窗口:锚存在 → 修复 POSTED + ack、不重复过账。 /// **只读**——写入由 在业务事务内完成。 /// public interface IBusinessCompletionStore { /// 给定幂等键是否已存在完成锚(业务事务已完整提交的权威证据)。 Task IsCommittedAsync(long tenantId, string domainCode, string fbillNo); } /// 生产实现:读 `ado_iqc_posting_completion`(目标库 aidopdev;⚠️ Phase 5B 未实库验证)。 public sealed class SqlSugarBusinessCompletionStore : IBusinessCompletionStore, ITransient { private readonly ISqlSugarClient _db; public SqlSugarBusinessCompletionStore(ISqlSugarClient db) => _db = db; public async Task IsCommittedAsync(long tenantId, string domainCode, string fbillNo) { var domain = domainCode ?? string.Empty; return await _db.Queryable() .Where(x => x.TenantId == tenantId && x.DomainCode == domain && x.FbillNo == fbillNo) .AnyAsync(); } }