BusinessNumberModels.cs 1.6 KB

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