From 1159c4ef3606f50fecdacb8933efe24efac01e88 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Thu, 21 May 2026 18:52:14 +0800
Subject: [PATCH] feat(workorder): 添加设备飞手ID字段支持

---
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java |  132 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 117 insertions(+), 15 deletions(-)

diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java
index de7156b..883ebc5 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdTaskResultServiceImpl.java
@@ -21,11 +21,22 @@
 import org.sxkj.gd.workorder.excel.GdTaskResultExcel;
 import org.sxkj.gd.workorder.mapper.GdTaskResultMapper;
 import org.sxkj.gd.workorder.service.IGdTaskResultService;
+import org.sxkj.common.utils.HeaderUtils;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.utils.Func;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
 import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 
 /**
  * 成果表 服务实现类
@@ -62,24 +73,35 @@
 
 	@Override
 	public boolean saveBatchTaskResult(List<GdTaskResultEntity> gdTaskResultEntities) {
+		if (gdTaskResultEntities == null || gdTaskResultEntities.isEmpty()) {
+			log.error("saveBatchTaskResult-批量新增-对外接口数据为空");
+			return false;
+		}
 		gdTaskResultEntities.forEach(gdTaskResult -> {
-			String areaCode = gdTaskResult.getAreaCode();
-			if (areaCode != null && !areaCode.isEmpty()) {
-				// 分割区域代码并只取最后一组
-				String[] codes = areaCode.split(",");
-				if (codes.length > 0) {
-					// 取最后一组并去除空格
-					String lastCode = codes[codes.length - 1].trim();
-					if (!lastCode.isEmpty()) {
-						// 补零到12位
-						String padded = lastCode + "000000000000".substring(lastCode.length());
-						gdTaskResult.setAreaCode(padded);
-					}
-				}
-			}
+			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);
+			gdTaskResult.setUpdateTime(new Date());
+			gdTaskResult.setCreateTime(new Date());
+			gdTaskResult.setIsDeleted(0);
+			gdTaskResult.setCreateDept(1L);
+			gdTaskResult.setUpdateUser(1L);
+			gdTaskResult.setDistributeStatus(0);
 		});
 		// 执行批量保存并返回结果
-		return saveBatch(gdTaskResultEntities);
+		int result = baseMapper.insertBatch(gdTaskResultEntities);
+		return result > 0;
+	}
+
+	@Override
+	public boolean updateTaskResultById(GdTaskResultEntity taskResult) {
+		int result = baseMapper.updateTaskResultById(taskResult);
+		return result > 0;
 	}
 
 	/**
@@ -108,4 +130,84 @@
 		return result;
 	}
 
+	@Override
+	public void downloadResultFiles(String ids, HttpServletResponse response) {
+		// 根据ID列表查询成果记录
+		List<Long> idList = Func.toLongList(ids);
+		List<GdTaskResultEntity> resultList = listByIds(idList);
+
+		if (resultList == null || resultList.isEmpty()) {
+			throw new RuntimeException("未找到成果数据");
+		}
+
+		// 设置响应头
+		response.setContentType("application/zip");
+		response.setHeader("Content-Disposition", "attachment; filename=result_files.zip");
+
+		try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
+			for (GdTaskResultEntity result : resultList) {
+				String resultUrl = result.getResultUrl();
+				if (resultUrl == null || resultUrl.isEmpty()) {
+					continue;
+				}
+
+				// 处理转义字符
+				resultUrl = unescapeUrl(resultUrl);
+
+				try {
+					// 从URL下载文件
+					URL url = new URL(resultUrl);
+					URLConnection connection = url.openConnection();
+					connection.setConnectTimeout(5000);
+					connection.setReadTimeout(10000);
+
+					// 从URL中提取文件名
+					String fileName = extractFileName(resultUrl, result.getId());
+
+					// 添加到ZIP
+					ZipEntry zipEntry = new ZipEntry(fileName);
+					zos.putNextEntry(zipEntry);
+
+					try (InputStream is = connection.getInputStream()) {
+						byte[] buffer = new byte[4096];
+						int len;
+						while ((len = is.read(buffer)) > 0) {
+							zos.write(buffer, 0, len);
+						}
+					}
+
+					zos.closeEntry();
+				} catch (Exception e) {
+					// 单个文件下载失败,继续处理其他文件
+					// 可以记录日志
+				}
+			}
+		} catch (IOException e) {
+			throw new RuntimeException("下载文件失败", e);
+		}
+	}
+
+	/**
+	 * 从URL中提取文件名
+	 */
+	private String extractFileName(String url, Long resultId) {
+		if (url == null || url.isEmpty()) {
+			return resultId + "_unknown";
+		}
+
+		// 从URL中提取最后一部分作为文件名
+		int lastSlash = url.lastIndexOf('/');
+		if (lastSlash != -1 && lastSlash < url.length() - 1) {
+			String fileName = url.substring(lastSlash + 1);
+			// 处理可能的查询参数
+			int questionMark = fileName.indexOf('?');
+			if (questionMark != -1) {
+				fileName = fileName.substring(0, questionMark);
+			}
+			return resultId + "_" + fileName;
+		}
+
+		return resultId + "_file";
+	}
+
 }

--
Gitblit v1.9.3