321 lines
15 KiB
TypeScript
321 lines
15 KiB
TypeScript
// 维护记录示例数据
|
||
import { MaintenanceRecord, MaterialUsage } from '../types/machinery';
|
||
import { machineryStorage } from './machineryStorage';
|
||
|
||
/**
|
||
* 初始化维护记录示例数据
|
||
* 包含多种维护类型、配件使用、维护场景等
|
||
*/
|
||
export function initializeMaintenanceMockData() {
|
||
// 检查是否已有数据(避免重复初始化)
|
||
const allRecords = machineryStorage.getAllMaintenanceRecords();
|
||
if (allRecords.length > 0) {
|
||
return; // 已有数据
|
||
}
|
||
|
||
// 获取所有农机,为前3台农机创建维护记录
|
||
const allMachinery = machineryStorage.getAllMachinery();
|
||
if (allMachinery.length === 0) {
|
||
return; // 没有农机,无法创建维护记录
|
||
}
|
||
|
||
const mockRecords: MaintenanceRecord[] = [];
|
||
const now = new Date();
|
||
|
||
// ==================== 农机1:约翰迪尔拖拉机维护记录 ====================
|
||
if (allMachinery[0]) {
|
||
const machinery1Id = allMachinery[0].id;
|
||
|
||
// 1. 日常保养记录
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-001`,
|
||
machineryId: machinery1Id,
|
||
type: '日常保养',
|
||
startTime: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(), // 7天前
|
||
endTime: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000 + 2 * 60 * 60 * 1000).toISOString(), // 持续2小时
|
||
workHours: 2,
|
||
nextMaintenanceTime: new Date(now.getTime() + 23 * 24 * 60 * 60 * 1000).toISOString(), // 23天后
|
||
maintenanceItems: '更换机油、机油滤芯,检查空气滤芯,润滑各部位,检查轮胎气压,清洁设备外观',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-oil-001', quantity: 15 }, // 液压油 15升
|
||
{ materialId: 'material-filter-001', quantity: 2 }, // 机油滤芯 2个
|
||
],
|
||
cost: 850,
|
||
technician: '李师傅',
|
||
remarks: '定期保养,设备运行正常,无异常发现',
|
||
createdAt: new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 2. 定期维护记录
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-002`,
|
||
machineryId: machinery1Id,
|
||
type: '定期维护',
|
||
startTime: new Date(now.getTime() - 45 * 24 * 60 * 60 * 1000).toISOString(), // 45天前
|
||
endTime: new Date(now.getTime() - 45 * 24 * 60 * 60 * 1000 + 4 * 60 * 60 * 1000).toISOString(), // 持续4小时
|
||
workHours: 4,
|
||
nextMaintenanceTime: new Date(now.getTime() + 135 * 24 * 60 * 60 * 1000).toISOString(), // 135天后(半年维护)
|
||
maintenanceItems: '更换空气滤芯、燃油滤芯,检查刹车系统,调整传动皮带,检查液压系统,校准作业深度传感器,全面检查电气系统',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-filter-002', quantity: 1 }, // 空气滤芯 1个
|
||
{ materialId: 'material-filter-003', quantity: 1 }, // 燃油滤芯 1个
|
||
{ materialId: 'material-oil-001', quantity: 20 }, // 液压油 20升
|
||
{ materialId: 'material-parts-001', quantity: 2 }, // 传动皮带 2条
|
||
],
|
||
cost: 2380,
|
||
technician: '王工',
|
||
remarks: '半年度定期维护,更换了老化的传动皮带,刹车系统调整正常,液压系统压力正常',
|
||
createdAt: new Date(now.getTime() - 45 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 3. 故障维修记录
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-003`,
|
||
machineryId: machinery1Id,
|
||
type: '故障维修',
|
||
startTime: new Date(now.getTime() - 20 * 24 * 60 * 60 * 1000).toISOString(), // 20天前
|
||
endTime: new Date(now.getTime() - 20 * 24 * 60 * 60 * 1000 + 6 * 60 * 60 * 1000).toISOString(), // 持续6小时
|
||
workHours: 6,
|
||
maintenanceItems: '修复液压系统漏油问题,更换损坏的油封和O型圈,检查并紧固各连接部位,清洗液压油箱,补充液压油',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-parts-002', quantity: 3 }, // 油封 3个
|
||
{ materialId: 'material-parts-003', quantity: 5 }, // O型圈 5个
|
||
{ materialId: 'material-oil-001', quantity: 8 }, // 液压油 8升
|
||
],
|
||
cost: 1560,
|
||
technician: '李师傅、张技师',
|
||
remarks: '发现液压油管接头处油封老化导致漏油,已更换新油封,测试正常。建议加强日常检查。',
|
||
createdAt: new Date(now.getTime() - 20 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 4. 年检记录
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-004`,
|
||
machineryId: machinery1Id,
|
||
type: '年检',
|
||
startTime: new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000).toISOString(), // 90天前
|
||
endTime: new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000 + 3 * 60 * 60 * 1000).toISOString(), // 持续3小时
|
||
workHours: 3,
|
||
nextMaintenanceTime: new Date(now.getTime() + 275 * 24 * 60 * 60 * 1000).toISOString(), // 275天后(下次年检)
|
||
maintenanceItems: '年度安全检查,排放检测,噪音测试,制动性能测试,灯光系统检查,安全装置检查,更换易损件',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-parts-004', quantity: 4 }, // 刹车片 4片
|
||
{ materialId: 'material-parts-005', quantity: 2 }, // 灯泡 2个
|
||
],
|
||
cost: 1200,
|
||
technician: '农机监理站-刘检验员',
|
||
remarks: '年检合格,所有安全项目符合标准。建议更换刹车片,已现场更换。年检证书编号:AJ-2024-001',
|
||
createdAt: new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
}
|
||
|
||
// ==================== 农机2:收割机维护记录 ====================
|
||
if (allMachinery[1]) {
|
||
const machinery2Id = allMachinery[1].id;
|
||
|
||
// 1. 作业季前检修
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-005`,
|
||
machineryId: machinery2Id,
|
||
type: '定期维护',
|
||
startTime: new Date(now.getTime() - 60 * 24 * 60 * 60 * 1000).toISOString(), // 60天前
|
||
endTime: new Date(now.getTime() - 60 * 24 * 60 * 60 * 1000 + 8 * 60 * 60 * 1000).toISOString(), // 持续8小时
|
||
workHours: 8,
|
||
nextMaintenanceTime: new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000).toISOString(),
|
||
maintenanceItems: '收获季节前全面检修:更换刀片组件,调整脱粒滚筒间隙,清理筛网,检查传动链条张紧度,润滑各轴承点,检查液压升降系统,更换磨损严重的传动带',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-parts-006', quantity: 8 }, // 收割刀片 8片
|
||
{ materialId: 'material-parts-001', quantity: 3 }, // 传动皮带 3条
|
||
{ materialId: 'material-oil-002', quantity: 5 }, // 齿轮油 5升
|
||
{ materialId: 'material-parts-007', quantity: 1 }, // 传动链条 1条
|
||
],
|
||
cost: 4200,
|
||
technician: '赵师傅、孙师傅',
|
||
remarks: '收获季节前全面检修,刀片已全部更换为新件,脱粒系统调整到最佳状态,试运行正常。',
|
||
createdAt: new Date(now.getTime() - 60 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 2. 作业中故障抢修
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-006`,
|
||
machineryId: machinery2Id,
|
||
type: '故障维修',
|
||
startTime: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString(), // 30天前
|
||
endTime: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000 + 5 * 60 * 60 * 1000).toISOString(), // 持续5小时
|
||
workHours: 5,
|
||
maintenanceItems: '紧急抢修:更换损坏的传动轴承,修复电气线路短路问题,调整清粮风机,紧固松动的螺栓',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-parts-008', quantity: 2 }, // 轴承 2个
|
||
{ materialId: 'material-parts-009', quantity: 10 }, // 电线 10米
|
||
{ materialId: 'material-parts-010', quantity: 20 }, // 螺栓螺母 20套
|
||
],
|
||
cost: 1850,
|
||
technician: '李师傅、王工(紧急出车)',
|
||
remarks: '收割作业中突发故障,传动轴承损坏导致异响。现场紧急更换轴承,检查发现部分电气线路老化短路,一并处理。抢修后恢复作业。',
|
||
createdAt: new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 3. 作业季后保养
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-007`,
|
||
machineryId: machinery2Id,
|
||
type: '日常保养',
|
||
startTime: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString(), // 10天前
|
||
endTime: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000 + 4 * 60 * 60 * 1000).toISOString(), // 持续4小时
|
||
workHours: 4,
|
||
nextMaintenanceTime: new Date(now.getTime() + 20 * 24 * 60 * 60 * 1000).toISOString(),
|
||
maintenanceItems: '收获季节后保养:全面清理机身杂物和积尘,更换机油和滤芯,检查所有润滑点,防锈处理,存放准备',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-oil-003', quantity: 18 }, // 机油 18升
|
||
{ materialId: 'material-filter-001', quantity: 1 }, // 机油滤芯 1个
|
||
{ materialId: 'material-filter-002', quantity: 1 }, // 空气滤芯 1个
|
||
{ materialId: 'material-parts-011', quantity: 2 }, // 防锈剂 2瓶
|
||
],
|
||
cost: 950,
|
||
technician: '张师傅',
|
||
remarks: '收获季节结束后的保养,设备已清洗干净,关键部位已涂抹防锈剂,准备入库存放。',
|
||
createdAt: new Date(now.getTime() - 10 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
}
|
||
|
||
// ==================== 农机3:播种机维护记录 ====================
|
||
if (allMachinery[2]) {
|
||
const machinery3Id = allMachinery[2].id;
|
||
|
||
// 1. 播种前调试
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-008`,
|
||
machineryId: machinery3Id,
|
||
type: '定期维护',
|
||
startTime: new Date(now.getTime() - 50 * 24 * 60 * 60 * 1000).toISOString(), // 50天前
|
||
endTime: new Date(now.getTime() - 50 * 24 * 60 * 60 * 1000 + 3 * 60 * 60 * 1000).toISOString(), // 持续3小时
|
||
workHours: 3,
|
||
nextMaintenanceTime: new Date(now.getTime() + 40 * 24 * 60 * 60 * 1000).toISOString(),
|
||
maintenanceItems: '播种前调试:检查并调整排种器间距,校准播种深度,检查施肥装置,清洗种子箱,润滑传动部件,调整镇压轮',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-parts-012', quantity: 6 }, // 排种轮 6个
|
||
{ materialId: 'material-oil-004', quantity: 3 }, // 润滑脂 3kg
|
||
],
|
||
cost: 680,
|
||
technician: '赵师傅',
|
||
remarks: '播种前例行调试,排种器调整到最佳状态,播种深度校准完成,试播效果良好。',
|
||
createdAt: new Date(now.getTime() - 50 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 2. 日常保养
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-009`,
|
||
machineryId: machinery3Id,
|
||
type: '日常保养',
|
||
startTime: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000).toISOString(), // 15天前
|
||
endTime: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000 + 2 * 60 * 60 * 1000).toISOString(), // 持续2小时
|
||
workHours: 2,
|
||
nextMaintenanceTime: new Date(now.getTime() + 15 * 24 * 60 * 60 * 1000).toISOString(),
|
||
maintenanceItems: '作业中保养:清理种子箱残留,检查排种器磨损情况,润滑各活动部件,紧固松动螺栓',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-oil-004', quantity: 1 }, // 润滑脂 1kg
|
||
],
|
||
cost: 150,
|
||
technician: '李师傅',
|
||
remarks: '播种作业中的日常保养,设备运行正常,无异常磨损。',
|
||
createdAt: new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
|
||
// 3. 小修记录
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-010`,
|
||
machineryId: machinery3Id,
|
||
type: '故障维修',
|
||
startTime: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(), // 5天前
|
||
endTime: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000 + 1.5 * 60 * 60 * 1000).toISOString(), // 持续1.5小时
|
||
workHours: 1.5,
|
||
maintenanceItems: '更换磨损的开沟器刀片,调整施肥管道,修复堵塞的排种孔',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-parts-013', quantity: 4 }, // 开沟器刀片 4个
|
||
],
|
||
cost: 420,
|
||
technician: '张师傅',
|
||
remarks: '开沟器刀片磨损严重影响作业质量,现场更换新刀片,调整后播种深度一致性良好。',
|
||
createdAt: new Date(now.getTime() - 5 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
}
|
||
|
||
// ==================== 通用维护案例 ====================
|
||
// 如果有更多农机,添加更多示例
|
||
if (allMachinery[3]) {
|
||
const machinery4Id = allMachinery[3].id;
|
||
|
||
// 预防性维护示例
|
||
mockRecords.push({
|
||
id: `maintenance-${Date.now()}-011`,
|
||
machineryId: machinery4Id,
|
||
type: '定期维护',
|
||
startTime: new Date(now.getTime() - 25 * 24 * 60 * 60 * 1000).toISOString(),
|
||
endTime: new Date(now.getTime() - 25 * 24 * 60 * 60 * 1000 + 3 * 60 * 60 * 1000).toISOString(),
|
||
workHours: 3,
|
||
nextMaintenanceTime: new Date(now.getTime() + 65 * 24 * 60 * 60 * 1000).toISOString(),
|
||
maintenanceItems: '预防性维护:全面检查关键部件,更换易损件,系统清洁,性能测试',
|
||
partsAndMaterials: [
|
||
{ materialId: 'material-filter-001', quantity: 1 },
|
||
{ materialId: 'material-filter-002', quantity: 1 },
|
||
{ materialId: 'material-oil-001', quantity: 10 },
|
||
],
|
||
cost: 1100,
|
||
technician: '王工',
|
||
remarks: '按照预防性维护计划执行,提前发现并处理了潜在故障点,确保设备可靠运行。',
|
||
createdAt: new Date(now.getTime() - 25 * 24 * 60 * 60 * 1000).toISOString(),
|
||
createdBy: '系统管理员',
|
||
});
|
||
}
|
||
|
||
// 保存所有维护记录
|
||
mockRecords.forEach(record => {
|
||
machineryStorage.saveMaintenanceRecord(record);
|
||
});
|
||
|
||
console.log(`✅ 已初始化 ${mockRecords.length} 条维护记录示例数据`);
|
||
}
|
||
|
||
/**
|
||
* 清除所有维护记录(仅用于测试)
|
||
*/
|
||
export function clearMaintenanceRecords() {
|
||
localStorage.removeItem('smart_agriculture_machinery_maintenance');
|
||
console.log('🗑️ 已清除所有维护记录');
|
||
}
|
||
|
||
/**
|
||
* 获取维护记录统计信息
|
||
*/
|
||
export function getMaintenanceStatistics() {
|
||
const records = machineryStorage.getAllMaintenanceRecords();
|
||
|
||
const stats = {
|
||
total: records.length,
|
||
byType: {
|
||
'日常保养': records.filter(r => r.type === '日常保养').length,
|
||
'定期维护': records.filter(r => r.type === '定期维护').length,
|
||
'故障维修': records.filter(r => r.type === '故障维修').length,
|
||
'年检': records.filter(r => r.type === '年检').length,
|
||
},
|
||
totalCost: records.reduce((sum, r) => sum + r.cost, 0),
|
||
totalWorkHours: records.reduce((sum, r) => sum + r.workHours, 0),
|
||
avgCostPerRecord: records.length > 0 ? records.reduce((sum, r) => sum + r.cost, 0) / records.length : 0,
|
||
recentRecords: records
|
||
.sort((a, b) => new Date(b.startTime).getTime() - new Date(a.startTime).getTime())
|
||
.slice(0, 5),
|
||
};
|
||
|
||
return stats;
|
||
}
|