Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package com.sdm.common.entity.req.data;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class QueryFileReq {
|
||||
List<Long> fileIdList;
|
||||
}
|
||||
@@ -24,4 +24,14 @@ public class TaskTreeExportExcelParam {
|
||||
*/
|
||||
private List<String> taskIdList;
|
||||
|
||||
/**
|
||||
* 合并单元格的起始索引
|
||||
*/
|
||||
private Integer startIndex;
|
||||
|
||||
/**
|
||||
* 合并单元格的结束索引
|
||||
*/
|
||||
private Integer endIndex;
|
||||
|
||||
}
|
||||
|
||||
@@ -194,4 +194,18 @@ public class DataClientFeignClientImpl implements IDataFeignClient {
|
||||
return SdmResponse.failed("权限更新失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq) {
|
||||
SdmResponse response;
|
||||
try {
|
||||
response = dataClient.queryFileListByIdList(queryFileReq);
|
||||
log.info("查询文件列表成功:"+ response);
|
||||
return response;
|
||||
} catch (Exception e) {
|
||||
log.error("查询文件列表失败:", e);
|
||||
return SdmResponse.failed("查询文件列表失败");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -73,4 +73,7 @@ public interface IDataFeignClient {
|
||||
@PostMapping("/data/updatePermission")
|
||||
SdmResponse updatePermission(@RequestBody UpdatePermissionReq req);
|
||||
|
||||
@PostMapping("/data/queryFileListByIdList")
|
||||
SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(@RequestBody QueryFileReq queryFileReq);
|
||||
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.sdm.common.entity.ExportExcelFormat;
|
||||
import com.sdm.common.entity.req.task.TaskTreeExportExcelParam;
|
||||
import io.micrometer.common.util.StringUtils;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -12,7 +13,6 @@ import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
@@ -214,6 +214,10 @@ public class ExcelUtil {
|
||||
style.setBorderTop(borderStyle);
|
||||
style.setBorderRight(borderStyle);
|
||||
style.setFont(font);
|
||||
// 水平居中
|
||||
style.setAlignment(HorizontalAlignment.CENTER);
|
||||
// 垂直居中
|
||||
style.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
return style;
|
||||
}
|
||||
/**
|
||||
@@ -584,4 +588,172 @@ public class ExcelUtil {
|
||||
exportExcel(excelSheets,response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel,按任务维度进行合并单元格
|
||||
* @param dataArray
|
||||
* @param exportExcelFormats
|
||||
*/
|
||||
public static void exportExcelOneDimensional(JSONArray dataArray,List<ExportExcelFormat> exportExcelFormats,HttpServletResponse response,List<TaskTreeExportExcelParam> paramList)
|
||||
{
|
||||
ExcelSheet excelSheet = new ExcelSheet();
|
||||
excelSheet.setSheetName("export sheet1");
|
||||
//获取excel表头
|
||||
List<HeadVO> excelHeader = getExcelHeader(exportExcelFormats,null);
|
||||
excelSheet.setHeads(excelHeader);
|
||||
//获取excel表行数据
|
||||
for(int index=0;index<dataArray.size();index++)
|
||||
{
|
||||
JSONObject rowObj = dataArray.getJSONObject(index);
|
||||
RowValue rowValue = new RowValue();
|
||||
for (ExportExcelFormat exportExcelFormat : exportExcelFormats)
|
||||
{
|
||||
ExcelCellValue cellValue = new ExcelCellValue();
|
||||
String value = rowObj.getString(exportExcelFormat.getKey());
|
||||
if(value != null && !"null".equalsIgnoreCase(value)) {
|
||||
JSONObject dictData = exportExcelFormat.getDictData();
|
||||
if(ObjectUtils.isNotEmpty(dictData))
|
||||
{
|
||||
if (StringUtils.isNotBlank(dictData.getString(value))) {
|
||||
value = dictData.getString(value);
|
||||
}
|
||||
}
|
||||
cellValue.setValue(value);
|
||||
}
|
||||
rowValue.getCells().add(cellValue);
|
||||
}
|
||||
excelSheet.getRowValues().add(rowValue);
|
||||
}
|
||||
List<ExcelSheet> excelSheets = new ArrayList<>();
|
||||
excelSheets.add(excelSheet);
|
||||
exportExcelOneDimensional(excelSheets,response,paramList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
* @param sheets
|
||||
* @param response
|
||||
*/
|
||||
public static void exportExcelOneDimensional(List<ExcelSheet> sheets, HttpServletResponse response,List<TaskTreeExportExcelParam> paramList) {
|
||||
try {
|
||||
Workbook workBook = new XSSFWorkbook();
|
||||
for (ExcelSheet sheetData : sheets) {
|
||||
Sheet sheet = workBook.createSheet(sheetData.getSheetName());
|
||||
List<ColumnMergeInfo> columnMergeInfos = writeSheetHeader(workBook,sheet, sheetData.getHeads());
|
||||
writeSheetRowsOneDimensional(workBook,sheet, sheetData.getRowValues(), columnMergeInfos,sheetData.getHeads(),paramList);
|
||||
autoSizeColumnWidth(sheet);
|
||||
}
|
||||
workBook.write(response.getOutputStream());
|
||||
workBook.close();
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入excel行数据
|
||||
* @param sheet
|
||||
* @param rowValues
|
||||
*/
|
||||
private static void writeSheetRowsOneDimensional(Workbook workbook,Sheet sheet,List<RowValue> rowValues,List<ColumnMergeInfo> columnMergeInfos,List<HeadVO> headers,List<TaskTreeExportExcelParam> paramList)
|
||||
{
|
||||
int rowIndex = 1;
|
||||
Font cellFont = makeFont(workbook,"宋体",false,(short) 11,IndexedColors.BLACK.getIndex());
|
||||
CellStyle cellStyle = makeStyle(workbook,cellFont,BorderStyle.THIN);
|
||||
for(RowValue rowValue : rowValues)
|
||||
{
|
||||
Row row = sheet.createRow(rowIndex);
|
||||
int columnIndex = 0;
|
||||
for(ExcelCellValue cellValue : rowValue.getCells())
|
||||
{
|
||||
HeadVO headVO = headers.get(columnIndex);
|
||||
if(!headVO.getExcelHeaderInfo().isBShow()) {
|
||||
columnIndex++;
|
||||
continue;
|
||||
}
|
||||
Cell cell = row.createCell(columnIndex);
|
||||
cell.setCellStyle(cellStyle);
|
||||
cell.setCellValue(String.valueOf(cellValue.getValue()));
|
||||
columnIndex++;
|
||||
}
|
||||
rowIndex++;
|
||||
}
|
||||
Integer startIndex;
|
||||
Integer endIndex;
|
||||
for (TaskTreeExportExcelParam taskTreeExportExcelParam : paramList) {
|
||||
startIndex = taskTreeExportExcelParam.getStartIndex();
|
||||
endIndex = taskTreeExportExcelParam.getEndIndex();
|
||||
if (!Objects.equals(startIndex, endIndex)) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
sheet.addMergedRegion(new CellRangeAddress(startIndex, endIndex, i, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 自动设置列宽为当前列最长文本宽度
|
||||
* @param sheet Excel工作表
|
||||
*/
|
||||
public static void autoSizeColumnWidth(Sheet sheet) {
|
||||
// 存储每列的最大字符数
|
||||
Map<Integer, Integer> columnMaxLength = new HashMap<>();
|
||||
|
||||
// 1. 遍历所有行,统计每列最大字符数
|
||||
for (Row row : sheet) {
|
||||
for (Cell cell : row) {
|
||||
int columnIndex = cell.getColumnIndex();
|
||||
String cellValue = getCellStringValue(cell);
|
||||
int currentLength = cellValue.length();
|
||||
|
||||
// 更新当前列的最大长度
|
||||
columnMaxLength.put(columnIndex,
|
||||
Math.max(columnMaxLength.getOrDefault(columnIndex, 0), currentLength));
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 遍历列,设置适配宽度
|
||||
for (Map.Entry<Integer, Integer> entry : columnMaxLength.entrySet()) {
|
||||
int columnIndex = entry.getKey();
|
||||
int maxLength = entry.getValue();
|
||||
|
||||
// 计算列宽:字符数 × 256(POI列宽单位) + 边距(2000)
|
||||
// 256 = 1个字符宽度,2000 = 边距(可根据需求调整)
|
||||
int columnWidth = Math.min(maxLength * 256 + 2000, 65535); // 最大列宽不超过65535
|
||||
sheet.setColumnWidth(columnIndex, columnWidth);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单元格的字符串值(兼容不同单元格类型)
|
||||
* @param cell 单元格
|
||||
* @return 字符串值
|
||||
*/
|
||||
private static String getCellStringValue(Cell cell) {
|
||||
if (cell == null) {
|
||||
return "";
|
||||
}
|
||||
switch (cell.getCellType()) {
|
||||
case STRING:
|
||||
return cell.getStringCellValue().trim();
|
||||
case NUMERIC:
|
||||
// 处理数字(避免科学计数法)
|
||||
return String.valueOf((long) cell.getNumericCellValue()).trim();
|
||||
case BOOLEAN:
|
||||
return String.valueOf(cell.getBooleanCellValue()).trim();
|
||||
case FORMULA:
|
||||
// 计算公式结果
|
||||
try {
|
||||
return String.valueOf(cell.getNumericCellValue()).trim();
|
||||
} catch (Exception e) {
|
||||
return cell.getStringCellValue().trim();
|
||||
}
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -554,4 +554,9 @@ public class DataFileController implements IDataFeignClient {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@PostMapping ("/queryFileListByIdList")
|
||||
public SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq) {
|
||||
return IDataFileService.queryFileListByIdList(queryFileReq);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -357,4 +357,6 @@ public interface IDataFileService {
|
||||
|
||||
SdmResponse downloadFileForEdit(Long fileId);
|
||||
|
||||
default SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq){return null;}
|
||||
|
||||
}
|
||||
@@ -2933,4 +2933,18 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
return SdmResponse.failed("onlyoffice编辑文件失败");
|
||||
}
|
||||
|
||||
public SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq) {
|
||||
List<FileMetadataInfo> fileMetadataInfos = fileMetadataInfoService.lambdaQuery().in(FileMetadataInfo::getId, queryFileReq.getFileIdList()).list();
|
||||
if (CollectionUtils.isEmpty(fileMetadataInfos)) {
|
||||
return SdmResponse.failed("未查询到文件信息");
|
||||
}
|
||||
List<FileMetadataInfoResp> fileMetadataInfoResps = new ArrayList<>();
|
||||
fileMetadataInfos.forEach(fileMetadataInfo -> {
|
||||
FileMetadataInfoResp fileMetadataInfoResp = new FileMetadataInfoResp();
|
||||
BeanUtils.copyProperties(fileMetadataInfo, fileMetadataInfoResp);
|
||||
fileMetadataInfoResps.add(fileMetadataInfoResp);
|
||||
});
|
||||
return SdmResponse.success(fileMetadataInfoResps);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -35,7 +35,6 @@ public class PerformanceNodePo extends NodeAllBase {
|
||||
|
||||
private String performanceType;
|
||||
private String standard;
|
||||
private String standardName;
|
||||
private String highValue;
|
||||
private String lowValue;
|
||||
private String englishName;
|
||||
|
||||
@@ -11,14 +11,12 @@ import com.sdm.common.entity.enums.DirTypeEnum;
|
||||
import com.sdm.common.entity.enums.FilePermissionEnum;
|
||||
import com.sdm.common.entity.enums.NodeTypeEnum;
|
||||
import com.sdm.common.entity.enums.ValueTypeEnum;
|
||||
import com.sdm.common.entity.req.data.CreateDirReq;
|
||||
import com.sdm.common.entity.req.data.DelDirReq;
|
||||
import com.sdm.common.entity.req.data.RenameDirReq;
|
||||
import com.sdm.common.entity.req.data.UpdatePermissionReq;
|
||||
import com.sdm.common.entity.req.data.*;
|
||||
import com.sdm.common.entity.req.system.UserQueryReq;
|
||||
import com.sdm.common.entity.req.task.TaskExportExcelParam;
|
||||
import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
|
||||
import com.sdm.common.entity.req.task.TaskTreeExportExcelParam;
|
||||
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
|
||||
import com.sdm.common.entity.resp.system.CIDUserResp;
|
||||
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
|
||||
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
|
||||
@@ -432,6 +430,37 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) {
|
||||
// 转换执行规范的文件id为文件名称
|
||||
List<String> standardList = currentNodeAssociatedTaskList.stream().map(TaskNodePo::getStandard).toList();
|
||||
Map<Long, String> dataMap = Map.of();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
List<Long> fileIdList = new ArrayList<>();
|
||||
standardList = standardList.stream().filter(StringUtils::isNotBlank).toList();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
for (String standard : standardList) {
|
||||
fileIdList.addAll(Arrays.stream(standard.split(",")).toList().stream().map(Long::valueOf).toList());
|
||||
}
|
||||
QueryFileReq queryFileReq = new QueryFileReq();
|
||||
queryFileReq.setFileIdList(fileIdList);
|
||||
SdmResponse<List<FileMetadataInfoResp>> listSdmResponse = dataClientFeignClient.queryFileListByIdList(queryFileReq);
|
||||
if (listSdmResponse.isSuccess()) {
|
||||
List<FileMetadataInfoResp> dataList = listSdmResponse.getData();
|
||||
dataMap = dataList.stream().collect(Collectors.toMap(FileMetadataInfoResp::getId, FileMetadataInfoResp::getOriginalName));
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Long> fileIdList;
|
||||
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
|
||||
List<String> fileNameList = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(taskNodePo.getStandard())) {
|
||||
fileIdList = Arrays.stream(taskNodePo.getStandard().split(",")).toList().stream().map(Long::valueOf).toList();
|
||||
for (Long fileId : fileIdList) {
|
||||
fileNameList.add(dataMap.get(fileId));
|
||||
}
|
||||
taskNodePo.setStandard(String.join(",", fileNameList));
|
||||
}
|
||||
}
|
||||
|
||||
// 查询当前任务下指标
|
||||
Map<String, TaskNodePo> taskMap = currentNodeAssociatedTaskList.stream().collect(Collectors.groupingBy(
|
||||
TaskNodePo::getUuid,
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.sdm.common.entity.enums.DirTypeEnum;
|
||||
import com.sdm.common.entity.enums.FilePermissionEnum;
|
||||
import com.sdm.common.entity.enums.NodeTypeEnum;
|
||||
import com.sdm.common.entity.req.data.CreateDirReq;
|
||||
import com.sdm.common.entity.req.data.QueryFileReq;
|
||||
import com.sdm.common.entity.req.data.UpdatePermissionReq;
|
||||
import com.sdm.common.entity.req.project.SimulationPerformance;
|
||||
import com.sdm.common.entity.req.system.UserQueryReq;
|
||||
@@ -18,6 +19,7 @@ import com.sdm.common.entity.req.task.TaskExportExcelFormat;
|
||||
import com.sdm.common.entity.req.task.TaskExportExcelParam;
|
||||
import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
|
||||
import com.sdm.common.entity.req.task.TaskTreeExportExcelParam;
|
||||
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
|
||||
import com.sdm.common.entity.resp.system.CIDUserResp;
|
||||
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
|
||||
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
|
||||
@@ -2226,6 +2228,7 @@ public class TaskServiceImpl implements ITaskService {
|
||||
for (PerformanceNodePo performanceNodePo : performanceNodePoList) {
|
||||
SpdmExportNewTaskVo exportNewTaskVo = new SpdmExportNewTaskVo();
|
||||
BeanUtils.copyProperties(performanceNodePo, exportNewTaskVo);
|
||||
BeanUtils.copyProperties(spdmExportNewTaskVo,exportNewTaskVo);
|
||||
exportNewTaskVo.setMachineName(spdmExportNewTaskVo.getMachineName());
|
||||
exportNewTaskVo.setMachineCode(spdmExportNewTaskVo.getMachineCode());
|
||||
exportNewTaskVo.setWorkspaceName(spdmExportNewTaskVo.getWorkspaceName());
|
||||
@@ -2238,14 +2241,58 @@ public class TaskServiceImpl implements ITaskService {
|
||||
spdmExportNewTaskVoList.add(exportNewTaskVo);
|
||||
}
|
||||
}
|
||||
allExportNewTaskVoList.add(spdmExportNewTaskVo);
|
||||
if (CollectionUtils.isNotEmpty(spdmExportNewTaskVoList)) {
|
||||
allExportNewTaskVoList.addAll(spdmExportNewTaskVoList);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ExcelUtil.exportExcelNoMerge(JSONArray.from(allExportNewTaskVoList), exportExcelFormats, httpServletResponse);
|
||||
List<TaskTreeExportExcelParam> paramList = new ArrayList<>();
|
||||
String currentTaskName = "";
|
||||
long total;
|
||||
for (int i = 0; i < allExportNewTaskVoList.size() ; i++) {
|
||||
SpdmExportNewTaskVo spdmExportNewTaskVo = allExportNewTaskVoList.get(i);
|
||||
if (!currentTaskName.equals(spdmExportNewTaskVo.getTaskName())) {
|
||||
total = allExportNewTaskVoList.stream().filter(task -> task.getTaskName().equals(spdmExportNewTaskVo.getTaskName())).count();
|
||||
TaskTreeExportExcelParam taskTreeExportExcelParam = new TaskTreeExportExcelParam();
|
||||
taskTreeExportExcelParam.setStartIndex(i + 1);
|
||||
taskTreeExportExcelParam.setEndIndex(i + (int) total);
|
||||
paramList.add(taskTreeExportExcelParam);
|
||||
}
|
||||
currentTaskName = spdmExportNewTaskVo.getTaskName();
|
||||
}
|
||||
// 转换执行规范的文件id为文件名称
|
||||
List<String> standardList = allExportNewTaskVoList.stream().map(SpdmExportNewTaskVo::getStandard).toList();
|
||||
Map<Long, String> dataMap = Map.of();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
List<Long> fileIdList = new ArrayList<>();
|
||||
standardList = standardList.stream().filter(StringUtils::isNotBlank).toList();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
for (String standard : standardList) {
|
||||
fileIdList.addAll(Arrays.stream(standard.split(",")).toList().stream().map(Long::valueOf).toList());
|
||||
}
|
||||
QueryFileReq queryFileReq = new QueryFileReq();
|
||||
queryFileReq.setFileIdList(fileIdList);
|
||||
SdmResponse<List<FileMetadataInfoResp>> listSdmResponse = dataClientFeignClient.queryFileListByIdList(queryFileReq);
|
||||
if (listSdmResponse.isSuccess()) {
|
||||
List<FileMetadataInfoResp> dataList = listSdmResponse.getData();
|
||||
dataMap = dataList.stream().collect(Collectors.toMap(FileMetadataInfoResp::getId, FileMetadataInfoResp::getOriginalName));
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Long> fileIdList;
|
||||
for (SpdmExportNewTaskVo spdmExportNewTaskVo : allExportNewTaskVoList) {
|
||||
List<String> fileNameList = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(spdmExportNewTaskVo.getStandard())) {
|
||||
fileIdList = Arrays.stream(spdmExportNewTaskVo.getStandard().split(",")).toList().stream().map(Long::valueOf).toList();
|
||||
for (Long fileId : fileIdList) {
|
||||
fileNameList.add(dataMap.get(fileId));
|
||||
}
|
||||
spdmExportNewTaskVo.setStandard(String.join(",", fileNameList));
|
||||
}
|
||||
}
|
||||
|
||||
ExcelUtil.exportExcelOneDimensional(JSONArray.from(allExportNewTaskVoList), exportExcelFormats, httpServletResponse,paramList);
|
||||
} else {
|
||||
response = SdmResponse.failed(taskRespond.getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user