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();
}
}