UPDATE: 导入和导出计划检测数据测试报告同步

This commit is contained in:
贾同学
2025-08-28 14:20:19 +08:00
parent 5422340dd3
commit 7e66b67cde
3 changed files with 61 additions and 16 deletions

View File

@@ -384,11 +384,14 @@ public class AdPlanController extends BaseController {
@OperateInfo(operateType = OperateType.DOWNLOAD)
@PostMapping("/exportPlanCheckData")
@ApiOperation("导出计划检测结果数据")
@ApiImplicitParam(name = "planId", value = "计划id", required = true)
public void exportPlanCheckData(@RequestParam("planId") String planId, HttpServletResponse response) {
@ApiImplicitParams({
@ApiImplicitParam(name = "planId", value = "计划id", required = true),
@ApiImplicitParam(name = "report", value = "是否导出报告, 0 否1 是", required = true)
})
public void exportPlanCheckData(@RequestParam("planId") String planId,@RequestParam("report") Integer report, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("exportPlanCheckData");
LogUtil.njcnDebug(log, "{}导出ID数据为{}", methodDescribe, planId);
adPlanService.exportPlanCheckDataZip(planId, response);
adPlanService.exportPlanCheckDataZip(planId,report, response);
}

View File

@@ -191,9 +191,10 @@ public interface IAdPlanService extends IService<AdPlan> {
* 导出计划检测结果数据
*
* @param planId
* @param report
* @param response
*/
void exportPlanCheckDataZip(String planId, HttpServletResponse response);
void exportPlanCheckDataZip(String planId,Integer report, HttpServletResponse response);
/**
* 导入计划检测结果数据

View File

@@ -61,6 +61,7 @@ import com.njcn.gather.plan.service.IAdPlanSourceService;
import com.njcn.gather.plan.service.IAdPlanStandardDevService;
import com.njcn.gather.plan.service.IAdPlanTestConfigService;
import com.njcn.gather.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.report.pojo.constant.ReportConstant;
import com.njcn.gather.report.pojo.po.PqReport;
import com.njcn.gather.report.service.IPqReportService;
import com.njcn.gather.script.pojo.po.PqScript;
@@ -95,6 +96,7 @@ import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -143,6 +145,8 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
private final IAdPlanTestConfigService adPlanTestConfigService;
private final JdbcTemplate jdbcTemplate;
@Value("${report.reportDir}")
private String reportPath;
@Override
public List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) {
@@ -409,7 +413,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
param.getDevIds().removeAll(devIds);
// 更新检测配置
AdPlanTestConfig testConfig = param.getTestConfig();
adPlanTestConfigService.update(testConfig,new LambdaUpdateWrapper<AdPlanTestConfig>().eq(AdPlanTestConfig::getPlanId, testConfig.getPlanId()));
adPlanTestConfigService.update(testConfig, new LambdaUpdateWrapper<AdPlanTestConfig>().eq(AdPlanTestConfig::getPlanId, testConfig.getPlanId()));
} else {
// 修改检测计划、检测源关联
@@ -422,7 +426,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
.set(AdPlan::getOrigin, param.getName()).update();
}
return this.updateById(plan2);
return this.updateById(plan2);
}
@Override
@@ -1821,7 +1825,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
}
@Override
public void exportPlanCheckDataZip(String planId, HttpServletResponse response) {
public void exportPlanCheckDataZip(String planId, Integer report, HttpServletResponse response) {
AdPlanCheckDataVO planCheckDataVO = new AdPlanCheckDataVO();
// 获取检测计划基本数据
AdPlan plan = this.getById(planId);
@@ -1861,9 +1865,29 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
String zipFileName = URLEncoder.encode(plan.getName() + "_检测数据.zip", "UTF-8");
File zipFile = FileUtil.file(tempDir, zipFileName);
// 先将json文件添加到zip中
ZipUtil.zip(jsonFile.getAbsolutePath(), zipFile.getAbsolutePath());
// 创建一个临时目录存放文件
File tempZipDir = FileUtil.mkdir(FileUtil.getTmpDirPath() + "temp_plan_check_data_" + System.currentTimeMillis() + "/");
// 复制json文件到临时目录
FileUtil.copy(jsonFile, tempZipDir, true);
// 添加检测报告文件
if (ObjectUtil.isNotNull(report) && report.equals(1)) {
for (PqDev dev : devList) {
DevType devType = devTypeService.getById(dev.getDevType());
String dirPath = reportPath.concat(File.separator).concat(devType.getName());
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
// 如果reportFile存在则将reportFile中的文件添加到已有的zip文件中
if (FileUtil.exist(reportFile)) {
// 复制reportFile到临时目录
FileUtil.copy(reportFile, tempZipDir, true);
}
}
}
// 重新创建zip文件包含所有文件
ZipUtil.zip(tempZipDir.getAbsolutePath(), zipFile.getAbsolutePath());
// 删除临时目录
FileUtil.del(tempZipDir);
// 设置响应头
response.reset();
response.setContentType("application/octet-stream;charset=UTF-8");
@@ -1964,13 +1988,11 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
for (Map<String, Object> row : dataList) {
// 构造批量插入SQL - 收集所有可能的列名
List<String> columnNames = new ArrayList<>(row.keySet());
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("INSERT INTO ").append(tableName).append(" (");
sqlBuilder.append(columnNames.stream().map(column -> "`" + column + "`").collect(Collectors.joining(",")));
sqlBuilder.append(") VALUES ");
sqlBuilder.append("(" + columnNames.stream().map(column -> "?").collect(Collectors.joining(",")) + ")");
String sql = sqlBuilder.toString();
String sql = "INSERT INTO " + tableName + " (" +
columnNames.stream().map(column -> "`" + column + "`").collect(Collectors.joining(",")) +
") VALUES " +
"(" + columnNames.stream().map(column -> "?").collect(Collectors.joining(",")) + ")";
List<Object> params = new ArrayList<>();
for (String column : columnNames) {
Object value = row.getOrDefault(column, null);
@@ -1986,6 +2008,25 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
}
}
// 报告文件复制到指定位置
for (File f : files) {
if (f.isFile() && f.getName().endsWith(ReportConstant.DOCX)) {
for (PqDev dev : devList) {
DevType devType = devTypeService.getById(dev.getDevType());
String dirPath = reportPath.concat(File.separator).concat(devType.getName());
File reportFile = new File(dirPath.concat(File.separator).concat(dev.getCreateId()).concat(ReportConstant.DOCX));
// 文件名匹配,复制到对应目录下
if (f.getName().equals(reportFile.getName())) {
File parentDir = reportFile.getParentFile();
if (!parentDir.exists()) {
parentDir.mkdirs();
}
FileUtil.copy(f, parentDir, true);
}
}
}
}
// 删除临时目录
FileUtil.del(tempDir);
return true;
@@ -2008,7 +2049,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
if (CollUtil.isEmpty(subPlanList)) {
throw new BusinessException(CommonResponseEnum.FAIL, "该计划未找到子计划");
}
// 获取所有子计划检测数据
// 获取所有子计划检测数据
List<Integer> subPlanCodeList = subPlanList.stream().map(AdPlan::getCode).collect(Collectors.toList());
for (Integer code : subPlanCodeList) {
List<String> dataTableNames = CollUtil.newArrayList("ad_harmonic_" + code, "ad_non_harmonic_" + code, "ad_harmonic_result_" + code, "ad_non_harmonic_result_" + code);