吉安感知网项目-后端
linwei
2026-04-24 a615f757084e4d11a90ed42698b8a8cbcc083cb8
fix: 添加成果类型字段,视频或者图片
3 files modified
124 ■■■■■ changed files
drone-common/src/main/java/org/sxkj/common/utils/HeaderUtils.java 115 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdTaskResultEntity.java 5 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java 4 ●●●● patch | view | raw | blame | history
drone-common/src/main/java/org/sxkj/common/utils/HeaderUtils.java
@@ -223,6 +223,121 @@
    }
    /**
     * 根据URL获取附件类型
     * 通过文件扩展名判断附件类型:
     * - 图片类型:jpg, jpeg, png, gif, bmp, webp, svg 等 -> 返回 1
     * - 视频类型:mp4, avi, mov, wmv, flv, mkv, mpeg, mpg 等 -> 返回 2
     * - 文档类型:pdf, doc, docx, xls, xlsx, ppt, pptx, txt 等 -> 返回 3
     * - 其他类型 -> 返回 0
     *
     * @param url 文件URL地址
     * @return 附件类型:1-图片,2-视频,3-文档,0-其他
     */
    public static Integer getAttachmentType(String url) {
        if (StringUtils.isEmpty(url)) {
            return 0;
        }
        // 提取文件扩展名
        String extension = getFileExtension(url);
        if (StringUtils.isEmpty(extension)) {
            return 0;
        }
        // 转换为小写进行比较
        String extLower = extension.toLowerCase();
        // 图片类型
        if (isImageType(extLower)) {
            return 1;
        }
        // 视频类型
        if (isVideoType(extLower)) {
            return 2;
        }
        // 文档类型
        if (isDocumentType(extLower)) {
            return 3;
        }
        // 其他类型
        return 0;
    }
    /**
     * 从URL中提取文件扩展名
     *
     * @param url 文件URL地址
     * @return 文件扩展名(不包含点),如果无法提取则返回null
     */
    private static String getFileExtension(String url) {
        if (StringUtils.isEmpty(url)) {
            return null;
        }
        // 去除URL参数部分(?后面的内容)
        int questionMarkIndex = url.indexOf('?');
        if (questionMarkIndex != -1) {
            url = url.substring(0, questionMarkIndex);
        }
        // 查找最后一个点的位置
        int lastDotIndex = url.lastIndexOf('.');
        if (lastDotIndex == -1 || lastDotIndex == url.length() - 1) {
            return null;
        }
        // 提取扩展名
        return url.substring(lastDotIndex + 1);
    }
    /**
     * 判断是否为图片类型
     *
     * @param extension 文件扩展名(小写)
     * @return 是否为图片类型
     */
    private static boolean isImageType(String extension) {
        return extension.equals("jpg") || extension.equals("jpeg") ||
            extension.equals("png") || extension.equals("gif") ||
            extension.equals("bmp") || extension.equals("webp") ||
            extension.equals("svg") || extension.equals("tiff") ||
            extension.equals("tif") || extension.equals("ico");
    }
    /**
     * 判断是否为视频类型
     *
     * @param extension 文件扩展名(小写)
     * @return 是否为视频类型
     */
    private static boolean isVideoType(String extension) {
        return extension.equals("mp4") || extension.equals("avi") ||
            extension.equals("mov") || extension.equals("wmv") ||
            extension.equals("flv") || extension.equals("mkv") ||
            extension.equals("mpeg") || extension.equals("mpg") ||
            extension.equals("webm") || extension.equals("m4v") ||
            extension.equals("3gp");
    }
    /**
     * 判断是否为文档类型
     *
     * @param extension 文件扩展名(小写)
     * @return 是否为文档类型
     */
    private static boolean isDocumentType(String extension) {
        return extension.equals("pdf") || extension.equals("doc") ||
            extension.equals("docx") || extension.equals("xls") ||
            extension.equals("xlsx") || extension.equals("ppt") ||
            extension.equals("pptx") || extension.equals("txt") ||
            extension.equals("csv") || extension.equals("zip") ||
            extension.equals("rar");
    }
    /**
     * 获取当前HttpServletRequest对象
     *
     * @return HttpServletRequest对象,可能为null
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdTaskResultEntity.java
@@ -81,5 +81,10 @@
     */
    @ApiModelProperty(value = "区域编码")
    private String areaCode;
    /**
     * 附件类型:0图片 1视频 2其他
     */
    @ApiModelProperty(value = "附件类型:0图片 1视频 2其他")
    private Integer attachmentType;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java
@@ -74,7 +74,11 @@
    @Override
    public boolean saveBatchTaskResult(List<GdTaskResultEntity> gdTaskResultEntities) {
        gdTaskResultEntities.forEach(gdTaskResult -> {
            String resultUrl = gdTaskResult.getResultUrl();
            // 使用HeaderUtils处理区域代码
            // resultUrl =  http://220.177.172.27:8100/S3/xcy010.eoshlw.internal.jazwy.cn/2026/04/23/DJI_20260128135433_0005_V_20260423111422A015.jpeg
            // resultUrl = http://220.177.172.27:8100/S3/xcy010.eoshlw.internal.jazwy.cn/2026/04/23/2026-04-23-09-50-29-0_20260423190046A001.mp4
            gdTaskResult.setAttachmentType(HeaderUtils.getAttachmentType(resultUrl));
            String processedAreaCode = HeaderUtils.processAreaCode(gdTaskResult.getAreaCode());
            gdTaskResult.setAreaCode(processedAreaCode);
            gdTaskResult.setStatus(0);