fit:航线二期,增加批量航线文件导出接口

This commit is contained in:
gyb 2026-02-09 08:35:21 +08:00
parent f2f849c6e6
commit 9f11633445
3 changed files with 85 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package com.ruoyi.airline.controller;
import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO; import com.ruoyi.airline.api.domain.AirlineFileGroupInfoVO;
import com.ruoyi.airline.api.domain.AirlineFileVO;
import com.ruoyi.airline.controller.convert.AirlineFileGroupInfoControllerConvert; import com.ruoyi.airline.controller.convert.AirlineFileGroupInfoControllerConvert;
import com.ruoyi.airline.service.api.IAirlineFileGroupInfoService; import com.ruoyi.airline.service.api.IAirlineFileGroupInfoService;
import com.ruoyi.airline.service.api.IAirlineFileService; import com.ruoyi.airline.service.api.IAirlineFileService;
@ -192,6 +193,29 @@ public class AirlineFileGroupInfoController extends BaseController {
} }
throw new BaseException("移动失败"); throw new BaseException("移动失败");
} }
// 增加根据分组下的航线id进行批量导出并且支持zip压缩上传到minos将下载地址返回给前端
/**
* 批量导出航线并上传到minio
*
* @param airLineIds 航线ID列表
* @param groupId 分组ID
* @return 下载地址
* @throws BaseException
*/
@PostMapping("/batchExport/{groupId}")
@Operation(summary = "批量导出航线并上传到minio")
public AjaxResult batchExportAirlines(@RequestBody List<Long> airLineIds, @PathVariable("groupId") Long groupId) throws BaseException {
if (groupId == null) {
throw new BaseException("分组ID不能为空");
}
if (airLineIds == null || airLineIds.isEmpty()) {
throw new BaseException("没有需要导出的航线");
}
String downloadUrl = iAirlineFileGroupInfoService.batchExportAirlines(airLineIds, groupId);
return success(downloadUrl);
}
} }

View File

@ -45,4 +45,13 @@ public interface IAirlineFileGroupInfoService {
* @throws BaseException * @throws BaseException
*/ */
Long batchMoveGroupInfo(List<Long> airLineIds, Long groupId, Long newGroupId) throws BaseException; Long batchMoveGroupInfo(List<Long> airLineIds, Long groupId, Long newGroupId) throws BaseException;
/**
* 批量导出航线并上传到minio
* @param airLineIds 航线ID列表
* @param groupId 分组ID
* @return 下载地址
* @throws BaseException
*/
String batchExportAirlines(List<Long> airLineIds, Long groupId) throws BaseException;
} }

View File

@ -15,6 +15,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import com.ruoyi.file.service.ISysFileService;
/** /**
* 航线文件Service实现类 * 航线文件Service实现类
@ -37,6 +43,9 @@ public class AirlineFileServiceGroupInfoImpl implements IAirlineFileGroupInfoSer
@Autowired @Autowired
private IAirlineFileGroupInfoDomain iAirlineFileGroupInfoDomain; private IAirlineFileGroupInfoDomain iAirlineFileGroupInfoDomain;
@Autowired
private ISysFileService sysFileService;
@Override @Override
public List<AirlineFileGroupInfoDTO> selectGroupInfoListById(Long groupId) { public List<AirlineFileGroupInfoDTO> selectGroupInfoListById(Long groupId) {
@ -133,4 +142,47 @@ public class AirlineFileServiceGroupInfoImpl implements IAirlineFileGroupInfoSer
// 调用domain层批量移动方法 // 调用domain层批量移动方法
return iAirlineFileGroupInfoDomain.batchMoveGroupInfo(groupId, newGroupId, airLineIds); return iAirlineFileGroupInfoDomain.batchMoveGroupInfo(groupId, newGroupId, airLineIds);
} }
@Override
public String batchExportAirlines(List<Long> airLineIds, Long groupId) throws BaseException {
// 检查参数
if (groupId == null || airLineIds == null || airLineIds.isEmpty()) {
throw new BaseException("分组ID和航线ID列表不能为空");
}
try {
// 创建一个字节数组输出流用于存储zip文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
// 遍历航线ID列表获取航线文件信息并添加到zip中
for (Long airlineId : airLineIds) {
AirlineFileDTO airlineFile = iAirlineFileService.selectById(airlineId);
if (airlineFile != null) {
// 获取航线文件内容这里需要根据实际情况获取文件内容可能需要从fileUrl或djiFileUrl下载
// 这里暂时使用文件名作为示例实际项目中需要根据文件URL获取文件内容
String fileName = airlineFile.getName() + ".waypoints";
String fileContent = "航线文件内容:" + airlineFile.getName();
// 创建zip条目并添加到zip输出流中
ZipEntry entry = new ZipEntry(fileName);
zos.putNextEntry(entry);
zos.write(fileContent.getBytes());
zos.closeEntry();
}
}
// 关闭zip输出流
zos.close();
// 将zip文件上传到minio
String zipFileName = "airlines_export_" + System.currentTimeMillis() + ".zip";
String zipFileContent = baos.toString();
return sysFileService.uploadFileByData(zipFileName, "zip", zipFileContent);
} catch (Exception e) {
log.error("批量导出航线失败", e);
throw new BaseException("批量导出航线失败");
}
}
} }