FPSMS-frontend
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 

146 строки
3.8 KiB

  1. import { serverFetchJson } from "@/app/utils/fetchUtil";
  2. import { BASE_API_URL } from "@/config/api";
  3. import { cache } from "react";
  4. import "server-only";
  5. export type ScheduleType = "all" | "rough" | "detailed" | "manual";
  6. // Rough
  7. export interface RoughProdScheduleResult {
  8. id: number;
  9. scheduleAt: number[];
  10. schedulePeriod: number[];
  11. schedulePeriodTo: number[];
  12. totalEstProdCount: number;
  13. totalFGType: number;
  14. type: string;
  15. prodScheduleLinesByFg: RoughProdScheduleLineResultByFg[];
  16. prodScheduleLinesByFgByDate: {
  17. [assignDate: number]: RoughProdScheduleLineResultByFg[];
  18. };
  19. prodScheduleLinesByBom: RoughProdScheduleLineResultByBom[];
  20. prodScheduleLinesByBomByDate: {
  21. [assignDate: number]: RoughProdScheduleLineResultByBomByDate[];
  22. };
  23. }
  24. export interface RoughProdScheduleLineResultByFg {
  25. id: number;
  26. code: string;
  27. name: string;
  28. type: string;
  29. availableQty: number;
  30. prodQty: number;
  31. uomName: string;
  32. lastMonthAvgSales: number;
  33. estCloseBal: number;
  34. priority: number;
  35. assignDate: number;
  36. bomMaterials: RoughProdScheduleLineBomMaterialResult[];
  37. }
  38. export interface RoughProdScheduleLineBomMaterialResult {
  39. id: number;
  40. code: string;
  41. name: string;
  42. type: string;
  43. availableQty: number;
  44. demandQty: number;
  45. uomName: string;
  46. }
  47. export interface RoughProdScheduleLineResultByBom {
  48. id: number;
  49. code: string;
  50. name: string;
  51. type: string;
  52. availableQty: number;
  53. totalDemandQty: number;
  54. demandQty1: number;
  55. demandQty2: number;
  56. demandQty3: number;
  57. demandQty4: number;
  58. demandQty5: number;
  59. demandQty6: number;
  60. demandQty7: number;
  61. uomName: string;
  62. }
  63. export interface RoughProdScheduleLineResultByBomByDate {
  64. id: number;
  65. code: string;
  66. name: string;
  67. type: string;
  68. availableQty: number;
  69. demandQty: number;
  70. assignDate: number;
  71. uomName: string;
  72. }
  73. // Detailed
  74. export interface DetailedProdScheduleResult {
  75. id: number;
  76. scheduleAt: number[];
  77. totalEstProdCount: number;
  78. totalFGType: number;
  79. prodScheduleLines: DetailedProdScheduleLineResult[];
  80. }
  81. export interface DetailedProdScheduleLineResult {
  82. id: number;
  83. bomMaterials: DetailedProdScheduleLineBomMaterialResult[];
  84. jobNo: string;
  85. code: string;
  86. name: string;
  87. type: string;
  88. demandQty: number;
  89. bomOutputQty: number;
  90. uomName: string;
  91. prodTimeInMinute: DetailedProdScheduleLineProdTimeResult[];
  92. priority: number;
  93. approved: boolean;
  94. proportion: number;
  95. lastMonthAvgSales: number;
  96. avgQtyLastMonth: number; // Average usage last month
  97. stockQty: number; // Warehouse stock quantity
  98. daysLeft: number; // Days remaining before stockout
  99. needNoOfJobOrder: number;
  100. prodQty: number;
  101. outputQty: number;
  102. }
  103. export interface DetailedProdScheduleLineBomMaterialResult {
  104. id: number;
  105. code: string;
  106. name: string;
  107. type: string;
  108. availableQty: number;
  109. demandQty: number;
  110. uomName: string;
  111. }
  112. export interface DetailedProdScheduleLineProdTimeResult {
  113. equipName: string;
  114. totalMinutes: number;
  115. }
  116. // API
  117. export const fetchRoughProdScheduleDetail = cache(async (id: number) => {
  118. return serverFetchJson<RoughProdScheduleResult>(`${BASE_API_URL}/productionSchedule/detail/rough/${id}`, {
  119. method: "GET",
  120. headers: { "Content-Type": "application/json" },
  121. next: {
  122. tags: ["prodSchedule"]
  123. }
  124. })
  125. })
  126. export const fetchDetailedProdScheduleDetail = cache(async (id: number) => {
  127. return serverFetchJson<DetailedProdScheduleResult>(`${BASE_API_URL}/productionSchedule/detail/detailed/${id}`, {
  128. method: "GET",
  129. headers: { "Content-Type": "application/json" },
  130. next: {
  131. tags: ["prodSchedule"]
  132. }
  133. })
  134. })