InventoryBalanceModels.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse;
  2. public static class InventoryDataSources
  3. {
  4. public const string Live165 = "LIVE_165";
  5. public const string Std = "STD";
  6. }
  7. public sealed class InventoryBalanceQuery
  8. {
  9. public long TenantId { get; init; }
  10. public string Domain { get; init; } = "";
  11. public string? Type { get; init; }
  12. public string? Location { get; init; }
  13. public string? MaterialCode { get; init; }
  14. public string? BatchNo { get; init; }
  15. public decimal? StockGt { get; init; }
  16. public decimal? UnrestrictedGt { get; init; }
  17. public decimal? QcStockGt { get; init; }
  18. public decimal? FrozenGt { get; init; }
  19. public int Page { get; init; } = 1;
  20. public int PageSize { get; init; } = 10;
  21. }
  22. public sealed class InventoryBalanceRow
  23. {
  24. public string? Type { get; set; }
  25. public string? Location { get; set; }
  26. public string? LocationName { get; set; }
  27. public string? MaterialCode { get; set; }
  28. public string? MaterialName { get; set; }
  29. public string? BatchNo { get; set; }
  30. public string? Shelf { get; set; }
  31. public string? Version { get; set; }
  32. public decimal UnrestrictedStock { get; set; }
  33. public decimal QcStock { get; set; }
  34. public decimal FrozenStock { get; set; }
  35. public decimal QtyOnHand { get; set; }
  36. public string? Unit { get; set; }
  37. public string? Supplier { get; set; }
  38. }
  39. public sealed class InventoryBalancePage
  40. {
  41. public int Total { get; init; }
  42. public int Page { get; init; }
  43. public int PageSize { get; init; }
  44. public IReadOnlyList<InventoryBalanceRow> List { get; init; } = Array.Empty<InventoryBalanceRow>();
  45. public decimal GrandTotalQtyOnHand { get; init; }
  46. public decimal GrandUnrestricted { get; init; }
  47. public decimal GrandQc { get; init; }
  48. public decimal GrandFrozen { get; init; }
  49. public string DataSource { get; init; } = InventoryDataSources.Std;
  50. public DateTime AsOf { get; init; }
  51. public bool IsRealtime { get; init; }
  52. /// <summary>
  53. /// 本次结果是否由「尝试实时源失败后回落标准层」产生。
  54. /// <para>
  55. /// 用于区分两种同为 <see cref="InventoryDataSources.Std"/> 的语义:
  56. /// ① 正常快照(无选择性筛选,按策略本就不查实时源)→ false;
  57. /// ② 实时源超时/异常后的降级结果 → true。
  58. /// 只有 ② 才应向用户提示「实时库不可用」。
  59. /// </para>
  60. /// <para>由门面 <c>InventoryBalanceReader</c> 在回落分支设置,故为可写属性。</para>
  61. /// </summary>
  62. public bool FallbackFromLive { get; set; }
  63. }
  64. public sealed class InventoryTransactionQuery
  65. {
  66. public long TenantId { get; init; }
  67. public string Domain { get; init; } = "";
  68. public string? MaterialCode { get; init; }
  69. public string? Location { get; init; }
  70. public string? BatchNo { get; init; }
  71. public string? WorkOrderNo { get; init; }
  72. public string? TransType { get; init; }
  73. public string? CreateTime { get; init; }
  74. public string? CreateUser { get; init; }
  75. public int Page { get; init; } = 1;
  76. public int PageSize { get; init; } = 10;
  77. }
  78. public sealed class InventoryTransactionRow
  79. {
  80. public DateTime? TransTime { get; set; }
  81. public string? MaterialCode { get; set; }
  82. public string? MaterialName { get; set; }
  83. public string? Location { get; set; }
  84. public string? LocationName { get; set; }
  85. public string? BatchNo { get; set; }
  86. public decimal BeginQty { get; set; }
  87. public decimal InQty { get; set; }
  88. public decimal OutQty { get; set; }
  89. public decimal EndQty { get; set; }
  90. public string? Unit { get; set; }
  91. public string? TransType { get; set; }
  92. public string? WorkOrderNo { get; set; }
  93. public string? DeliveryNo { get; set; }
  94. public string? DeliveryType { get; set; }
  95. public string? Remark { get; set; }
  96. public string? CreateUser { get; set; }
  97. }
  98. public sealed class InventoryTransactionPage
  99. {
  100. public int Total { get; init; }
  101. public int Page { get; init; }
  102. public int PageSize { get; init; }
  103. public IReadOnlyList<InventoryTransactionRow> List { get; init; } = Array.Empty<InventoryTransactionRow>();
  104. public DateTime AsOf { get; init; }
  105. public DateTime HistoryFrom { get; init; }
  106. }