From 7b9954f1fe9abffea249e7d54ea3f35ca7f84427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E5=90=8C=E5=AD=A6?= Date: Fri, 22 Aug 2025 09:03:42 +0800 Subject: [PATCH] =?UTF-8?q?ADD:=E5=AF=BC=E5=87=BA=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan/controller/AdPlanController.java | 11 +++ .../plan/pojo/vo/AdPlanCheckDataVO.java | 22 ++++++ .../gather/plan/service/IAdPlanService.java | 7 ++ .../plan/service/impl/AdPlanServiceImpl.java | 76 +++++++++++++++++-- 4 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanCheckDataVO.java 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 0b9ae7be..0bc0c866 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 @@ -379,5 +379,16 @@ public class AdPlanController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); } + + + @OperateInfo(operateType = OperateType.DOWNLOAD) + @PostMapping("/exportPlanCheckData") + @ApiOperation("导出计划检测结果数据") + @ApiImplicitParam(name = "planId", value = "计划id", required = true) + public void exportPlanCheckData(@RequestParam("planId") String planId, HttpServletResponse response) { + String methodDescribe = getMethodDescribe("exportPlanCheckData"); + LogUtil.njcnDebug(log, "{},导出ID数据为:{}", methodDescribe, planId); + adPlanService.exportPlanCheckDataZip(planId, response); + } } diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanCheckDataVO.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanCheckDataVO.java new file mode 100644 index 00000000..e77718ac --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanCheckDataVO.java @@ -0,0 +1,22 @@ +package com.njcn.gather.plan.pojo.vo; + +import com.njcn.gather.detection.pojo.po.AdPair; +import com.njcn.gather.device.pojo.po.PqDev; +import com.njcn.gather.device.pojo.po.PqDevSub; +import com.njcn.gather.plan.pojo.po.AdPlan; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; +import java.util.Map; + +@Data +@EqualsAndHashCode(callSuper = false) +public class AdPlanCheckDataVO { + + private AdPlan plan; + private List devList; + private List devSubList; + private List pairList; + private Map>> checkData; +} 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 60ea8063..186edd73 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 @@ -188,4 +188,11 @@ public interface IAdPlanService extends IService { */ boolean importSubPlanDataZip(MultipartFile file, String patternId, HttpServletResponse response); + /** + * 导出计划检测数据 + * + * @param planId + * @param response + */ + void exportPlanCheckDataZip(String planId, 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 9a165fa8..96e8148b 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 @@ -14,6 +14,7 @@ import cn.hutool.core.util.ZipUtil; import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -21,6 +22,8 @@ import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.poi.PullDown; +import com.njcn.gather.detection.pojo.po.AdPair; +import com.njcn.gather.detection.service.IAdPariService; import com.njcn.gather.device.mapper.PqDevMapper; import com.njcn.gather.device.pojo.enums.*; import com.njcn.gather.device.pojo.param.PqDevParam; @@ -88,6 +91,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.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -131,6 +135,9 @@ public class AdPlanServiceImpl extends ServiceImpl impleme private final IPqErrSysDtlsService pqErrSysDtlsService; private final IPqStandardDevService pqStandardDevService; private final IPqIcdPathService pqIcdPathService; + private final IAdPariService adPairService; + + private final JdbcTemplate jdbcTemplate; @Override public List listAdPlan(AdPlanParam.QueryParam queryParam) { @@ -225,10 +232,6 @@ public class AdPlanServiceImpl extends ServiceImpl impleme adPlan.setState(DataStateEnum.ENABLE.getCode()); - // 默认为顶级检测计划 - adPlan.setFatherPlanId(CommonEnum.FATHER_ID.getValue()); - - if (StrUtil.isBlank(param.getFatherPlanId())) { // 默认为顶级检测计划 adPlan.setFatherPlanId(CommonEnum.FATHER_ID.getValue()); @@ -1558,7 +1561,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme subPlanMetaData.setIcdPathList(pqIcdPathList); // 获取检测计划绑定的被检设备数据 - List devList = pqDevService.list(new QueryWrapper().eq("Plan_Id", planId)); + List devList = pqDevService.list(new LambdaQueryWrapper().eq(PqDev::getPlanId, planId)); if (CollUtil.isNotEmpty(devList)) { List devIds = devList.stream().map(PqDev::getId).collect(Collectors.toList()); // 被检设备监测点 @@ -1796,4 +1799,67 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } } + @Override + public void exportPlanCheckDataZip(String planId, HttpServletResponse response) { + AdPlanCheckDataVO planCheckDataVO = new AdPlanCheckDataVO(); + // 获取检测计划基本数据 + AdPlan plan = this.getById(planId); + planCheckDataVO.setPlan(plan); + // 获取检测计划绑定的被检设备数据 + List devList = pqDevService.list(new LambdaQueryWrapper().eq(PqDev::getPlanId, planId)); + planCheckDataVO.setDevList(devList); + List devIds = devList.stream().map(PqDev::getId).collect(Collectors.toList()); + // 被检设备状态统计 + List devSubList = pqDevSubService.list(new LambdaQueryWrapper().in(PqDevSub::getDevId, devIds)); + planCheckDataVO.setDevSubList(devSubList); + // 设备通道匹对关系 + List pairList = adPairService.list(new LambdaQueryWrapper().eq(AdPair::getPlanId, planId)); + planCheckDataVO.setPairList(pairList); + // 获取计划检测结果数据表以及数据 + Integer code = plan.getCode(); + Map>> checkData = new HashMap<>(); + List dataTableNames = CollUtil.newArrayList("ad_harmonic_" + code, "ad_non_harmonic_" + code, "ad_harmonic_result_" + code, "ad_non_harmonic_result_" + code); + for (String dataTableName : dataTableNames) { + List> dataList = jdbcTemplate.queryForList("select * from " + dataTableName); + checkData.put(dataTableName, dataList); + } + planCheckDataVO.setCheckData(checkData); + + // 导出数据.zip文件 + String jsonStr = JSONUtil.toJsonStr(planCheckDataVO); + try { + // 创建临时目录 + File tempDir = FileUtil.mkdir(FileUtil.getTmpDirPath() + "export_" + System.currentTimeMillis() + "/"); + + // 创建 JSON 文件 + String jsonFileName = plan.getName() + ".json"; + File jsonFile = FileUtil.file(tempDir, jsonFileName); + FileUtil.writeUtf8String(jsonStr, jsonFile); + + // 创建 ZIP 文件 + String zipFileName = URLEncoder.encode(plan.getName() + "_检测数据.zip", "UTF-8"); + File zipFile = FileUtil.file(tempDir, zipFileName); + + // 先将json文件添加到zip中 + ZipUtil.zip(jsonFile.getAbsolutePath(), zipFile.getAbsolutePath()); + + // 设置响应头 + response.reset(); + response.setContentType("application/octet-stream;charset=UTF-8"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + "\""); + + // 将 ZIP 文件写入响应 + ServletOutputStream os = response.getOutputStream(); + FileUtil.writeToStream(zipFile, os); + os.flush(); + os.close(); + + // 删除临时文件 + FileUtil.del(tempDir); + } catch (IOException e) { + log.error("导出计划检测数据.zip文件失败: ", e); + throw new BusinessException(CommonResponseEnum.FAIL); + } + } + }