FPSMS-frontend
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

168 Zeilen
4.4 KiB

  1. "use server";
  2. import { convertObjToURLSearchParams } from "@/app/utils/commonUtil";
  3. import { serverFetchJson } from "@/app/utils/fetchUtil";
  4. import { BASE_API_URL } from "@/config/api";
  5. import { cache } from "react";
  6. import { DetailedProdScheduleLineBomMaterialResult, DetailedProdScheduleLineResult, ScheduleType } from ".";
  7. import { revalidateTag } from "next/cache";
  8. export interface SearchProdSchedule {
  9. scheduleAt?: string;
  10. schedulePeriod?: string;
  11. schedulePeriodTo?: string;
  12. produceAt?: string;
  13. totalEstProdCount?: number;
  14. types?: ScheduleType[];
  15. pageSize?: number;
  16. pageNum?: number;
  17. }
  18. export interface ProdScheduleResult {
  19. id: number;
  20. scheduleAt: number[];
  21. schedulePeriod?: number[];
  22. schedulePeriodTo?: number[];
  23. produceAt: string;
  24. totalEstProdCount: number;
  25. totalFGType: number;
  26. type: string;
  27. }
  28. export interface ProdScheduleResultByPage {
  29. total: number;
  30. records: ProdScheduleResult[];
  31. }
  32. export interface ReleaseProdScheduleInputs {
  33. id: number;
  34. demandQty: number;
  35. }
  36. export interface ReleaseProdScheduleResponse {
  37. id: number;
  38. code: string;
  39. entity: {
  40. prodScheduleLines: DetailedProdScheduleLineResult[];
  41. };
  42. message: string;
  43. }
  44. export interface SaveProdScheduleResponse {
  45. id: number;
  46. code: string;
  47. entity: {
  48. bomMaterials: DetailedProdScheduleLineBomMaterialResult[]
  49. };
  50. message: string;
  51. }
  52. export const fetchProdSchedules = cache(
  53. async (data: SearchProdSchedule | null) => {
  54. const params = convertObjToURLSearchParams<SearchProdSchedule>(data);
  55. // console.log(params)
  56. return serverFetchJson<ProdScheduleResultByPage>(
  57. `${BASE_API_URL}/productionSchedule/getRecordByPage?${params}`,
  58. {
  59. method: "GET",
  60. headers: { "Content-Type": "application/json" },
  61. next: {
  62. tags: ["prodSchedules"],
  63. },
  64. },
  65. );
  66. },
  67. );
  68. export const fetchRoughProdSchedules = cache(
  69. async (data: SearchProdSchedule | null) => {
  70. const params = convertObjToURLSearchParams<SearchProdSchedule>(data);
  71. // console.log(params)
  72. return serverFetchJson<ProdScheduleResultByPage>(
  73. `${BASE_API_URL}/productionSchedule/getRecordByPage/rough?${params}`,
  74. {
  75. method: "GET",
  76. headers: { "Content-Type": "application/json" },
  77. next: {
  78. tags: ["roughProdSchedules"],
  79. },
  80. },
  81. );
  82. },
  83. );
  84. export const fetchDetailedProdSchedules = cache(
  85. async (data: SearchProdSchedule | null) => {
  86. const params = convertObjToURLSearchParams<SearchProdSchedule>(data);
  87. // console.log(params)
  88. return serverFetchJson<ProdScheduleResultByPage>(
  89. `${BASE_API_URL}/productionSchedule/getRecordByPage/detailed?${params}`,
  90. {
  91. method: "GET",
  92. headers: { "Content-Type": "application/json" },
  93. next: {
  94. tags: ["detailedProdSchedules"],
  95. },
  96. },
  97. );
  98. },
  99. );
  100. export const testRoughSchedule = cache(async () => {
  101. return serverFetchJson(
  102. `${BASE_API_URL}/productionSchedule/testRoughSchedule`,
  103. {
  104. method: "GET",
  105. headers: { "Content-Type": "application/json" },
  106. next: {
  107. tags: ["roughProdSchedules"],
  108. },
  109. },
  110. );
  111. });
  112. export const testDetailedSchedule = cache(async (date?: string) => {
  113. const queryStr = convertObjToURLSearchParams({genDate: date})
  114. return serverFetchJson(
  115. `${BASE_API_URL}/productionSchedule/testDetailedSchedule?${queryStr}`,
  116. {
  117. method: "GET",
  118. headers: { "Content-Type": "application/json" },
  119. next: {
  120. tags: ["detailedProdSchedules"],
  121. },
  122. },
  123. );
  124. });
  125. export const releaseProdScheduleLine = cache(async (data: ReleaseProdScheduleInputs) => {
  126. const response = serverFetchJson<ReleaseProdScheduleResponse>(
  127. `${BASE_API_URL}/productionSchedule/detail/detailed/releaseLine`,
  128. {
  129. method: "POST",
  130. body: JSON.stringify(data),
  131. headers: { "Content-Type": "application/json" },
  132. }
  133. );
  134. revalidateTag("detailedProdSchedules");
  135. revalidateTag("prodSchedule");
  136. return response;
  137. })
  138. export const saveProdScheduleLine = cache(async (data: ReleaseProdScheduleInputs) => {
  139. const response = serverFetchJson<SaveProdScheduleResponse>(
  140. `${BASE_API_URL}/productionSchedule/detail/detailed/save`,
  141. {
  142. method: "POST",
  143. body: JSON.stringify(data),
  144. headers: { "Content-Type": "application/json" },
  145. }
  146. );
  147. revalidateTag("detailedProdSchedules");
  148. revalidateTag("prodSchedule");
  149. return response;
  150. })