package com.automobile.service; import com.automobile.model.Car; import com.automobile.parts.Engine; import com.automobile.parts.Piston; import com.automobile.parts.SteeringWheel; import com.automobile.parts.Seat; import com.automobile.parts.Transmission; import com.automobile.parts.Wheel; import com.automobile.system.ElectronicSystem; import com.automobile.system.ElectronicControlUnit; import java.util.ArrayList; import java.util.List; /** * 汽车维修系统类 * 展示组合关系中部件的更换和维修 */ public class MaintenanceSystem { private String garageName; private List serviceHistory; /** * 构造方法 * @param garageName 修理厂名称 */ public MaintenanceSystem(String garageName) { this.garageName = garageName; this.serviceHistory = new ArrayList<>(); } /** * 执行常规保养 * @param car 要保养的汽车 */ public void performRegularMaintenance(Car car) { System.out.println("\n===== 开始常规保养 ====="); System.out.println("车辆: " + car.getBrand() + " " + car.getModel()); // 检查和更换机油 System.out.println("更换引擎机油..."); // 检查轮胎 System.out.println("检查轮胎..."); for (int i = 0; i < car.getWheels().size(); i++) { Wheel wheel = car.getWheels().get(i); wheel.checkStatus(); wheel.adjustPressure(2.5); // 调整到标准胎压 } // 检查电子系统 System.out.println("执行电子系统诊断..."); car.getElectronicSystem().runDiagnostics(); // 记录保养 ServiceRecord record = new ServiceRecord( car.getVin(), "常规保养", "更换机油、检查轮胎、电子系统诊断" ); serviceHistory.add(record); System.out.println("===== 常规保养完成 =====\n"); } /** * 更换方向盘 * @param car 汽车 * @param newType 新方向盘类型 */ public void replaceSteeringWheel(Car car, String newType) { System.out.println("\n===== 更换方向盘 ====="); System.out.println("当前方向盘: " + car.getSteeringWheel().getType()); // 在实际应用中,这里应该创建一个新的方向盘对象并替换 // 由于Java的封装性,我们通过setter方法来修改 car.getSteeringWheel().setType(newType); System.out.println("新方向盘: " + car.getSteeringWheel().getType()); // 记录维修 ServiceRecord record = new ServiceRecord( car.getVin(), "更换方向盘", "更换为: " + newType ); serviceHistory.add(record); System.out.println("===== 方向盘更换完成 =====\n"); } /** * 更换座椅 * @param car 汽车 * @param seatIndex 要更换的座椅索引 * @param newMaterial 新材料 * @param heated 是否加热 * @param ventilated 是否通风 */ public void replaceSeat(Car car, int seatIndex, String newMaterial, boolean heated, boolean ventilated) { if (seatIndex >= 0 && seatIndex < car.getSeats().size()) { System.out.println("\n===== 更换座椅 ====="); Seat oldSeat = car.getSeats().get(seatIndex); System.out.println("当前座椅: " + oldSeat.getType() + ", " + oldSeat.getMaterial()); // 创建新座椅并替换 Seat newSeat = new Seat(oldSeat.getType()); newSeat.setMaterial(newMaterial); newSeat.setHeated(heated); newSeat.setVentilated(ventilated); // 替换座椅 car.getSeats().set(seatIndex, newSeat); System.out.println("新座椅: " + newSeat.getType() + ", " + newSeat.getMaterial() + ", 加热: " + heated + ", 通风: " + ventilated); // 记录维修 ServiceRecord record = new ServiceRecord( car.getVin(), "更换座椅", "座椅类型: " + oldSeat.getType() + ", 新材料: " + newMaterial ); serviceHistory.add(record); System.out.println("===== 座椅更换完成 =====\n"); } else { System.out.println("无效的座椅索引"); } } /** * 维修引擎 * @param car 汽车 * @param issue 问题描述 */ public void repairEngine(Car car, String issue) { System.out.println("\n===== 维修引擎 ====="); System.out.println("引擎类型: " + car.getEngine().getType()); System.out.println("问题: " + issue); // 检查活塞状态 System.out.println("检查活塞..."); for (Piston piston : car.getEngine().getPistons()) { System.out.println(piston.getStatus()); } // 模拟修复过程 System.out.println("执行引擎修复..."); System.out.println("修复完成"); // 记录维修 ServiceRecord record = new ServiceRecord( car.getVin(), "引擎维修", issue ); serviceHistory.add(record); System.out.println("===== 引擎维修完成 =====\n"); } /** * 重置电子控制单元 * @param car 汽车 * @param ecuType ECU类型 */ public void resetECU(Car car, String ecuType) { System.out.println("\n===== 重置ECU ====="); for (ElectronicControlUnit ecu : car.getElectronicSystem().getEcus()) { if (ecu.getType().contains(ecuType)) { System.out.println("重置 " + ecu.getAbbreviation() + "..."); ecu.shutdown(); ecu.initialize(); ecu.clearFault(); System.out.println("重置完成"); // 记录维修 ServiceRecord record = new ServiceRecord( car.getVin(), "重置ECU", "ECU类型: " + ecu.getType() ); serviceHistory.add(record); System.out.println("===== ECU重置完成 =====\n"); return; } } System.out.println("未找到类型为 " + ecuType + " 的ECU"); } /** * 显示维修历史 * @param vin 车辆识别号 */ public void showServiceHistory(String vin) { System.out.println("\n===== 维修历史 (" + vin + ") ====="); boolean found = false; for (ServiceRecord record : serviceHistory) { if (record.getVin().equals(vin)) { System.out.println(record.toString()); found = true; } } if (!found) { System.out.println("未找到该车辆的维修记录"); } System.out.println("========================\n"); } /** * 内部类:维修记录 */ private static class ServiceRecord { private String vin; private String serviceType; private String description; private long timestamp; public ServiceRecord(String vin, String serviceType, String description) { this.vin = vin; this.serviceType = serviceType; this.description = description; this.timestamp = System.currentTimeMillis(); } public String getVin() { return vin; } @Override public String toString() { return "时间: " + new java.util.Date(timestamp) + ", 类型: " + serviceType + ", 描述: " + description; } } }