using Admin.NET.Plugin.AiDOP.Supply;
namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Numbering;
///
/// 生产取号 provider:复用既有 (NbrControl 规则行 FOR UPDATE + NbrDayInfo 计数器读改写,
/// 生产已用于 M8/PR 取号;规避 PurOrdNumberGenerator 的首单 gap 重号缺陷)。委托其「在既有事务内」取号方法,
/// 以便与 Phase 5 库存过账写库同事务。
///
/// ⚠️ Phase 4B(未在本轮实库验证):使用前需先在 aidopdev 播种对应 NbrControl 规则行(NbrType=ruleCode)。
/// 目标库口径已确认 = aidopdev(ConfigId 1300000000001)。**不得声称跨实例实证通过**,待 Phase 4B 补真实并发验证。
///
public sealed class NumberRuleServiceBusinessNumberProvider : IBusinessNumberProvider, ITransient
{
private readonly NumberRuleService _numberRuleService;
public NumberRuleServiceBusinessNumberProvider(NumberRuleService numberRuleService)
{
_numberRuleService = numberRuleService;
}
/// 在调用方既有事务内取号(与库存过账写库同事务,异常整体回滚)。
public Task> NextBatchAsync(string ruleCode, string domain, int count, string operatorNo)
=> _numberRuleService.NextBatchInCurrentTransactionAsync(ruleCode, domain, count, operatorNo);
}