IqcPostingIdempotencyModels.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Entity;
  2. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Idempotency;
  3. /// <summary>IQC 入库过账幂等认领结果分类。</summary>
  4. public enum IqcPostingClaimOutcome
  5. {
  6. /// <summary>首次处理:本调用成功占用(DB UNIQUE 插入成功),可继续过账。</summary>
  7. FirstProcess = 1,
  8. /// <summary>已处理完成:既有记录 POSTED,返回既有结果,不得重复过账。</summary>
  9. AlreadyProcessed = 2,
  10. /// <summary>处理中/冲突:既有记录 PROCESSING 或 PENDING,另一路正在处理,当前不得并发过账。</summary>
  11. Processing = 3,
  12. /// <summary>可重试失败:既有记录 FAILED,允许后续重试过账。</summary>
  13. FailedRetryable = 4,
  14. }
  15. /// <summary>幂等认领结果。</summary>
  16. public sealed class IqcPostingClaimResult
  17. {
  18. public IqcPostingClaimOutcome Outcome { get; set; }
  19. /// <summary>当前生效的过账头(FirstProcess=本次新建;其余=既有)。</summary>
  20. public AdoIqcInventoryPosting Posting { get; set; }
  21. /// <summary>是否本调用新建(true 仅当 FirstProcess)。</summary>
  22. public bool IsNew { get; set; }
  23. }
  24. /// <summary>store 层插入结果(依赖 DB UNIQUE 判定,而非先查后插)。</summary>
  25. public sealed class PostingInsertResult
  26. {
  27. /// <summary>是否本调用成功插入(UNIQUE 未冲突)。</summary>
  28. public bool Inserted { get; set; }
  29. /// <summary>冲突时的既有记录(Inserted=false 时可能已带出)。</summary>
  30. public AdoIqcInventoryPosting Existing { get; set; }
  31. }