Xiajijian
2026-03-16 0ab71d4f9154dc2a0306ea57ec08659f4e28e449
ard-route/src/main/java/com/ard/route/util/ToolUtils.java
@@ -1,12 +1,23 @@
package com.ard.route.util;
import com.ard.inspection.domain.ArdPointCloud;
import com.ard.route.domain.djuav.UavRouteReq;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
 * 工具类
 */
public class ToolUtils {
    public static String kmzPath = "kmz";
    /**
     * XML 头部
     */
    public static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
    /**
     * 生成KMZ文件名称规则
@@ -40,4 +51,129 @@
        return fileNameWithExt;
    }
    /**
     * 从URL中提取文件路径部分
     * @param url 完整的URL字符串
     * @return 文件路径部分
     */
    public static String extractFilePath(String url) {
        if (url == null || url.isEmpty()) {
            return "";
        }
        // 找到最后一个 "kmz/" 的位置,加上4以包含 "kmz/"
        int index = url.lastIndexOf("kmz/");
        if (index != -1) {
            return url.substring(index + 4); // +4 跳过 "kmz/"
        }
        // 如果没有找到 "kmz/",尝试其他方式
        return extractPathByDomain(url);
    }
    /**
     * 备选方法:通过域名后的第一个斜杠来提取
     */
    private static String extractPathByDomain(String url) {
        // 移除协议头
        String withoutProtocol = url.replaceFirst("^https?://", "");
        // 找到第一个斜杠位置
        int slashIndex = withoutProtocol.indexOf("/");
        if (slashIndex != -1) {
            return withoutProtocol.substring(slashIndex + 1);
        }
        return "";
    }
    // 对象序列化为字节数组
    public static byte[] serialize(Object obj) throws IOException {
        if (obj == null) {
            return null;
        }
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
             ObjectOutputStream oos = new ObjectOutputStream(baos)) {
            oos.writeObject(obj);
            return baos.toByteArray();
        }
    }
    // 字节数组反序列化为对象
    public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
        try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
             ObjectInputStream ois = new ObjectInputStream(bais)) {
            return ois.readObject();
        }
    }
    public static List<ArdPointCloud> deserializeLs(byte[] data) throws IOException, ClassNotFoundException {
        try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
             ObjectInputStream ois = new ObjectInputStream(bais)) {
            return (List<ArdPointCloud>) ois.readObject();
        }
    }
    /**
     * 截取字符串
     * 参数: https://xxx.xxx.xxx.xxx:xxx/kmz/2025/11/08/文件名_20251108152249A001.kmz
     */
    public static String subStringMinioName(String url) {
        return new File(url).getName();
    }
    /**
     * 截取字符串
     * minio里面文件夹路径名称
     */
    public static String subStringMinioUrlName(String url) {
        int kmzIndex = url.indexOf("/kmz/");
        return url.substring(kmzIndex + 5); // +5 是为了跳过 "/kmz/"
    }
    /**
     * 截取字符串
     * 参数: "0-89-0"
     */
    public static Integer subStringDroneType(String str) {
        String[] parts = str.split("-");
        return Integer.valueOf(parts[1]);
    }
    /**
     * 截取字符串
     * 获取经纬度高度
     */
    public static Double getDoublePoint(String str,String type) {
        if (str == null || str.isEmpty()) {
            return null;
        }
        String[] parts = str.split(",");
        if ("lon".equals(type)) {
            return Double.parseDouble(parts[0].trim());
        }
        if ("lat".equals(type)){
            return Double.parseDouble(parts[1].trim());
        }
        if ("alt".equals(type)){
            return Double.parseDouble(parts[2].trim());
        }
        return null;
    }
    /**
     * 获取航线类型方法
     */
    public static String templateTypeData(UavRouteReq uavRouteReq) {
        if ("waypoint".equals(uavRouteReq.getTemplateType())){
            return "0";
        }
        return "1";
    }
    /**
     * 获取无人机类型方法
     */
    public static String droneTypeData(UavRouteReq uavRouteReq) {
        return "0-" + uavRouteReq.getDroneType() + "-0";
    }
}