Files
smart-crop-ui/src/lib/maintenanceMockData.ts

321 lines
15 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 维护记录示例数据
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;
}