ADD:导出子计划元信息zip包

This commit is contained in:
贾同学
2025-08-15 16:21:10 +08:00
parent a25febc245
commit 257d0b3af8
5 changed files with 265 additions and 44 deletions

View File

@@ -9,11 +9,13 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.njcn.db.mybatisplus.bo.BaseEntity; import com.njcn.db.mybatisplus.bo.BaseEntity;
import com.njcn.gather.monitor.pojo.po.PqMonitor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
/** /**
* @author caozehui * @author caozehui
@@ -186,5 +188,8 @@ public class PqDev extends BaseEntity implements Serializable {
* 状态0-删除 1-正常 * 状态0-删除 1-正常
*/ */
private Integer state; private Integer state;
@TableField(exist = false)
private List<PqMonitor> monitorList;
} }

View File

@@ -351,12 +351,32 @@ public class AdPlanController extends BaseController {
@OperateInfo(operateType = OperateType.DOWNLOAD) @OperateInfo(operateType = OperateType.DOWNLOAD)
@PostMapping("/exportSubPlan") @PostMapping("/exportSubPlan")
@ApiOperation("导出子计划") @ApiOperation("导出子计划元信息")
@ApiImplicitParam(name = "planId", value = "子计划id", required = true) @ApiImplicitParam(name = "planId", value = "子计划id", required = true)
public void exportSubPlan(@RequestParam("planId") String planId, HttpServletResponse response) { public void exportSubPlan(@RequestParam("planId") String planId, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("exportSubPlan"); String methodDescribe = getMethodDescribe("exportSubPlan");
LogUtil.njcnDebug(log, "{}导出ID数据为{}", methodDescribe, planId); LogUtil.njcnDebug(log, "{}导出ID数据为{}", methodDescribe, planId);
adPlanService.exportSubPlan(planId, response); adPlanService.exportSubPlanDataZip(planId, response);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPLOAD)
@PostMapping(value = "/importSubPlan")
@ApiOperation("导入子计划元信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "检测计划数据文件", required = true),
@ApiImplicitParam(name = "patternId", value = "模式Id", required = true)
})
public HttpResult<Boolean> importSubPlan(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("importSubPlan");
LogUtil.njcnDebug(log, "{},上传文件为:{}", methodDescribe, file.getOriginalFilename());
boolean fileType = FileUtil.judgeFileIsZip(file.getOriginalFilename());
if (!fileType) {
CommonResponseEnum fileTypeError = CommonResponseEnum.FILE_XLSX_ERROR;
fileTypeError.setMessage("请上传zip文件");
throw new BusinessException(fileTypeError);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} }
} }

View File

@@ -0,0 +1,43 @@
package com.njcn.gather.plan.pojo.vo;
import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.pojo.po.PqStandardDev;
import com.njcn.gather.err.pojo.po.PqErrSys;
import com.njcn.gather.err.pojo.po.PqErrSysDtls;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.report.pojo.po.PqReport;
import com.njcn.gather.system.cfg.pojo.po.SysTestConfig;
import com.njcn.gather.system.dictionary.pojo.po.DictData;
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
import com.njcn.gather.system.dictionary.pojo.po.DictType;
import com.njcn.gather.type.pojo.po.DevType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class AdSubPlanMetaDataVO {
private Dict dict;
private AdPlan plan;
private SysTestConfig testConfig;
private List<PqDev> devList;
private List<PqStandardDev> standardDevList;
private List<DevType> devTypeList;
private List<PqErrSys> errSysList;
private List<PqErrSysDtls> errSysDtlsList;
private PqReport reportTemplate;
@Data
@EqualsAndHashCode(callSuper = false)
public static class Dict{
private List<DictType> typeList;
private List<DictData> dataList;
private List<DictTree> treeList;
}
}

View File

@@ -174,10 +174,10 @@ public interface IAdPlanService extends IService<AdPlan> {
boolean updateBindStandardDev(String planId, List<String> standardDevIds); boolean updateBindStandardDev(String planId, List<String> standardDevIds);
/** /**
* 根据计划Id导出子计划数据 * 导出子计划元信息
* *
* @param planId * @param planId
* @param response * @param response
*/ */
void exportSubPlan(String planId, HttpServletResponse response); void exportSubPlanDataZip(String planId, HttpServletResponse response);
} }

View File

@@ -6,14 +6,19 @@ import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
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.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum; 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.exception.BusinessException;
import com.njcn.common.pojo.poi.PullDown; import com.njcn.common.pojo.poi.PullDown;
import com.njcn.gather.device.mapper.PqDevMapper; import com.njcn.gather.device.mapper.PqDevMapper;
@@ -29,7 +34,11 @@ import com.njcn.gather.device.pojo.vo.ProvinceDevExcel;
import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.device.service.IPqDevSubService; import com.njcn.gather.device.service.IPqDevSubService;
import com.njcn.gather.err.pojo.po.PqErrSys; import com.njcn.gather.err.pojo.po.PqErrSys;
import com.njcn.gather.err.pojo.po.PqErrSysDtls;
import com.njcn.gather.err.service.IPqErrSysDtlsService;
import com.njcn.gather.err.service.IPqErrSysService; import com.njcn.gather.err.service.IPqErrSysService;
import com.njcn.gather.monitor.pojo.po.PqMonitor;
import com.njcn.gather.monitor.service.IPqMonitorService;
import com.njcn.gather.plan.mapper.AdPlanMapper; import com.njcn.gather.plan.mapper.AdPlanMapper;
import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper; import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper;
import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
@@ -37,15 +46,13 @@ import com.njcn.gather.plan.pojo.enums.PlanReportStateEnum;
import com.njcn.gather.plan.pojo.param.AdPlanParam; import com.njcn.gather.plan.pojo.param.AdPlanParam;
import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.po.AdPlanStandardDev; import com.njcn.gather.plan.pojo.po.AdPlanStandardDev;
import com.njcn.gather.plan.pojo.vo.AdPlanVO; import com.njcn.gather.plan.pojo.vo.*;
import com.njcn.gather.plan.pojo.vo.CNPlanExcel;
import com.njcn.gather.plan.pojo.vo.ContrastPlanExcel;
import com.njcn.gather.plan.pojo.vo.ProvincePlanExcel;
import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.plan.service.IAdPlanSourceService; import com.njcn.gather.plan.service.IAdPlanSourceService;
import com.njcn.gather.plan.service.IAdPlanStandardDevService; import com.njcn.gather.plan.service.IAdPlanStandardDevService;
import com.njcn.gather.pojo.enums.DetectionResponseEnum; import com.njcn.gather.pojo.enums.DetectionResponseEnum;
import com.njcn.gather.report.pojo.po.PqReport; import com.njcn.gather.report.pojo.po.PqReport;
import com.njcn.gather.report.service.IPqReportService;
import com.njcn.gather.script.pojo.po.PqScript; import com.njcn.gather.script.pojo.po.PqScript;
import com.njcn.gather.script.pojo.po.PqScriptDtls; import com.njcn.gather.script.pojo.po.PqScriptDtls;
import com.njcn.gather.script.service.IPqScriptDtlsService; import com.njcn.gather.script.service.IPqScriptDtlsService;
@@ -84,6 +91,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.*; import java.util.*;
@@ -116,6 +124,8 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
private final IAdPlanStandardDevService adPlanStandardDevService; private final IAdPlanStandardDevService adPlanStandardDevService;
private final AdPlanStandardDevMapper adPlanStandardDevMapper; private final AdPlanStandardDevMapper adPlanStandardDevMapper;
private final IAdPlanStandardDevService adPlanContrastStandardDevService; private final IAdPlanStandardDevService adPlanContrastStandardDevService;
private final IPqMonitorService pqMonitorService;
private final IPqErrSysDtlsService pqErrSysDtlsService;
@Override @Override
public List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) { public List<AdPlanVO> listAdPlan(AdPlanParam.QueryParam queryParam) {
@@ -160,7 +170,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
adPlanVO.setSourceName(pqSourceList.stream().map(PqSource::getName).collect(Collectors.toList())); adPlanVO.setSourceName(pqSourceList.stream().map(PqSource::getName).collect(Collectors.toList()));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanIdList(Arrays.asList(adPlan.getId())); queryParam1.setPlanIdList(Collections.singletonList(adPlan.getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1); List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1);
if (CollUtil.isNotEmpty(pqDevVOList)) { if (CollUtil.isNotEmpty(pqDevVOList)) {
@@ -261,7 +271,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
// 关联检测源 // 关联检测源
adPlanSourceService.addAdPlanSource(planId, param.getSourceIds()); adPlanSourceService.addAdPlanSource(planId, param.getSourceIds());
} }
tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString())); tableGenService.deleteTable(Collections.singletonList(adPlan.getCode().toString()));
tableGenService.genTable(adPlan.getCode().toString(), PatternEnum.CONTRAST.getValue().equals(dictData.getCode())); tableGenService.genTable(adPlan.getCode().toString(), PatternEnum.CONTRAST.getValue().equals(dictData.getCode()));
return true; return true;
@@ -273,14 +283,42 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
param.setName(param.getName().trim()); param.setName(param.getName().trim());
AdPlan plan1 = this.getById(param.getId()); AdPlan plan1 = this.getById(param.getId());
// 更新子计划 // 更新子计划
if (StrUtil.isNotEmpty(plan1.getFatherPlanId())) { String fatherPlanId = plan1.getFatherPlanId();
if (StrUtil.isNotEmpty(fatherPlanId) && !StrUtil.equals(fatherPlanId,"0")) {
this.updateBindStandardDev(param.getId(), param.getStandardDevIds()); this.updateBindStandardDev(param.getId(), param.getStandardDevIds());
PqDevParam.BindPlanParam bindPlanParam = new PqDevParam.BindPlanParam(); List<AdPlan> list = new ArrayList<>();
bindPlanParam.setPlanId(param.getId()); AdPlan fatherPlan = this.getById(fatherPlanId);
bindPlanParam.setDevIds(param.getDevIds()); // 原始绑定被检设备
bindPlanParam.setBindFlag(1); List<PqDev> oldDevList = pqDevService.list(new QueryWrapper<PqDev>().eq("Plan_Id", param.getId()).eq("State", DataStateEnum.ENABLE.getCode()));
this.updateBindDev(bindPlanParam); List<String> oldDevIds = oldDevList.stream().map(PqDev::getId).collect(Collectors.toList());
return true; List<String> newDevIds = param.getDevIds();
if (CollUtil.isNotEmpty(newDevIds)) {
plan1.setTestState(pqDevService.bind(param.getId(), newDevIds));
// 获取并集
List<String> unionDevIds = new ArrayList<>(CollUtil.union(oldDevIds, newDevIds));
// 排除
newDevIds.forEach(unionDevIds::remove);
List<PqDev> fatherNowDevList = pqDevService.list(new QueryWrapper<PqDev>().eq("Plan_Id", fatherPlanId).eq("State", DataStateEnum.ENABLE.getCode()));
List<String> fatherNowDevIds = fatherNowDevList.stream().map(PqDev::getId).collect(Collectors.toList());
// 把排除绑定到主计划
fatherNowDevIds.addAll(unionDevIds);
fatherPlan.setTestState(pqDevService.bind(fatherPlanId, fatherNowDevIds));
list.add(fatherPlan);
} else {
if (CollUtil.isNotEmpty(oldDevIds)) {
List<PqDev> fatherNowDevList = pqDevService.list(new QueryWrapper<PqDev>().eq("Plan_Id", fatherPlanId).eq("State", DataStateEnum.ENABLE.getCode()));
List<String> fatherNowDevIds = fatherNowDevList.stream().map(PqDev::getId).collect(Collectors.toList());
fatherNowDevIds.addAll(oldDevIds);
// 把原始都绑定到主计划
fatherPlan.setTestState(pqDevService.bind(fatherPlanId, fatherNowDevIds));
list.add(fatherPlan);
}
}
return this.updateBatchById(list);
} }
this.checkRepeat(param, true, CommonEnum.FATHER_ID.getValue()); this.checkRepeat(param, true, CommonEnum.FATHER_ID.getValue());
AdPlan plan2 = new AdPlan(); AdPlan plan2 = new AdPlan();
@@ -360,7 +398,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
public boolean deleteAdPlan(List<String> ids, String pattern) { public boolean deleteAdPlan(List<String> ids, String pattern) {
for (String id : ids) { for (String id : ids) {
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanIdList(Arrays.asList(id)); queryParam.setPlanIdList(Collections.singletonList(id));
if (ObjectUtils.isNotEmpty(pqDevService.listByPlanId(queryParam))) { if (ObjectUtils.isNotEmpty(pqDevService.listByPlanId(queryParam))) {
throw new BusinessException(DetectionResponseEnum.PLAN_HAS_DEVICE_BIND); throw new BusinessException(DetectionResponseEnum.PLAN_HAS_DEVICE_BIND);
} }
@@ -558,7 +596,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
} }
} }
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanIdList(Arrays.asList(planId)); queryParam.setPlanIdList(Collections.singletonList(planId));
List<PqDevVO> pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam); List<PqDevVO> pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam);
List<PqDev> collect = pqDevVOList1.stream().filter(x -> !x.getCheckState().equals(CheckStateEnum.UNCHECKED.getValue())).collect(Collectors.toList()); List<PqDev> collect = pqDevVOList1.stream().filter(x -> !x.getCheckState().equals(CheckStateEnum.UNCHECKED.getValue())).collect(Collectors.toList());
if (CollUtil.isEmpty(collect)) { if (CollUtil.isEmpty(collect)) {
@@ -605,7 +643,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
List<PqDevVO> allDevList = new ArrayList<>(); List<PqDevVO> allDevList = new ArrayList<>();
for (AdPlan plan : planList) { for (AdPlan plan : planList) {
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanIdList(Arrays.asList(plan.getId())); queryParam.setPlanIdList(Collections.singletonList(plan.getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam); List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam);
pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
allDevList.addAll(pqDevVOList); allDevList.addAll(pqDevVOList);
@@ -623,7 +661,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
} else { } else {
AdPlan plan = planList.get(0); AdPlan plan = planList.get(0);
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanIdList(Arrays.asList(plan.getId())); queryParam.setPlanIdList(Collections.singletonList(plan.getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam); List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam);
pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
@@ -671,7 +709,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
sheet.put("entity", ContrastDevExcel.class); sheet.put("entity", ContrastDevExcel.class);
PqDevParam.QueryParam param = new PqDevParam.QueryParam(); PqDevParam.QueryParam param = new PqDevParam.QueryParam();
param.setPlanIdList(Arrays.asList(plan.getId())); param.setPlanIdList(Collections.singletonList(plan.getId()));
List<PqDevVO> pqDevVOList = pqDevService.listByPlanId(param); List<PqDevVO> pqDevVOList = pqDevService.listByPlanId(param);
List<ContrastDevExcel> exportContrastDevData = pqDevService.getExportContrastDevData(pqDevVOList); List<ContrastDevExcel> exportContrastDevData = pqDevService.getExportContrastDevData(pqDevVOList);
sheet.put("data", exportContrastDevData); sheet.put("data", exportContrastDevData);
@@ -806,24 +844,6 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
return true; return true;
} }
@Override
public void exportSubPlan(String planId, HttpServletResponse response) {
// 子计划数据
AdPlan subPlan = this.getById(planId);
//子计划绑定的标准设备
List<PqStandardDev> pqStandardDevs = adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId));
// 子计划绑定的被检设备
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanIdList(Collections.singletonList(planId));
List<PqDev> pqDevList = pqDevService.list(new QueryWrapper<PqDev>().eq("Plan_Id", planId));
List<PqDevSub> pqDevSubList = new ArrayList<>();
if (CollUtil.isNotEmpty(pqDevList)) {
pqDevSubList.addAll(pqDevSubService.list(new QueryWrapper<PqDevSub>().in("dev_Id", pqDevList.stream().map(PqDev::getId).collect(Collectors.toList()))));
}
}
/** /**
* 省级平台导出检测计划数据 * 省级平台导出检测计划数据
* *
@@ -838,7 +858,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA))); planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA)));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanIdList(Arrays.asList(planList.get(i).getId())); queryParam1.setPlanIdList(Collections.singletonList(planList.get(i).getId()));
List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1); List<PqDevVO> pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1);
pqDevService.visualizeProvinceDev(pqDevVOList); pqDevService.visualizeProvinceDev(pqDevVOList);
List<ProvinceDevExcel> deviceExportData = BeanUtil.copyToList(pqDevVOList, ProvinceDevExcel.class); List<ProvinceDevExcel> deviceExportData = BeanUtil.copyToList(pqDevVOList, ProvinceDevExcel.class);
@@ -861,7 +881,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA))); planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA)));
PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam();
queryParam1.setPlanIdList(Arrays.asList(planList.get(i).getId())); queryParam1.setPlanIdList(Collections.singletonList(planList.get(i).getId()));
List<PqDevVO> pqDevs = pqDevMapper.selectByQueryParam(queryParam1); List<PqDevVO> pqDevs = pqDevMapper.selectByQueryParam(queryParam1);
pqDevService.visualizeCNDev(pqDevs); pqDevService.visualizeCNDev(pqDevs);
List<CNDevExcel> deviceExportData = BeanUtil.copyToList(pqDevs, CNDevExcel.class); List<CNDevExcel> deviceExportData = BeanUtil.copyToList(pqDevs, CNDevExcel.class);
@@ -943,7 +963,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
List<CNDevExcel> cnDevExcelList = planExcel.getDevices(); List<CNDevExcel> cnDevExcelList = planExcel.getDevices();
pqDevService.importCNDev(cnDevExcelList, patternId, planId); pqDevService.importCNDev(cnDevExcelList, patternId, planId);
tableGenService.deleteTable(Arrays.asList(code.toString())); tableGenService.deleteTable(Collections.singletonList(code.toString()));
tableGenService.genTable(code.toString(), PatternEnum.CONTRAST.getValue().equals(patternCode)); tableGenService.genTable(code.toString(), PatternEnum.CONTRAST.getValue().equals(patternCode));
} }
// 逆向可视化 // 逆向可视化
@@ -1001,7 +1021,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
Integer code = this.generateCode(); Integer code = this.generateCode();
adPlans.get(i).setCode(code); adPlans.get(i).setCode(code);
tableGenService.deleteTable(Arrays.asList(code.toString())); tableGenService.deleteTable(Collections.singletonList(code.toString()));
tableGenService.genTable(code.toString(), PatternEnum.CONTRAST.getValue().equals(patternCode)); tableGenService.genTable(code.toString(), PatternEnum.CONTRAST.getValue().equals(patternCode));
String source = planExcel.getSource(); String source = planExcel.getSource();
@@ -1484,4 +1504,137 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
} }
return pullDowns; return pullDowns;
} }
@Override
public void exportSubPlanDataZip(String planId, HttpServletResponse response) {
AdSubPlanMetaDataVO subPlanMetaData = new AdSubPlanMetaDataVO();
// 获取所有字典数据
AdSubPlanMetaDataVO.Dict dict = new AdSubPlanMetaDataVO.Dict();
List<DictType> dictTypeList = dictTypeService.list();
List<DictData> dictDataList = dictDataService.list();
List<DictTree> dictTreeList = dictTreeService.list();
dict.setTypeList(dictTypeList);
dict.setDataList(dictDataList);
dict.setTreeList(dictTreeList);
subPlanMetaData.setDict(dict);
// 获取检测相关配置
SysTestConfig testConfig = sysTestConfigService.getOneConfig();
subPlanMetaData.setTestConfig(testConfig);
// 获取误差体系数据
List<PqErrSys> errSysList = pqErrSysService.list();
subPlanMetaData.setErrSysList(errSysList);
List<PqErrSysDtls> errSysDtlsList = pqErrSysDtlsService.list();
subPlanMetaData.setErrSysDtlsList(errSysDtlsList);
// 获取检测计划基本数据
AdPlan subPlan = this.getById(planId);
subPlanMetaData.setPlan(subPlan);
// 获取检设备类型数据
List<DevType> devTypeList = devTypeService.list();
subPlanMetaData.setDevTypeList(devTypeList);
// 获取检测计划绑定的被检设备数据
List<PqDev> devList = pqDevService.list(new QueryWrapper<PqDev>().eq("Plan_Id", planId));
if (CollUtil.isNotEmpty(devList)) {
List<String> devIds = devList.stream().map(PqDev::getId).collect(Collectors.toList());
// 被检设备监测点
List<PqMonitor> pqMonitorList = pqMonitorService.lambdaQuery().in(PqMonitor::getDevId, devIds).list();
Map<String, List<PqMonitor>> monitorListMap = pqMonitorList.stream().collect(Collectors.groupingBy(PqMonitor::getDevId));
devList.forEach(dev -> {
dev.setMonitorList(monitorListMap.getOrDefault(dev.getId(), new ArrayList<>()));
});
}
subPlanMetaData.setDevList(devList);
// 获取检测计划绑定的标准设备数据
List<PqStandardDev> standardDevList = adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId));
subPlanMetaData.setStandardDevList(standardDevList);
// 获取检测计划关联的检测报告模板数据以及文件
PqReport reportTemplate = SpringUtil.getBean(IPqReportService.class).getById(subPlan.getReportTemplateId());
subPlanMetaData.setReportTemplate(reportTemplate);
String basePath = reportTemplate.getBasePath();
// 导出数据.zip文件
String jsonStr = JSONUtil.toJsonStr(subPlanMetaData);
try {
// 创建临时目录
File tempDir = FileUtil.mkdir(FileUtil.getTmpDirPath() + "export_" + System.currentTimeMillis() + "/");
// 创建 JSON 文件
String jsonFileName = subPlan.getName() + ".json";
File jsonFile = FileUtil.file(tempDir, jsonFileName);
FileUtil.writeUtf8String(jsonStr, jsonFile);
// 创建 ZIP 文件
String zipFileName = URLEncoder.encode(subPlan.getName() + ".zip", "UTF-8");
File zipFile = FileUtil.file(tempDir, zipFileName);
// 先将json文件添加到zip中
ZipUtil.zip(jsonFile.getAbsolutePath(), zipFile.getAbsolutePath());
// 如果basePath存在则将basePath中的文件添加到已有的zip文件中
if (FileUtil.exist(basePath)) {
File baseFile = new File(basePath);
if (baseFile.isDirectory()) {
// 如果是目录将目录内容添加到zip中
File[] files = baseFile.listFiles();
if (files != null && files.length > 0) {
// 创建一个临时目录用于存放所有需要压缩的文件
File tempZipDir = FileUtil.mkdir(FileUtil.getTmpDirPath() + "zip_temp_" + System.currentTimeMillis() + "/");
// 复制json文件到临时目录
FileUtil.copy(jsonFile, tempZipDir, true);
// 复制basePath目录下的所有文件到临时目录
for (File file : files) {
FileUtil.copy(file, tempZipDir, true);
}
// 重新创建zip文件包含所有文件
ZipUtil.zip(tempZipDir.getAbsolutePath(), zipFile.getAbsolutePath());
// 删除临时目录
FileUtil.del(tempZipDir);
}
} else {
// 如果是单个文件,创建一个临时目录存放两个文件
File tempZipDir = FileUtil.mkdir(FileUtil.getTmpDirPath() + "zip_temp_" + System.currentTimeMillis() + "/");
// 复制json文件到临时目录
FileUtil.copy(jsonFile, tempZipDir, true);
// 复制baseFile到临时目录
FileUtil.copy(baseFile, tempZipDir, true);
// 重新创建zip文件包含所有文件
ZipUtil.zip(tempZipDir.getAbsolutePath(), zipFile.getAbsolutePath());
// 删除临时目录
FileUtil.del(tempZipDir);
}
}
// 设置响应头
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);
}
}
} }