| 1234567891011121314151617181920212223242526272829303132333435 |
- namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Numbering;
- /// <summary>
- /// 业务单号取号 provider 抽象(跨实例强唯一由具体 provider 保证;替换 read-MAX-then-write)。
- /// 生产实现复用 NumberRuleService(NbrControl 规则行 FOR UPDATE + NbrDayInfo 计数器)。
- /// 单元/并发测试用 InMemory 实现。禁止任何实现走 SELECT MAX()+1。
- /// </summary>
- public interface IBusinessNumberProvider
- {
- /// <summary>取一批业务单号(同一批号连续、跨批唯一)。生产实现应在既有事务内调用。</summary>
- Task<IReadOnlyList<string>> NextBatchAsync(string ruleCode, string domain, int count, string operatorNo);
- }
- /// <summary>业务单号规则(供 InMemory provider 格式化用;生产规则来自 NbrControl 行)。</summary>
- public sealed class BusinessNumberRule
- {
- public string RuleCode { get; set; }
- public string Prefix1 { get; set; }
- public string Prefix2 { get; set; }
- public string Prefix3 { get; set; }
- /// <summary>日期段类型,如 "YYYYMMDD";配合 IsDateType。</summary>
- public string DateType { get; set; }
- public bool IsDateType { get; set; }
- public int? MaxValue { get; set; }
- public int IniValue { get; set; } = 1;
- }
- /// <summary>「取号 → 消费(DB UNIQUE 兜底 duplicate-key 有限重试)」的结果。</summary>
- public sealed class BusinessNumberConsumeResult
- {
- public bool Success { get; set; }
- public string Number { get; set; }
- /// <summary>实际尝试次数(≥1,≤ maxRetry)。</summary>
- public int Attempts { get; set; }
- }
|