93 lines
2.9 KiB
Java
93 lines
2.9 KiB
Java
package com.muyu.web.utils;
|
||
|
||
import com.muyu.web.domain.model.PositionModel;
|
||
|
||
import java.math.BigDecimal;
|
||
import java.math.RoundingMode;
|
||
import java.util.Random;
|
||
|
||
public class VehicleUtils {
|
||
|
||
/**
|
||
* 生成VIN
|
||
* @return 返回结果对象
|
||
*/
|
||
public static String genVin() {
|
||
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||
Random random = new Random();
|
||
StringBuilder sb = new StringBuilder(17);
|
||
for (int i = 0; i < 17; i++) {
|
||
int index = (int) (random.nextFloat() * characters.length());
|
||
sb.append(characters.charAt(index));
|
||
}
|
||
return sb.toString();
|
||
}
|
||
|
||
private static Random random = new Random();
|
||
|
||
/**
|
||
* 生成电池额度
|
||
* @return 电池额度
|
||
*/
|
||
public static BigDecimal genBattery(){
|
||
return BigDecimal.valueOf(random.nextInt(60, 80) * 1000L);
|
||
}
|
||
|
||
|
||
/**
|
||
* 两点之间的距离
|
||
* @param startPositionModel 开始定位点
|
||
* @param endPositionModel 结束定位点
|
||
* @return
|
||
*/
|
||
public static BigDecimal distance(PositionModel startPositionModel, PositionModel endPositionModel){
|
||
double lon1 = Double.parseDouble(startPositionModel.getLongitude());
|
||
double lat1 = Double.parseDouble(startPositionModel.getLatitude());
|
||
double lon2 = Double.parseDouble(endPositionModel.getLongitude());
|
||
double lat2 = Double.parseDouble(endPositionModel.getLatitude());
|
||
double lon1Rad = Math.toRadians(lon1);
|
||
double lat1Rad = Math.toRadians(lat1);
|
||
double lon2Rad = Math.toRadians(lon2);
|
||
double lat2Rad = Math.toRadians(lat2);
|
||
double earthRadius = 6371; // 地球半径(以公里为单位)
|
||
|
||
double latDiff = lat2Rad - lat1Rad;
|
||
double lonDiff = lon2Rad - lon1Rad;
|
||
|
||
double a = Math.sin(latDiff / 2) * Math.sin(latDiff / 2) +
|
||
Math.cos(lat1Rad) * Math.cos(lat2Rad) *
|
||
Math.sin(lonDiff / 2) * Math.sin(lonDiff / 2);
|
||
|
||
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
||
|
||
double distance = earthRadius * c;
|
||
return BigDecimal.valueOf(distance).setScale(2, RoundingMode.HALF_UP);
|
||
}
|
||
|
||
/**
|
||
* 生成电池浮动
|
||
* @return 电池浮动值
|
||
*/
|
||
public static BigDecimal batteryFloat(){
|
||
Random rand = new Random();
|
||
// 生成0.00-0.31之间的随机数
|
||
double num = rand.nextDouble() * 0.31;
|
||
// 加上0.90,得到0.90-1.21之间的随机数
|
||
num += 0.90;
|
||
// 保留两位小数
|
||
num = (double) Math.round(num * 100) / 100;
|
||
return BigDecimal.valueOf(num);
|
||
}
|
||
|
||
/**
|
||
* 给予开始和结束的值生成数据
|
||
* @param start 起始范围
|
||
* @param end 截止范围
|
||
* @return 返回结果
|
||
*/
|
||
public static String genValue(int start, int end){
|
||
Random rand = new Random();
|
||
return String.valueOf(rand.nextInt(start, end));
|
||
}
|
||
}
|