root 2 gadi atpakaļ
vecāks
revīzija
63ab11b3a0

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/model/VehiclePO.java

@@ -147,5 +147,6 @@ public class VehiclePO extends CommonPO {
     private String relationCurveRightWheelAngleAndSteeringGearOutputJson;//右轮转角与转向器输出的关系
     private List<List<String>> relationCurveLeftWheelAngleAndSteeringGearOutput;//左轮转角与转向器输出的关系
     private String relationCurveLeftWheelAngleAndSteeringGearOutputJson;//左轮转角与转向器输出的关系
+    private String parFilePath;
 
 }

+ 38 - 38
api-common/src/main/java/api/common/pojo/vo/model/VehicleVO.java

@@ -43,30 +43,30 @@ public class VehicleVO {
     private BigDecimal heightDistance;    //车高(米)
     private BigDecimal wheelbase;    //轴距(米)
     //* -------------------------------- carsim --------------------------------
-    private String wheelCenterToTop;//轮胎中心到车顶的高度 HT_SM/mm
-    private String wheelCenterToGround;//轮胎中心到地面的高度
-    private String centroidToFrontWheelCenter;//质心到前轮中心的距离
-    private String centroidToGround;//质心到地面
-    //    private String wheelbase;//轴距
-    private String sprungMass;//簧上质量
-    private String vehicleWidth;//车辆宽度
-    private String rotationalInertiaX;//整车绕x轴转动惯量
-    private String rotationalInertiaY;//整车绕y轴转动惯量
-    private String rotationalInertiaZ;//整车绕z轴转动惯量
+    private String wheelCenterToTop;//轮胎中心到车顶的高度 HT_SM、Z_LENGTH
+    private String wheelCenterToGround;//轮胎中心到地面的高度 HWC_LF、HWC_RF、HWC_LR、HWC_RR
+    private String centroidToFrontWheelCenter;//质心到前轮中心的距离 LX_CG_SU
+    private String centroidToGround;//质心到地面 H_CG_SU
+    //    private String wheelbase;//轴距 LX_AXLE X_LENGTH
+    private String sprungMass;//簧上质量 M_SU
+    private String vehicleWidth;//车辆宽度 WID_SM Y_LENGTH
+    private String rotationalInertiaX;//整车绕x轴转动惯量 IXX_SU
+    private String rotationalInertiaY;//整车绕y轴转动惯量 IYY_SU
+    private String rotationalInertiaZ;//整车绕z轴转动惯量 IZZ_SU
 
-    private String frontLeftWheelEffectiveRollingRadius;//左前轮有效滚动半径
-    private String frontLeftWheelRollingResistanceCoefficient;//左前轮滚动阻力系数
-    private String frontLeftWheelFreeRadius;//左前轮自由半径
-    private List<List<String>> frontLeftWheelRelationCurvePositiveMomentAndSideslipAngle;//左前轮不同载荷下正力矩和侧偏角关系曲线
+    private String frontLeftWheelEffectiveRollingRadius;//左前轮有效滚动半径 RRE
+    private String frontLeftWheelRollingResistanceCoefficient;//左前轮滚动阻力系数 RR_C
+    private String frontLeftWheelFreeRadius;//左前轮自由半径 R0、X_LENGTH、Z_LENGTH
+    private List<List<String>> frontLeftWheelRelationCurvePositiveMomentAndSideslipAngle;//左前轮不同载荷下正力矩和侧偏角关系曲线 MZ_TIRE_CARPET 2D_FROM_ZERO
     private String frontLeftWheelRelationCurvePositiveMomentAndSideslipAngleJson;//左前轮不同载荷下正力矩和侧偏角关系曲线
-    private List<List<String>> frontLeftWheelRelationCurveLateralForceAndSideslipAngle;//左前轮不同载荷下侧向力和侧偏角关系曲线
+    private List<List<String>> frontLeftWheelRelationCurveLateralForceAndSideslipAngle;//左前轮不同载荷下侧向力和侧偏角关系曲线    FY_TIRE_CARPET 2D_FROM_ZERO
     private String frontLeftWheelRelationCurveLateralForceAndSideslipAngleJson;//左前轮不同载荷下侧向力和侧偏角关系曲线
-    private List<List<String>> frontLeftWheelRelationCurveLongitudinalForceAndSideslipAngle;//左前轮不同载荷下纵向力和侧偏角关系曲线
+    private List<List<String>> frontLeftWheelRelationCurveLongitudinalForceAndSideslipAngle;//左前轮不同载荷下纵向力和侧偏角关系曲线   FX_TIRE_CARPET 2D_FROM_ZERO
     private String frontLeftWheelRelationCurveLongitudinalForceAndSideslipAngleJson;//左前轮不同载荷下纵向力和侧偏角关系曲线
 
-    private String rearLeftWheelEffectiveRollingRadius;//左前轮有效滚动半径
-    private String rearLeftWheelRollingResistanceCoefficient;//左前轮滚动阻力系数
-    private String rearLeftWheelFreeRadius;//左前轮自由半径
+    private String rearLeftWheelEffectiveRollingRadius;//左前轮有效滚动半径 RRE
+    private String rearLeftWheelRollingResistanceCoefficient;//左前轮滚动阻力系数 RR_C
+    private String rearLeftWheelFreeRadius;//左前轮自由半径 R0、X_LENGTH、Z_LENGTH
     private List<List<String>> rearLeftWheelRelationCurvePositiveMomentAndSideslipAngle;//左后轮不同载荷下正力矩和侧偏角关系曲线
     private String rearLeftWheelRelationCurvePositiveMomentAndSideslipAngleJson;//左后轮不同载荷下正力矩和侧偏角关系曲线
     private List<List<String>> rearLeftWheelRelationCurveLateralForceAndSideslipAngle;//左后轮不同载荷下侧向力和侧偏角关系曲线
@@ -74,9 +74,9 @@ public class VehicleVO {
     private List<List<String>> rearLeftWheelRelationCurveLongitudinalForceAndSideslipAngle;//左后轮不同载荷下纵向力和侧偏角关系曲线
     private String rearLeftWheelRelationCurveLongitudinalForceAndSideslipAngleJson;//左后轮不同载荷下纵向力和侧偏角关系曲线
 
-    private String frontRightWheelEffectiveRollingRadius;//右前轮有效滚动半径
-    private String frontRightWheelRollingResistanceCoefficient;//右前轮滚动阻力系数
-    private String frontRightWheelFreeRadius;//右前轮自由半径
+    private String frontRightWheelEffectiveRollingRadius;//右前轮有效滚动半径 RRE
+    private String frontRightWheelRollingResistanceCoefficient;//右前轮滚动阻力系数 RR_C
+    private String frontRightWheelFreeRadius;//右前轮自由半径 R0、X_LENGTH、Z_LENGTH
     private List<List<String>> frontRightWheelRelationCurvePositiveMomentAndSideslipAngle;//右前轮不同载荷下正力矩和侧偏角关系曲线
     private String frontRightWheelRelationCurvePositiveMomentAndSideslipAngleJson;//右前轮不同载荷下正力矩和侧偏角关系曲线
     private List<List<String>> frontRightWheelRelationCurveLateralForceAndSideslipAngle;//右前轮不同载荷下侧向力和侧偏角关系曲线
@@ -84,9 +84,9 @@ public class VehicleVO {
     private List<List<String>> frontRightWheelRelationCurveLongitudinalForceAndSideslipAngle;//右前轮不同载荷下纵向力和侧偏角关系曲线
     private String frontRightWheelRelationCurveLongitudinalForceAndSideslipAngleJson;//右前轮不同载荷下纵向力和侧偏角关系曲线
 
-    private String rearRightWheelEffectiveRollingRadius;//右后轮有效滚动半径
-    private String rearRightWheelRollingResistanceCoefficient;//右后轮滚动阻力系数
-    private String rearRightWheelFreeRadius;//右后轮自由半径
+    private String rearRightWheelEffectiveRollingRadius;//右后轮有效滚动半径 RRE
+    private String rearRightWheelRollingResistanceCoefficient;//右后轮滚动阻力系数 RR_C
+    private String rearRightWheelFreeRadius;//右后轮自由半径 R0、X_LENGTH、Z_LENGTH
     private List<List<String>> rearRightWheelRelationCurvePositiveMomentAndSideslipAngle;//右后轮不同载荷下正力矩和侧偏角关系曲线
     private String rearRightWheelRelationCurvePositiveMomentAndSideslipAngleJson;//右后轮不同载荷下正力矩和侧偏角关系曲线
     private List<List<String>> rearRightWheelRelationCurveLateralForceAndSideslipAngle;//右后轮不同载荷下侧向力和侧偏角关系曲线
@@ -95,12 +95,12 @@ public class VehicleVO {
     private String rearRightWheelRelationCurveLongitudinalForceAndSideslipAngleJson;//右后轮不同载荷下纵向力和侧偏角关系曲线
 
     private String frontWheelSuspensionType;//前轮悬架类型 1 独立悬架 2 非独立悬架
-    private String frontWheelSuspensionKinematicsCoefficient;//前轮悬架运动学系数
-    private String frontWheelUnsprungMass;//前轮簧下质量
-    private String frontWheelTrackWidth;//前轮轮距
     private String rearWheelSuspensionType;//后轮悬架类型 1 独立悬架 2 非独立悬架
+    private String frontWheelSuspensionKinematicsCoefficient;//前轮悬架运动学系数
     private String rearWheelSuspensionKinematicsCoefficient;//后轮悬架运动学系数
+    private String frontWheelUnsprungMass;//前轮簧下质量
     private String rearWheelUnsprungMass;//后轮簧下质量
+    private String frontWheelTrackWidth;//前轮轮距
     private String rearWheelTrackWidth;//后轮轮距
     private String windwardArea;//迎风面积
     private String airDensity;//空气密度
@@ -110,15 +110,15 @@ public class VehicleVO {
     private String relationCurveEngineTorqueSpeedAndThrottleOpeningJson;//发动机扭矩、转速和节气门开度关系曲线
     private String momentInertiaInputShaft;//输入轴的转动惯量
     private String momentInertiaOutputShaft;//输出轴的转动惯量
-    private String finalDriveRatio;//主减速器传动比
-    private String transmissionEfficiency;//传动效率
-    private List<String> gearRatio;//R,N,1,2,3,4,5,6
+    private String finalDriveRatio;//主减速器传动比 R_GEAR_DIFF R_GEAR_FD
+    private String transmissionEfficiency;//传动效率 R_EFF_F_DIFF、R_EFF_F_FD
+    private List<String> gearRatio;// *R_GEAR_TR(2)、R_GEAR_TR(2)
     private String gearRatioJson;//R,N,1,2,3,4,5,6
-    private List<String> inertia;//R,N,1,2,3,4,5,6
+    private List<String> inertia;// *ITR(2) 、ITR(2)
     private String inertiaJson;//R,N,1,2,3,4,5,6
-    private List<String> driving;//R,N,1,2,3,4,5,6
+    private List<String> driving;// *R_EFF_TR_F(1) 、R_EFF_TR_F(1)
     private String drivingJson;//R,N,1,2,3,4,5,6
-    private List<String> coasting;//R,N,1,2,3,4,5,6
+    private List<String> coasting;//R,N,1,2,3,4,5,6 R_EFF_TR_R *R_EFF_TR_R
     private String coastingJson;//R,N,1,2,3,4,5,6
     private String shiftTime;//换挡时间
     private List<List<String>> shiftTimeUp12;//
@@ -142,10 +142,10 @@ public class VehicleVO {
     private List<List<String>> shiftTimeDown56;//
     private String shiftTimeDown56Json;//
     private String brakeType;//制动类型 1 前轮制动 2 后轮制动 3 四轮制动
-    private String frontLeftWheelBrakingTorque;//左前轮制动力矩
-    private String rearLeftWheelBrakingTorque;//左后轮制动力矩
-    private String frontRightWheelBrakingTorque;//右前轮制动力矩
-    private String rearRightWheelBrakingTorque;//右后轮制动力矩
+    private String frontLeftWheelBrakingTorque;//左前轮制动力矩    *TQ_L1、MY_BREAK_COEFFICIENT
+    private String frontRightWheelBrakingTorque;//右前轮制动力矩   *TQ_L1、MY_BREAK_COEFFICIENT
+    private String rearLeftWheelBrakingTorque;//左后轮制动力矩     *TQ_L2、MY_BREAK_COEFFICIENT
+    private String rearRightWheelBrakingTorque;//右后轮制动力矩    *TQ_L2、MY_BREAK_COEFFICIENT
     private String steeringType;//转向类型 1 前轮转向 2 后轮转向 3 四轮转向
     private String steeringGearType;//转向器类型 1 齿轮齿条转向器 2 循环球式转向器
     private String steeringGearRatio;//转向器传动比

+ 17 - 0
simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/MinioController.java

@@ -65,6 +65,23 @@ public class MinioController {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, "请求成功!", previewUrl);
     }
 
+    @GetMapping(value = "/uploadLocalFile")
+    public ResponseBodyVO<String> uploadLocalFile(
+            @RequestParam("localFilePath") String localFilePath,
+            @RequestParam("objectName") String objectName//  "/xx/xxx/x/xx"
+    ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
+        MinioUtil.uploadFromFile(
+                minioClientPrivate,
+                localFilePath,
+                minioConfiguration.getBucketName(),
+                objectName
+        );
+//        String previewUrl = MinioUtil.getPreviewUrl(minioClientPublic, Method.GET, minioConfiguration.getBucketName(), objectName);
+        String previewUrl = MinioUtil.getPublicPreviewUrl(minioClientPrivate, Method.GET, minioConfiguration.getBucketName(), objectName,
+                minioConfiguration.getEndpointPrivate(), minioConfiguration.getEndpointPublic());
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, "请求成功!", previewUrl);
+    }
+
 
     @PostMapping("/list")
     @SneakyThrows

+ 4 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/FileDownService.java

@@ -2,7 +2,6 @@ package com.css.simulation.resource.feign;
 
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.MinioParameter;
-import api.common.pojo.param.RedisParameter;
 import com.css.simulation.resource.common.config.FeignConfiguration;
 import com.css.simulation.resource.feign.fallback.FileDownServiceFallback;
 import feign.Response;
@@ -29,6 +28,10 @@ public interface FileDownService {
     ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
                                   @RequestParam("objectName") String objectName);
 
+    @PostMapping(value = "/minio/uploadLocalFile")
+    ResponseBodyVO<String> uploadLocalFile(@RequestParam("localFilePath") String localFilePath,
+                                  @RequestParam("objectName") String objectName);
+
     @PostMapping(value = "/minio/uploadProcessBar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     ResponseBodyVO<String> uploadProcessBar(@RequestPart("file") MultipartFile file,
                                             @RequestParam("objectName") String objectName,

+ 187 - 11
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java

@@ -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);
+//    }
+
 }