2026-04-07 10:35:16 +09:00
|
|
|
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;
|
|
|
|
|
}
|
2026-04-07 14:16:26 +09:00
|
|
|
|
|
|
|
|
// ─── 스케줄 관리 ───
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|