diff --git a/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java b/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java index 037c31cd..dd8ff545 100644 --- a/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java +++ b/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java @@ -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); } diff --git a/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java b/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java index 9bd21030..22260d19 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java @@ -191,9 +191,10 @@ public interface IAdPlanService extends IService { * 导出计划检测结果数据 * * @param planId + * @param report * @param response */ - void exportPlanCheckDataZip(String planId, HttpServletResponse response); + void exportPlanCheckDataZip(String planId,Integer report, HttpServletResponse response); /** * 导入计划检测结果数据 diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java index 05b513b7..3ba4a70c 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java @@ -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 impleme private final IAdPlanTestConfigService adPlanTestConfigService; private final JdbcTemplate jdbcTemplate; + @Value("${report.reportDir}") + private String reportPath; @Override public List listAdPlan(AdPlanParam.QueryParam queryParam) { @@ -409,7 +413,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme param.getDevIds().removeAll(devIds); // 更新检测配置 AdPlanTestConfig testConfig = param.getTestConfig(); - adPlanTestConfigService.update(testConfig,new LambdaUpdateWrapper().eq(AdPlanTestConfig::getPlanId, testConfig.getPlanId())); + adPlanTestConfigService.update(testConfig, new LambdaUpdateWrapper().eq(AdPlanTestConfig::getPlanId, testConfig.getPlanId())); } else { // 修改检测计划、检测源关联 @@ -422,7 +426,7 @@ public class AdPlanServiceImpl extends ServiceImpl 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 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 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 impleme for (Map row : dataList) { // 构造批量插入SQL - 收集所有可能的列名 List 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 params = new ArrayList<>(); for (String column : columnNames) { Object value = row.getOrDefault(column, null); @@ -1986,6 +2008,25 @@ public class AdPlanServiceImpl extends ServiceImpl 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 impleme if (CollUtil.isEmpty(subPlanList)) { throw new BusinessException(CommonResponseEnum.FAIL, "该计划未找到子计划"); } - // 获取所有子计划检测数据 + // 获取所有子计划检测数据 List subPlanCodeList = subPlanList.stream().map(AdPlan::getCode).collect(Collectors.toList()); for (Integer code : subPlanCodeList) { List dataTableNames = CollUtil.newArrayList("ad_harmonic_" + code, "ad_non_harmonic_" + code, "ad_harmonic_result_" + code, "ad_non_harmonic_result_" + code);