- Added new API endpoints for managing smart factory schedules, including retrieval, creation, updating, and deletion of schedules. - Integrated schedule management into the smart factory log controller, enhancing the overall functionality. - Implemented a scheduler initialization process to automate daily plan generation and scheduled sends. - Developed a frontend page for monitoring equipment, production, and quality, with real-time data fetching and auto-refresh capabilities. These changes aim to provide comprehensive scheduling capabilities for smart factory operations, improving efficiency and operational visibility for users.
174 lines
5.3 KiB
TypeScript
174 lines
5.3 KiB
TypeScript
import { apiClient } from "./client";
|
|
|
|
export interface SmartFactoryLogEntry {
|
|
id: number;
|
|
company_code: string;
|
|
company_name: string | null;
|
|
user_id: string;
|
|
user_name: string | null;
|
|
use_type: string;
|
|
connect_ip: string;
|
|
send_status: "SUCCESS" | "FAIL" | "SKIPPED";
|
|
response_status: number | null;
|
|
error_message: string | null;
|
|
log_dt: string;
|
|
created_at: string;
|
|
}
|
|
|
|
export interface SmartFactoryLogFilters {
|
|
companyCode?: string;
|
|
userId?: string;
|
|
sendStatus?: string;
|
|
dateFrom?: string;
|
|
dateTo?: string;
|
|
search?: string;
|
|
page?: number;
|
|
limit?: number;
|
|
}
|
|
|
|
export interface SmartFactoryLogStats {
|
|
total: number;
|
|
statusCounts: Array<{ status: string; count: number }>;
|
|
companyCounts: Array<{ companyCode: string; companyName: string; count: number }>;
|
|
dailyCounts: Array<{ date: string; count: number }>;
|
|
}
|
|
|
|
export async function getSmartFactoryLogs(
|
|
filters: SmartFactoryLogFilters
|
|
): Promise<{
|
|
success: boolean;
|
|
data: SmartFactoryLogEntry[];
|
|
total: number;
|
|
page: number;
|
|
limit: number;
|
|
}> {
|
|
const params = new URLSearchParams();
|
|
if (filters.companyCode) params.append("companyCode", filters.companyCode);
|
|
if (filters.userId) params.append("userId", filters.userId);
|
|
if (filters.sendStatus) params.append("sendStatus", filters.sendStatus);
|
|
if (filters.dateFrom) params.append("dateFrom", filters.dateFrom);
|
|
if (filters.dateTo) params.append("dateTo", filters.dateTo);
|
|
if (filters.search) params.append("search", filters.search);
|
|
if (filters.page) params.append("page", String(filters.page));
|
|
if (filters.limit) params.append("limit", String(filters.limit));
|
|
|
|
const response = await apiClient.get(`/admin/smart-factory-log?${params.toString()}`);
|
|
return response.data;
|
|
}
|
|
|
|
export async function getSmartFactoryLogStats(
|
|
companyCode?: string,
|
|
days?: number
|
|
): Promise<{ success: boolean; data: SmartFactoryLogStats }> {
|
|
const params = new URLSearchParams();
|
|
if (companyCode) params.append("companyCode", companyCode);
|
|
if (days) params.append("days", String(days));
|
|
|
|
const response = await apiClient.get(`/admin/smart-factory-log/stats?${params.toString()}`);
|
|
return response.data;
|
|
}
|
|
|
|
// ─── 스케줄 관리 ───
|
|
|
|
export interface SmartFactorySchedule {
|
|
id: number;
|
|
company_code: string;
|
|
company_name: string | null;
|
|
is_active: boolean;
|
|
time_start: string;
|
|
time_end: string;
|
|
exclude_weekend: boolean;
|
|
exclude_holidays: boolean;
|
|
created_at: string;
|
|
updated_at: string;
|
|
}
|
|
|
|
export interface TodayPlanEntry {
|
|
companyCode: string;
|
|
total: number;
|
|
sent: number;
|
|
remaining: number;
|
|
}
|
|
|
|
export interface SmartFactoryHoliday {
|
|
id: number;
|
|
holiday_date: string;
|
|
holiday_name: string;
|
|
created_at: string;
|
|
}
|
|
|
|
export async function getSchedules(): Promise<{ success: boolean; data: SmartFactorySchedule[] }> {
|
|
const response = await apiClient.get("/admin/smart-factory-log/schedules");
|
|
return response.data;
|
|
}
|
|
|
|
export async function upsertSchedule(params: {
|
|
companyCode: string;
|
|
isActive: boolean;
|
|
timeStart: string;
|
|
timeEnd: string;
|
|
excludeWeekend: boolean;
|
|
excludeHolidays: boolean;
|
|
}): Promise<{ success: boolean; message: string }> {
|
|
const response = await apiClient.post("/admin/smart-factory-log/schedules", params);
|
|
return response.data;
|
|
}
|
|
|
|
export async function deleteSchedule(companyCode: string): Promise<{ success: boolean }> {
|
|
const response = await apiClient.delete(`/admin/smart-factory-log/schedules/${companyCode}`);
|
|
return response.data;
|
|
}
|
|
|
|
export async function runScheduleNow(companyCode: string): Promise<{
|
|
success: boolean;
|
|
data: { total: number; sent: number; skipped: number };
|
|
}> {
|
|
const response = await apiClient.post(`/admin/smart-factory-log/schedules/${companyCode}/run-now`);
|
|
return response.data;
|
|
}
|
|
|
|
export async function getTodayPlan(): Promise<{ success: boolean; data: TodayPlanEntry[] }> {
|
|
const response = await apiClient.get("/admin/smart-factory-log/schedules/today-plan");
|
|
return response.data;
|
|
}
|
|
|
|
export async function getHolidays(): Promise<{ success: boolean; data: SmartFactoryHoliday[] }> {
|
|
const response = await apiClient.get("/admin/smart-factory-log/holidays");
|
|
return response.data;
|
|
}
|
|
|
|
export async function addHoliday(holidayDate: string, holidayName: string): Promise<{ success: boolean }> {
|
|
const response = await apiClient.post("/admin/smart-factory-log/holidays", { holidayDate, holidayName });
|
|
return response.data;
|
|
}
|
|
|
|
export async function deleteHoliday(id: number): Promise<{ success: boolean }> {
|
|
const response = await apiClient.delete(`/admin/smart-factory-log/holidays/${id}`);
|
|
return response.data;
|
|
}
|
|
|
|
// ─── API 키 관리 ───
|
|
|
|
export interface ApiKeyEntry {
|
|
companyCode: string;
|
|
companyName: string;
|
|
hasDbKey: boolean;
|
|
dbKey: string | null;
|
|
hasEnvKey: boolean;
|
|
}
|
|
|
|
export async function getApiKeys(): Promise<{ success: boolean; data: ApiKeyEntry[] }> {
|
|
const response = await apiClient.get("/admin/smart-factory-log/api-keys");
|
|
return response.data;
|
|
}
|
|
|
|
export async function saveApiKey(companyCode: string, apiKey: string): Promise<{ success: boolean }> {
|
|
const response = await apiClient.post("/admin/smart-factory-log/api-keys", { companyCode, apiKey });
|
|
return response.data;
|
|
}
|
|
|
|
export async function deleteApiKey(companyCode: string): Promise<{ success: boolean }> {
|
|
const response = await apiClient.delete(`/admin/smart-factory-log/api-keys/${companyCode}`);
|
|
return response.data;
|
|
}
|