import axios from 'axios'; import type { QueueItem } from '@/types/QueueItem'; const makeQueue = async (): Promise<QueueItem[] | undefined> => { try { // เรียก API const response = await axios.post('http://127.0.0.1:9000/run-simulation'); console.log('📌 Response:', response); const queueData = response.data.production_log; console.log('this is queueData queueservice', queueData); if (!Array.isArray(queueData)) { console.error('❌ Error: Invalid queue data format'); return undefined; } // ✅ แปลงข้อมูลเป็น JSON String แล้ว Parse กลับมาเป็น Object ใหม่ const queueItems: QueueItem[] = JSON.parse( JSON.stringify(queueData.map(q => ({ queueID: q.queueID, machineID: q.machineID, orderID: q.orderID, pageNumber: q.pageNumber ?? 1, // ถ้าไม่มี ให้ใช้ค่า default เป็น 1 startTime: q.startTime, finishTime: q.finishTime, status: q.status, bottleSize: q.bottleSize, producedQuantity: q.producedQuantity, }))) ); return queueItems; // ✅ คืนค่าเป็น `QueueItem[]` } catch (error: any) { console.error('❌ Error:', error.message || error); return undefined; } }; export default { makeQueue }; export class QueueService { private queue: Queue[] = []; // ดึงรายการคิวทั้งหมด getQueue(): Queue[] { return this.queue; } // ค้นหารายการคิวโดยใช้ queueID getQueueById(queueID: number): Queue | undefined { return this.queue.find(item => item.queueID === queueID); } // เพิ่มรายการใหม่เข้า queue addQueueItem(item: Queue): void { this.queue.push(item); } // อัปเดตรายการ queue ที่มีอยู่ updateQueueItem(updatedItem: Queue): void { const index = this.queue.findIndex(item => item.queueID === updatedItem.queueID); if (index !== -1) { this.queue[index] = updatedItem; } } // ลบรายการ queue ตาม queueID removeQueueItem(queueID: number): void { this.queue = this.queue.filter(item => item.queueID !== queueID); } // เปลี่ยนสถานะของคิว updateQueueStatus(queueID: number, status: 'pending' | 'in-progress' | 'completed' | 'canceled'): void { const queueItem = this.getQueueById(queueID); if (queueItem) { queueItem.status = status; } } // คำนวณเวลาการทำงานของ queue calculateProductionTime(queueID: number): number | null { const queueItem = this.getQueueById(queueID); if (queueItem && queueItem.startTime && queueItem.finishTime) { return (queueItem.finishTime.getTime() - queueItem.startTime.getTime()) / (1000 * 60); // แปลงเป็นนาที } return null; } }