|
@@ -7,10 +7,12 @@ import api.common.pojo.vo.model.VehicleVO;
|
|
|
import api.common.util.*;
|
|
|
import com.css.simulation.resource.common.utils.AuthUtil;
|
|
|
import com.css.simulation.resource.common.utils.PoUtil;
|
|
|
+import com.css.simulation.resource.feign.FileDownService;
|
|
|
import com.css.simulation.resource.model.mapper.VehicleMapper;
|
|
|
import com.css.simulation.resource.util.VehicleUtil;
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import org.apache.tomcat.util.buf.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
@@ -26,6 +28,10 @@ public class VehicleService {
|
|
|
|
|
|
@Resource
|
|
|
VehicleMapper vehicleMapper;
|
|
|
+ @Resource
|
|
|
+ FileDownService fileDownService;
|
|
|
+ @Value("${par-directory}")
|
|
|
+ String parDirectory;
|
|
|
|
|
|
public List<VehicleVO> getVehicleList(@RequestBody VehicleParam vehicleParam) {
|
|
|
vehicleParam.setCreateUserId(AuthUtil.getCurrentUserId());
|
|
@@ -51,7 +57,6 @@ public class VehicleService {
|
|
|
|
|
|
public VehiclePO saveVehicle(VehicleVO vehicleVO) {
|
|
|
try {
|
|
|
-
|
|
|
VehiclePO vehiclePO = new VehiclePO();
|
|
|
ObjectUtil.voToPo(vehicleVO, vehiclePO);
|
|
|
//车辆模型字段解析
|
|
@@ -72,6 +77,130 @@ public class VehicleService {
|
|
|
String parameterType = vehicleVO.getParameterType(); //1 判断参数是 1 vtd 还是 2 carsim
|
|
|
if ("2".equals(parameterType)) {
|
|
|
VehicleUtil.listToJson(vehiclePO);
|
|
|
+ String par = FileUtil.read("/mnt/disk001/simulation-cloud/simulation-resource-server-8005/Example.par");
|
|
|
+ String replace1 = par.replaceAll("wheelCenterToTop", vehiclePO.getWheelCenterToTop());
|
|
|
+ String replace2 = replace1.replaceAll("wheelCenterToGround", vehiclePO.getWheelCenterToGround());
|
|
|
+ String replace3 = replace2.replaceAll("centroidToFrontWheelCenter", vehiclePO.getCentroidToFrontWheelCenter());
|
|
|
+ String replace4 = replace3.replaceAll("wheelbase", vehiclePO.getWheelbase().toString());
|
|
|
+ String replace5 = replace4.replaceAll("sprungMass", vehiclePO.getSprungMass());
|
|
|
+ String replace6 = replace5.replaceAll("vehicleWidth", vehiclePO.getVehicleWidth());
|
|
|
+ String replace7 = replace6.replaceAll("rotationalInertiaX", vehiclePO.getRotationalInertiaX());
|
|
|
+ String replace8 = replace7.replaceAll("rotationalInertiaY", vehiclePO.getRotationalInertiaY());
|
|
|
+ String replace9 = replace8.replaceAll("effectiveRollingRadius", vehiclePO.getFrontLeftWheelEffectiveRollingRadius());
|
|
|
+ String replace10 = replace9.replaceAll("rollingResistanceCoefficient", vehiclePO.getFrontLeftWheelRollingResistanceCoefficient());
|
|
|
+ String replace11 = replace10.replaceAll("freeRadius", vehiclePO.getFrontLeftWheelFreeRadius());
|
|
|
+ String replace12 = replace11.replaceAll("relationCurvePositiveMomentAndSideslipAngle", convertArrayToTable(vehiclePO.getFrontLeftWheelRelationCurvePositiveMomentAndSideslipAngle()));
|
|
|
+ String replace13 = replace12.replaceAll("relationCurveLateralForceAndSideslipAngle", convertArrayToTable(vehiclePO.getFrontLeftWheelRelationCurveLateralForceAndSideslipAngle()));
|
|
|
+ String replace14 = replace13.replaceAll("relationCurveLongitudinalForceAndSideslipAngle", convertArrayToTable(vehiclePO.getFrontLeftWheelRelationCurveLongitudinalForceAndSideslipAngle()));
|
|
|
+ String replace15 = replace14.replaceAll("frontWheelSuspensionKinematicsCoefficient", vehiclePO.getFrontWheelSuspensionKinematicsCoefficient());
|
|
|
+ String replace16 = replace15.replaceAll("rearWheelSuspensionKinematicsCoefficient", vehiclePO.getRearWheelSuspensionKinematicsCoefficient());
|
|
|
+ String replace17 = replace16.replaceAll("rearWheelUnsprungMass", vehiclePO.getRearWheelUnsprungMass());
|
|
|
+ String replace18 = replace17.replaceAll("frontWheelTrackWidth", vehiclePO.getFrontWheelTrackWidth());
|
|
|
+ String replace19 = replace18.replaceAll("rearWheelTrackWidth", vehiclePO.getRearWheelTrackWidth());
|
|
|
+ String replace20 = replace19.replaceAll("windwardArea", vehiclePO.getWindwardArea());
|
|
|
+ String replace21 = replace20.replaceAll("airDensity", vehiclePO.getAirDensity());
|
|
|
+ String replace22 = replace21.replaceAll("engineCrankshaftMomentInertia", vehiclePO.getEngineCrankshaftMomentInertia());
|
|
|
+ String replace23 = replace22.replaceAll("idleSpeed", vehiclePO.getIdleSpeed());
|
|
|
+ String replace24 = replace23.replaceAll("relationCurveEngineTorqueSpeedAndThrottleOpening", convertArrayToTable(vehiclePO.getRelationCurveEngineTorqueSpeedAndThrottleOpening()));
|
|
|
+ String replace25 = replace24.replaceAll("momentInertiaInputShaft", vehiclePO.getMomentInertiaInputShaft());
|
|
|
+ String replace26 = replace25.replaceAll("momentInertiaOutputShaft", vehiclePO.getMomentInertiaOutputShaft());
|
|
|
+ String replace27 = replace26.replaceAll("finalDriveRatio", vehiclePO.getFinalDriveRatio());
|
|
|
+ String replace28 = replace27.replaceAll("transmissionEfficiency", vehiclePO.getTransmissionEfficiency());
|
|
|
+
|
|
|
+ List<String> gearRatio = vehiclePO.getGearRatio();
|
|
|
+ StringBuilder gearRatioString = new StringBuilder();
|
|
|
+ for (int i = 0; i < gearRatio.size(); i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ gearRatioString.append("R_GEAR_TR_REVERSE ").append(gearRatio.get(0)).append(System.lineSeparator());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (i == 1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ gearRatioString.append("IGEAR ").append(i - 1).append(System.lineSeparator());
|
|
|
+ gearRatioString.append("R_GEAR_TR ").append(gearRatio.get(i)).append(System.lineSeparator());
|
|
|
+ gearRatioString.append("*R_GEAR_TR(").append(i - 1).append(") ").append(gearRatio.get(i)).append(System.lineSeparator());
|
|
|
+ }
|
|
|
+ String replace29 = replace28.replaceAll("gearRatio", gearRatioString.toString());
|
|
|
+
|
|
|
+ List<String> inertia = vehiclePO.getInertia();
|
|
|
+ StringBuilder inertiaString = new StringBuilder();
|
|
|
+ for (int i = 0; i < inertia.size(); i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ inertiaString.append("ITR_REVERSE ").append(inertia.get(0)).append(System.lineSeparator());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (i == 1) {
|
|
|
+ inertiaString.append("ITR_NEUTRAL ").append(inertia.get(0)).append(System.lineSeparator());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ inertiaString.append("IGEAR ").append(i - 1).append(System.lineSeparator());
|
|
|
+ inertiaString.append("ITR ").append(inertia.get(i)).append(System.lineSeparator());
|
|
|
+ inertiaString.append("*ITR(").append(i - 1).append(") ").append(inertia.get(i)).append(System.lineSeparator());
|
|
|
+ }
|
|
|
+ String replace30 = replace29.replaceAll("inertia", inertiaString.toString());
|
|
|
+
|
|
|
+ List<String> driving = vehiclePO.getDriving();
|
|
|
+ StringBuilder drivingString = new StringBuilder();
|
|
|
+ for (int i = 0; i < driving.size(); i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ drivingString.append("R_EFF_TR_F_REVERSE ").append(driving.get(0)).append(System.lineSeparator());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (i == 1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ drivingString.append("IGEAR ").append(i - 1).append(System.lineSeparator());
|
|
|
+ drivingString.append("R_EFF_TR_F ").append(driving.get(i)).append(System.lineSeparator());
|
|
|
+ drivingString.append("*R_EFF_TR_F(").append(i - 1).append(") ").append(driving.get(i)).append(System.lineSeparator());
|
|
|
+ }
|
|
|
+ String replace31 = replace30.replaceAll("driving", drivingString.toString());
|
|
|
+
|
|
|
+ List<String> coasting = vehiclePO.getDriving();
|
|
|
+ StringBuilder coastingString = new StringBuilder();
|
|
|
+ for (int i = 0; i < coasting.size(); i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ coastingString.append("R_EFF_TR_R_REVERSE ").append(coasting.get(0)).append(System.lineSeparator());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (i == 1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ coastingString.append("IGEAR ").append(i - 1).append(System.lineSeparator());
|
|
|
+ coastingString.append("R_EFF_TR_R ").append(coasting.get(i)).append(System.lineSeparator());
|
|
|
+ coastingString.append("*R_EFF_TR_R(").append(i - 1).append(") ").append(coasting.get(i)).append(System.lineSeparator());
|
|
|
+ }
|
|
|
+ String replace32 = replace31.replaceAll("coasting", coastingString.toString());
|
|
|
+ String replace33 = replace32.replaceAll("shiftTime", vehiclePO.getShiftTime());
|
|
|
+
|
|
|
+ String replace34 = replace33.replaceAll("shiftTimeUp12", convertArrayToTable(vehiclePO.getShiftTimeUp12()));
|
|
|
+ String replace35 = replace34.replaceAll("shiftTimeDown12", convertArrayToTable(vehiclePO.getShiftTimeDown12()));
|
|
|
+
|
|
|
+ String replace36 = replace35.replaceAll("shiftTimeUp23", convertArrayToTable(vehiclePO.getShiftTimeUp23()));
|
|
|
+ String replace37 = replace36.replaceAll("shiftTimeDown23", convertArrayToTable(vehiclePO.getShiftTimeDown23()));
|
|
|
+
|
|
|
+ String replace38 = replace37.replaceAll("shiftTimeUp34", convertArrayToTable(vehiclePO.getShiftTimeUp34()));
|
|
|
+ String replace39 = replace38.replaceAll("shiftTimeDown34", convertArrayToTable(vehiclePO.getShiftTimeDown34()));
|
|
|
+
|
|
|
+ String replace40 = replace39.replaceAll("shiftTimeUp45", convertArrayToTable(vehiclePO.getShiftTimeUp45()));
|
|
|
+ String replace41 = replace40.replaceAll("shiftTimeDown45", convertArrayToTable(vehiclePO.getShiftTimeDown45()));
|
|
|
+
|
|
|
+ String replace42 = replace41.replaceAll("shiftTimeUp56", convertArrayToTable(vehiclePO.getShiftTimeUp56()));
|
|
|
+ String replace43 = replace42.replaceAll("shiftTimeDown56", convertArrayToTable(vehiclePO.getShiftTimeDown56()));
|
|
|
+
|
|
|
+ String replace44 = replace43.replaceAll("frontLeftWheelBrakingTorque", vehiclePO.getFrontLeftWheelBrakingTorque());
|
|
|
+ String replace45 = replace44.replaceAll("frontRightWheelBrakingTorque", vehiclePO.getFrontRightWheelBrakingTorque());
|
|
|
+ String replace46 = replace45.replaceAll("rearLeftWheelBrakingTorque", vehiclePO.getRearLeftWheelBrakingTorque());
|
|
|
+ String replace47 = replace46.replaceAll("rearRightWheelBrakingTorque", vehiclePO.getRearRightWheelBrakingTorque());
|
|
|
+ String replace48 = replace47.replaceAll("steeringGearRatio", vehiclePO.getSteeringGearRatio());
|
|
|
+ String replace49 = replace48.replaceAll("relationCurveRightWheelAngleAndSteeringGearOutput", convertArrayToTable(vehiclePO.getRelationCurveRightWheelAngleAndSteeringGearOutput()));
|
|
|
+ String replace50 = replace49.replaceAll("relationCurveLeftWheelAngleAndSteeringGearOutput", convertArrayToTable(vehiclePO.getRelationCurveLeftWheelAngleAndSteeringGearOutput()));
|
|
|
+ String parFileName = StringUtil.getRandomEightBitUUID() + ".par";
|
|
|
+ String localParFilePath = parDirectory + parFileName;
|
|
|
+ String minioParFilePath = "/model/"+parFileName;
|
|
|
+ FileUtil.writeStringToLocalFile(replace50, localParFilePath);
|
|
|
+ fileDownService.uploadLocalFile(localParFilePath,minioParFilePath);
|
|
|
+ vehiclePO.setParFilePath(minioParFilePath);
|
|
|
}
|
|
|
if (ObjectUtil.isNull(id)) {//新增
|
|
|
vehiclePO.setId(StringUtil.getRandomUUID());
|
|
@@ -140,9 +269,10 @@ public class VehicleService {
|
|
|
String rotationalInertiaX = par.substring(par.indexOf("IXX_SU")).split("\\s")[1];
|
|
|
String rotationalInertiaY = par.substring(par.indexOf("IYY_SU")).split("\\s")[1];
|
|
|
String rotationalInertiaZ = par.substring(par.indexOf("IZZ_SU")).split("\\s")[1];
|
|
|
- String effectiveRollingRadius = par.substring(par.indexOf("RRE")).split("\\s")[1];
|
|
|
- String rollingResistanceCoefficient = par.substring(par.indexOf("RR_C")).split("\\s")[1];
|
|
|
+ String rreAll = par.substring(par.indexOf("*SET_THICKNESS"), par.indexOf("R0"));
|
|
|
+ String effectiveRollingRadius = rreAll.substring(rreAll.indexOf("RRE")).split("\\s")[1];
|
|
|
String freeRadius = par.substring(par.indexOf("R0")).split("\\s")[1];
|
|
|
+ String rollingResistanceCoefficient = par.substring(par.indexOf("RR_C")).split("\\s")[1];
|
|
|
List<List<String>> relationCurvePositiveMomentAndSideslipAngle = convertTableToArray(par.substring(par.indexOf("MZ_TIRE_CARPET 2D_FROM_ZERO")).split("ENDTABLE")[0].replace("MZ_TIRE_CARPET 2D_FROM_ZERO" + System.lineSeparator(), ""));
|
|
|
String relationCurvePositiveMomentAndSideslipAngleJson = JsonUtil.listToJson(relationCurvePositiveMomentAndSideslipAngle);
|
|
|
List<List<String>> relationCurveLateralForceAndSideslipAngle = convertTableToArray(par.substring(par.indexOf("FY_TIRE_CARPET 2D_FROM_ZERO")).split("ENDTABLE")[0].replace("FY_TIRE_CARPET 2D_FROM_ZERO" + System.lineSeparator(), ""));
|
|
@@ -151,8 +281,10 @@ public class VehicleService {
|
|
|
String relationCurveLongitudinalForceAndSideslipAngleJson = JsonUtil.listToJson(relationCurveLongitudinalForceAndSideslipAngle);
|
|
|
String frontWheelSuspensionKinematicsCoefficient = par.substring(par.indexOf("R_US_STR")).split("\\s")[1];
|
|
|
String rearWheelSuspensionKinematicsCoefficient = par.substring(par.lastIndexOf("R_US_STR")).split("\\s")[1];
|
|
|
- String frontWheelUnsprungMass = par.substring(par.indexOf("M_US")).split("\\s")[1];
|
|
|
- String rearWheelUnsprungMass = par.substring(par.lastIndexOf("M_US")).split("\\s")[1];
|
|
|
+ String frontWheelUnsprungMassAll = par.substring(par.indexOf("#FullDataName Suspension: Independent System Kinematics`C-Class, Hatchback - Front`C-Class"));
|
|
|
+ String frontWheelUnsprungMass = frontWheelUnsprungMassAll.substring(rreAll.indexOf("M_US")).split("\\s")[1];
|
|
|
+ String rearWheelUnsprungMassAll = par.substring(par.indexOf("#FullDataName Suspension: Independent System Kinematics`C-Class, Hatchback - Rear`C-Class"));
|
|
|
+ String rearWheelUnsprungMass = rearWheelUnsprungMassAll.substring(par.lastIndexOf("M_US")).split("\\s")[1];
|
|
|
String frontWheelTrackWidth = par.substring(par.indexOf("L_TRACK")).split("\\s")[1];
|
|
|
String rearWheelTrackWidth = par.substring(par.lastIndexOf("L_TRACK")).split("\\s")[1];
|
|
|
String windwardArea = par.substring(par.indexOf("AREA_AERO")).split("\\s")[1];
|
|
@@ -209,26 +341,26 @@ public class VehicleService {
|
|
|
par.substring(par.indexOf("*R_EFF_TR_R(6)")).split("\\s")[1]
|
|
|
);//R,N,1,2,3,4,5,6
|
|
|
String coastingJson = JsonUtil.listToJson(coasting);//R,N,1,2,3,4,5,6
|
|
|
- String shiftTime = par.substring(par.indexOf("T_SHIFT")).split("\\s")[1];//换挡时间
|
|
|
+ String shiftTime = par.substring(par.lastIndexOf("T_SHIFT")).split("\\s")[1];//换挡时间
|
|
|
String shiftTime12All = par.substring(
|
|
|
par.indexOf("#FullDataName Powertrain: Shift Schedule`6-speed, 1-2 Shift`6-speed"),
|
|
|
- par.indexOf("LOG_ENTRY Used Dataset: Powertrain: Shift Schedule; { 6-speed } 6-speed, 1-2 Shift")
|
|
|
+ par.indexOf("#DataSet : 6-speed, 1-2 Shift")
|
|
|
);
|
|
|
String shiftTime23All = par.substring(
|
|
|
par.indexOf("#FullDataName Powertrain: Shift Schedule`6-speed, 2-3 Shift`6-speed"),
|
|
|
- par.indexOf("LOG_ENTRY Used Dataset: Powertrain: Shift Schedule; { 6-speed } 6-speed, 2-3 Shift")
|
|
|
+ par.indexOf("#DataSet : 6-speed, 2-3 Shift")
|
|
|
);
|
|
|
String shiftTime34All = par.substring(
|
|
|
par.indexOf("#FullDataName Powertrain: Shift Schedule`6-speed, 3-4 Shift`6-speed"),
|
|
|
- par.indexOf("LOG_ENTRY Used Dataset: Powertrain: Shift Schedule; { 6-speed } 6-speed, 3-4 Shift")
|
|
|
+ par.indexOf("#DataSet : 6-speed, 3-4 Shift")
|
|
|
);
|
|
|
String shiftTime45All = par.substring(
|
|
|
par.indexOf("#FullDataName Powertrain: Shift Schedule`6-speed, 4-5 Shift`6-speed"),
|
|
|
- par.indexOf("LOG_ENTRY Used Dataset: Powertrain: Shift Schedule; { 6-speed } 6-speed, 4-5 Shift")
|
|
|
+ par.indexOf("#DataSet : 6-speed, 4-5 Shift")
|
|
|
);
|
|
|
String shiftTime56All = par.substring(
|
|
|
par.indexOf("#FullDataName Powertrain: Shift Schedule`6-speed, 5-6 Shift`6-speed"),
|
|
|
- par.indexOf("LOG_ENTRY Used Dataset: Powertrain: Shift Schedule; { 6-speed } 6-speed, 5-6 Shift")
|
|
|
+ par.indexOf("#DataSet : 6-speed, 5-6 Shift")
|
|
|
);
|
|
|
List<List<String>> shiftTimeUp12 = convertTableToArray(shiftTime12All.substring(shiftTime12All.indexOf("UPSHIFT_TRANS_TABLE")).split("ENDTABLE")[0].replace("UPSHIFT_TRANS_TABLE" + System.lineSeparator(), ""));//
|
|
|
String shiftTimeUp12Json = JsonUtil.listToJson(shiftTimeUp12);//
|
|
@@ -377,6 +509,7 @@ public class VehicleService {
|
|
|
.relationCurveLeftWheelAngleAndSteeringGearOutputJson(relationCurveLeftWheelAngleAndSteeringGearOutputJson)
|
|
|
.build();
|
|
|
|
|
|
+
|
|
|
return vehicleVO;
|
|
|
} catch (JsonProcessingException e) {
|
|
|
throw new RuntimeException(e);
|
|
@@ -395,4 +528,47 @@ public class VehicleService {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ public String convertArrayToTable(List<List<String>> array) {
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ for (List<String> strings : array) {
|
|
|
+ stringBuilder.append(strings.get(0));
|
|
|
+ for (int i = 1; i < strings.size(); i++) {
|
|
|
+ stringBuilder.append(",").append(strings.get(i));
|
|
|
+ }
|
|
|
+ stringBuilder.append(System.lineSeparator());
|
|
|
+ }
|
|
|
+ return stringBuilder.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+// /**
|
|
|
+// * 将本地文件转成MultipartFile
|
|
|
+// *
|
|
|
+// * @param path
|
|
|
+// * @return
|
|
|
+// */
|
|
|
+// public static MultipartFile toMultipartFile(String path) {
|
|
|
+// //先将本地文件转化成FileItem
|
|
|
+// FileItem fileItem = createFileItem(path);
|
|
|
+// return new CommonsMultipartFile(fileItem);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 根据filePath将puppeteer截取到的图片转成FileItem
|
|
|
+// *
|
|
|
+// * @param filePath 文件路径
|
|
|
+// * @return
|
|
|
+// */
|
|
|
+// public static FileItem createFileItem(String filePath) {
|
|
|
+// FileItem item = new DiskFileItemFactory().createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, file.getName());
|
|
|
+// try (InputStream input = new FileInputStream(file);
|
|
|
+// OutputStream os = item.getOutputStream()) {
|
|
|
+// // 流转移
|
|
|
+// IOUtils.copy(input, os);
|
|
|
+// } catch (Exception e) {
|
|
|
+// throw new IllegalArgumentException("Invalid file: " + e, e);
|
|
|
+// }
|
|
|
+//
|
|
|
+// return new CommonsMultipartFile(item);
|
|
|
+// }
|
|
|
+
|
|
|
}
|