173 lines
6.0 KiB
TypeScript
173 lines
6.0 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
async function main() {
|
||
const equipmentTypes = [
|
||
{
|
||
code: 'pump',
|
||
name: 'Насосный агрегат',
|
||
manufacturer: 'АО НасосПром',
|
||
maintenanceIntervalHours: 2000,
|
||
overhaulIntervalHours: 16000,
|
||
},
|
||
{
|
||
code: 'compressor',
|
||
name: 'Компрессорная установка',
|
||
manufacturer: 'ОАО Компрессормаш',
|
||
maintenanceIntervalHours: 1500,
|
||
overhaulIntervalHours: 12000,
|
||
},
|
||
{
|
||
code: 'generator',
|
||
name: 'Дизель-генератор',
|
||
manufacturer: 'АО ЭнергоМаш',
|
||
maintenanceIntervalHours: 500,
|
||
overhaulIntervalHours: 6000,
|
||
},
|
||
{
|
||
code: 'valve',
|
||
name: 'Запорная арматура',
|
||
manufacturer: 'ЗАО АрматурПром',
|
||
maintenanceIntervalHours: 1000,
|
||
overhaulIntervalHours: 10000,
|
||
},
|
||
{
|
||
code: 'sensor',
|
||
name: 'Датчик давления',
|
||
manufacturer: 'ООО ПриборСервис',
|
||
maintenanceIntervalHours: 800,
|
||
overhaulIntervalHours: 8000,
|
||
},
|
||
{
|
||
code: 'motor',
|
||
name: 'Электродвигатель',
|
||
manufacturer: 'ПАО ЭлектроМотор',
|
||
maintenanceIntervalHours: 1200,
|
||
overhaulIntervalHours: 14000,
|
||
},
|
||
{
|
||
code: 'fan',
|
||
name: 'Вентилятор',
|
||
manufacturer: 'АО ВентПром',
|
||
maintenanceIntervalHours: 700,
|
||
overhaulIntervalHours: 9000,
|
||
},
|
||
{
|
||
code: 'heat-exchanger',
|
||
name: 'Теплообменник',
|
||
manufacturer: 'ОАО ТеплоТех',
|
||
maintenanceIntervalHours: 1800,
|
||
overhaulIntervalHours: 15000,
|
||
},
|
||
{
|
||
code: 'filter',
|
||
name: 'Фильтровальная установка',
|
||
manufacturer: 'ООО ФильтрТех',
|
||
maintenanceIntervalHours: 600,
|
||
overhaulIntervalHours: 7000,
|
||
},
|
||
{
|
||
code: 'separator',
|
||
name: 'Сепаратор',
|
||
manufacturer: 'АО СепараторМаш',
|
||
maintenanceIntervalHours: 1600,
|
||
overhaulIntervalHours: 13000,
|
||
},
|
||
{
|
||
code: 'transformer',
|
||
name: 'Трансформатор',
|
||
manufacturer: 'ПАО ТрансЭнерго',
|
||
maintenanceIntervalHours: 2500,
|
||
overhaulIntervalHours: 20000,
|
||
},
|
||
] as const;
|
||
|
||
for (const type of equipmentTypes) {
|
||
await prisma.equipmentType.upsert({
|
||
where: { code: type.code },
|
||
update: { ...type },
|
||
create: { ...type },
|
||
});
|
||
}
|
||
|
||
const equipmentRecords: { id: string; inventoryNumber: string; name: string }[] = [];
|
||
for (let i = 1; i <= 11; i++) {
|
||
const type = equipmentTypes[(i - 1) % equipmentTypes.length];
|
||
const inventoryNumber = `INV-${String(i).padStart(3, '0')}`;
|
||
const serialNumber = `SN-2026-${String(i).padStart(4, '0')}`;
|
||
const record = await prisma.equipment.upsert({
|
||
where: { inventoryNumber },
|
||
update: {
|
||
serialNumber,
|
||
name: `${type.name} #${i}`,
|
||
equipmentTypeCode: type.code,
|
||
status: i % 5 === 0 ? 'Repair' : 'Active',
|
||
location: i % 2 === 0 ? `Площадка ${Math.ceil(i / 2)}` : `Цех ${Math.ceil(i / 3)}`,
|
||
commissionedAt: new Date(2022, (i - 1) % 12, 1 + ((i - 1) % 28)),
|
||
totalEngineHours: 1000 + i * 350,
|
||
engineHoursSinceLastRepair: 200 + i * 25,
|
||
},
|
||
create: {
|
||
inventoryNumber,
|
||
serialNumber,
|
||
name: `${type.name} #${i}`,
|
||
equipmentTypeCode: type.code,
|
||
status: i % 5 === 0 ? 'Repair' : 'Active',
|
||
location: i % 2 === 0 ? `Площадка ${Math.ceil(i / 2)}` : `Цех ${Math.ceil(i / 3)}`,
|
||
commissionedAt: new Date(2022, (i - 1) % 12, 1 + ((i - 1) % 28)),
|
||
totalEngineHours: 1000 + i * 350,
|
||
engineHoursSinceLastRepair: 200 + i * 25,
|
||
},
|
||
});
|
||
equipmentRecords.push({ id: record.id, inventoryNumber: record.inventoryNumber, name: record.name });
|
||
}
|
||
|
||
const repairKinds = ['TO', 'TR', 'TRE', 'KR', 'AR', 'MP'] as const;
|
||
const statuses = ['Draft', 'Approved', 'InWork', 'Done', 'Cancelled'] as const;
|
||
|
||
for (let i = 1; i <= 11; i++) {
|
||
const number = `RO-2026-${String(i).padStart(3, '0')}`;
|
||
const equipment = equipmentRecords[(i - 1) % equipmentRecords.length];
|
||
await prisma.repairOrder.upsert({
|
||
where: { number },
|
||
update: {
|
||
equipmentId: equipment.id,
|
||
repairKind: repairKinds[(i - 1) % repairKinds.length],
|
||
status: statuses[(i - 1) % statuses.length],
|
||
plannedAt: new Date(2026, ((i - 1) % 12), 1 + ((i - 1) % 28)),
|
||
startedAt: i % 4 === 0 ? new Date(2026, ((i - 1) % 12), 2 + ((i - 1) % 28)) : null,
|
||
completedAt: i % 5 === 0 ? new Date(2026, ((i - 1) % 12), 5 + ((i - 1) % 28)) : null,
|
||
contractor: i % 3 === 0 ? 'ООО СервисРемонт' : 'АО ТехПодряд',
|
||
engineHoursAtRepair: 1000 + i * 350,
|
||
description: `Заявка на ремонт ${equipment.inventoryNumber} (${equipment.name})`,
|
||
notes: i % 2 === 0 ? 'Тестовая заметка' : null,
|
||
},
|
||
create: {
|
||
number,
|
||
equipmentId: equipment.id,
|
||
repairKind: repairKinds[(i - 1) % repairKinds.length],
|
||
status: statuses[(i - 1) % statuses.length],
|
||
plannedAt: new Date(2026, ((i - 1) % 12), 1 + ((i - 1) % 28)),
|
||
startedAt: i % 4 === 0 ? new Date(2026, ((i - 1) % 12), 2 + ((i - 1) % 28)) : null,
|
||
completedAt: i % 5 === 0 ? new Date(2026, ((i - 1) % 12), 5 + ((i - 1) % 28)) : null,
|
||
contractor: i % 3 === 0 ? 'ООО СервисРемонт' : 'АО ТехПодряд',
|
||
engineHoursAtRepair: 1000 + i * 350,
|
||
description: `Заявка на ремонт ${equipment.inventoryNumber} (${equipment.name})`,
|
||
notes: i % 2 === 0 ? 'Тестовая заметка' : null,
|
||
},
|
||
});
|
||
}
|
||
|
||
console.log('Seed data created successfully');
|
||
}
|
||
|
||
main()
|
||
.catch((e) => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
})
|
||
.finally(async () => {
|
||
await prisma.$disconnect();
|
||
});
|