diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java index 9fde36c..656caf8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrintFileModuleNameEnum; import com.casic.missiles.enums.PrintFileModuleParamsEnum; @@ -137,20 +139,16 @@ public List doCreateOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { //作为分发点 try { - if(examineOriginalFile(measureItemInfo)){ - log.debug("校验没有原始记录"); - return null; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + if (examineOriginalFile(measureItemInfo)) { + log.debug("校验没有原始记录"); + return null; } Map map = BeanUtil.beanToMap(measureItemInfo); List customTemplateUrls = new ArrayList<>(); BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); //准备封面参数 prepareCoverParams(map, measureItemInfo.getLabCode()); + List dataItems = checkParamAddRomveItem(measureItemInfo, map); measureItemInfo.setLabCodeName("12222"); //定制化原始记录参数 prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); @@ -163,7 +161,13 @@ map.put("id", snowflakeUtil.nextId()); log.debug("original before ----"); //除了选用的模板不一致,模板配置流程是一致的 - String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, false, null, customTemplateUrls); + String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, + RegisterCustomParameters.builder() + .customParam(map) + .dataItems(dataItems) + .pdf(false) + .customTemplateUrls(customTemplateUrls) + .build()); log.debug("originalUrlFile after------------{}", originalWordUrlFile); List urlList = new ArrayList<>(); urlList.add(originalWordUrlFile); @@ -313,6 +317,42 @@ /** + * 检定项不存在,则对该项填充的标题和表格进行删除 + * + * @param measureItemInfo + * @param map + * @return + */ + private List checkParamAddRomveItem(BizBusinessDeviceMeasureApproval measureItemInfo, Map map) { + List dataItems = new ArrayList<>(); + int titleIndex = 1; + //外观及功能性检查 和检定项删除无关系 + if (StringUtils.isEmpty(measureItemInfo.getAppearanceFunctionCheck())) { + addDataRemoveItem(dataItems, -1, "外观及功能性检查"); + } else { + map.put("zeroSeq", (titleIndex++) + "."); + } + //如果是功能校准源,则进行一下删除 + if (measureItemInfo.getItemCategoryName().contains("多功能")) { + Map> measureDataMap = measureItemInfo.getMeasureDataCalibratorList().stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + checkRemoveItem(measureDataMap, "ACI", map, "firstSeq", titleIndex, dataItems, 3, "交流电流"); + checkRemoveItem(measureDataMap, "ACV", map, "secondSeq", titleIndex, dataItems, 4, "交流电压"); + checkRemoveItem(measureDataMap, "DCI", map, "thirdSeq", titleIndex, dataItems, 5, "直流电流"); + checkRemoveItem(measureDataMap, "DCV", map, "fourthSeq", titleIndex, dataItems, 6, "直流电压"); + } else {//其他检查项 + if (CollectionUtils.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + addDataRemoveItem(dataItems, 2, measureItemInfo.getItemCategoryName().contains("交流电压") ? "基本误差" : "示值误差"); + } else { + map.put("firstSeq", (titleIndex++) + "."); + } + } + return dataItems; + } + + + /** * 直流电压表没有HZ,处理电流表\电压表定制化参数 * 多功能 * diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java index 9fde36c..656caf8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrintFileModuleNameEnum; import com.casic.missiles.enums.PrintFileModuleParamsEnum; @@ -137,20 +139,16 @@ public List doCreateOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { //作为分发点 try { - if(examineOriginalFile(measureItemInfo)){ - log.debug("校验没有原始记录"); - return null; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + if (examineOriginalFile(measureItemInfo)) { + log.debug("校验没有原始记录"); + return null; } Map map = BeanUtil.beanToMap(measureItemInfo); List customTemplateUrls = new ArrayList<>(); BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); //准备封面参数 prepareCoverParams(map, measureItemInfo.getLabCode()); + List dataItems = checkParamAddRomveItem(measureItemInfo, map); measureItemInfo.setLabCodeName("12222"); //定制化原始记录参数 prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); @@ -163,7 +161,13 @@ map.put("id", snowflakeUtil.nextId()); log.debug("original before ----"); //除了选用的模板不一致,模板配置流程是一致的 - String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, false, null, customTemplateUrls); + String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, + RegisterCustomParameters.builder() + .customParam(map) + .dataItems(dataItems) + .pdf(false) + .customTemplateUrls(customTemplateUrls) + .build()); log.debug("originalUrlFile after------------{}", originalWordUrlFile); List urlList = new ArrayList<>(); urlList.add(originalWordUrlFile); @@ -313,6 +317,42 @@ /** + * 检定项不存在,则对该项填充的标题和表格进行删除 + * + * @param measureItemInfo + * @param map + * @return + */ + private List checkParamAddRomveItem(BizBusinessDeviceMeasureApproval measureItemInfo, Map map) { + List dataItems = new ArrayList<>(); + int titleIndex = 1; + //外观及功能性检查 和检定项删除无关系 + if (StringUtils.isEmpty(measureItemInfo.getAppearanceFunctionCheck())) { + addDataRemoveItem(dataItems, -1, "外观及功能性检查"); + } else { + map.put("zeroSeq", (titleIndex++) + "."); + } + //如果是功能校准源,则进行一下删除 + if (measureItemInfo.getItemCategoryName().contains("多功能")) { + Map> measureDataMap = measureItemInfo.getMeasureDataCalibratorList().stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + checkRemoveItem(measureDataMap, "ACI", map, "firstSeq", titleIndex, dataItems, 3, "交流电流"); + checkRemoveItem(measureDataMap, "ACV", map, "secondSeq", titleIndex, dataItems, 4, "交流电压"); + checkRemoveItem(measureDataMap, "DCI", map, "thirdSeq", titleIndex, dataItems, 5, "直流电流"); + checkRemoveItem(measureDataMap, "DCV", map, "fourthSeq", titleIndex, dataItems, 6, "直流电压"); + } else {//其他检查项 + if (CollectionUtils.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + addDataRemoveItem(dataItems, 2, measureItemInfo.getItemCategoryName().contains("交流电压") ? "基本误差" : "示值误差"); + } else { + map.put("firstSeq", (titleIndex++) + "."); + } + } + return dataItems; + } + + + /** * 直流电压表没有HZ,处理电流表\电压表定制化参数 * 多功能 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 94097ee..51d1533 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,10 +96,7 @@ return; } //创建线程组 - int corePoolSize = 1; - if (list.size() > 5) { - corePoolSize = 5; - } + int corePoolSize = list.size() > 5 ? 5 : list.size(); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java index 9fde36c..656caf8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrintFileModuleNameEnum; import com.casic.missiles.enums.PrintFileModuleParamsEnum; @@ -137,20 +139,16 @@ public List doCreateOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { //作为分发点 try { - if(examineOriginalFile(measureItemInfo)){ - log.debug("校验没有原始记录"); - return null; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + if (examineOriginalFile(measureItemInfo)) { + log.debug("校验没有原始记录"); + return null; } Map map = BeanUtil.beanToMap(measureItemInfo); List customTemplateUrls = new ArrayList<>(); BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); //准备封面参数 prepareCoverParams(map, measureItemInfo.getLabCode()); + List dataItems = checkParamAddRomveItem(measureItemInfo, map); measureItemInfo.setLabCodeName("12222"); //定制化原始记录参数 prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); @@ -163,7 +161,13 @@ map.put("id", snowflakeUtil.nextId()); log.debug("original before ----"); //除了选用的模板不一致,模板配置流程是一致的 - String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, false, null, customTemplateUrls); + String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, + RegisterCustomParameters.builder() + .customParam(map) + .dataItems(dataItems) + .pdf(false) + .customTemplateUrls(customTemplateUrls) + .build()); log.debug("originalUrlFile after------------{}", originalWordUrlFile); List urlList = new ArrayList<>(); urlList.add(originalWordUrlFile); @@ -313,6 +317,42 @@ /** + * 检定项不存在,则对该项填充的标题和表格进行删除 + * + * @param measureItemInfo + * @param map + * @return + */ + private List checkParamAddRomveItem(BizBusinessDeviceMeasureApproval measureItemInfo, Map map) { + List dataItems = new ArrayList<>(); + int titleIndex = 1; + //外观及功能性检查 和检定项删除无关系 + if (StringUtils.isEmpty(measureItemInfo.getAppearanceFunctionCheck())) { + addDataRemoveItem(dataItems, -1, "外观及功能性检查"); + } else { + map.put("zeroSeq", (titleIndex++) + "."); + } + //如果是功能校准源,则进行一下删除 + if (measureItemInfo.getItemCategoryName().contains("多功能")) { + Map> measureDataMap = measureItemInfo.getMeasureDataCalibratorList().stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + checkRemoveItem(measureDataMap, "ACI", map, "firstSeq", titleIndex, dataItems, 3, "交流电流"); + checkRemoveItem(measureDataMap, "ACV", map, "secondSeq", titleIndex, dataItems, 4, "交流电压"); + checkRemoveItem(measureDataMap, "DCI", map, "thirdSeq", titleIndex, dataItems, 5, "直流电流"); + checkRemoveItem(measureDataMap, "DCV", map, "fourthSeq", titleIndex, dataItems, 6, "直流电压"); + } else {//其他检查项 + if (CollectionUtils.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + addDataRemoveItem(dataItems, 2, measureItemInfo.getItemCategoryName().contains("交流电压") ? "基本误差" : "示值误差"); + } else { + map.put("firstSeq", (titleIndex++) + "."); + } + } + return dataItems; + } + + + /** * 直流电压表没有HZ,处理电流表\电压表定制化参数 * 多功能 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 94097ee..51d1533 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,10 +96,7 @@ return; } //创建线程组 - int corePoolSize = 1; - if (list.size() > 5) { - corePoolSize = 5; - } + int corePoolSize = list.size() > 5 ? 5 : list.size(); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index d76ab4c..b491198 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.service.listeners.register.util.WordUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -14,6 +15,7 @@ import com.spire.doc.fields.TextRange; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.springframework.util.CollectionUtils; import javax.imageio.ImageIO; import java.awt.*; @@ -111,8 +113,8 @@ // params.put("assetList", assetList); // params.put("one", "1、李四的意思"); // } - String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); - System.out.println(newOldUrl); +// String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); +// System.out.println(newOldUrl); } private static void textBoxTest() throws IOException { @@ -151,7 +153,22 @@ } public static void main(String[] args) { - removeBodyElement(); + String localPathUrl = "D:\\casic\\cut\\"; + String filePath = localPathUrl + "1.docx"; + String saveFilePath = localPathUrl + "2.docx"; + List toBeRemoveDataItemList = new ArrayList<>(); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .paramContent("相信") + .build() + ); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .table(true) + .tableIndex(1) + .build() + ); + removeBodyElement(toBeRemoveDataItemList, filePath); } @@ -235,24 +252,42 @@ /** * 删除文档 */ - public static void removeBodyElement() { - String localPathUrl = "D:\\casic\\cut\\"; - String filePath = localPathUrl + "1.docx"; - String saveFilePath = localPathUrl + "2.docx"; + public static void removeBodyElement(List dataItems, String filePath) { + if (CollectionUtils.isEmpty(dataItems)) { + return; + } // 加载Word文档 InputStream in = null; + int dataItemIndex = 0; try { in = new FileInputStream(filePath); org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(in); - // 找到需要删除的表格,这里假设我们删除第一个表格 + // 存在两个下标,一个是当前文档的下标,一个是查询空的下标,两个下标同时移动,判断是表还是普通文段 int tableIndex = 0; - document.getParagraphs().get(1).removeRun(1); -// document.removeBodyElement(7); - System.out.println(document.getBodyElements().size()); -// document.removeBodyElement(8); - System.out.println(document.getBodyElements().size()); + for (int i = 0; i < document.getBodyElements().size() - tableIndex; i++) { + System.out.println(document.getBodyElements().size()); + ToBeRemoveDataItem removeDataItem = dataItems.get(dataItemIndex); + //段落的情况下根据内容进行删除 + if ("PARAGRAPH".equals(document.getBodyElements().get(i).getElementType().name())) { + if (!removeDataItem.isTable()) { + if (document.getParagraphs().get(i).getText().contains(removeDataItem.getParamContent())) { + document.removeBodyElement(i--); + dataItemIndex++; + continue; + } + } + } + //表格的情况下根据下标进行删除内容 + if ("TABLE".equals(document.getBodyElements().get(i).getElementType().name())) { + if (removeDataItem.isTable() && tableIndex == (removeDataItem.getTableIndex() - 1)) { + document.removeBodyElement(i--); + } + tableIndex++; + dataItemIndex++; + } + } // 将修改后的文档写入新文件 - FileOutputStream out = new FileOutputStream(saveFilePath); + FileOutputStream out = new FileOutputStream(filePath); document.write(out); out.close(); } catch (Exception e) { diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java index 9fde36c..656caf8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrintFileModuleNameEnum; import com.casic.missiles.enums.PrintFileModuleParamsEnum; @@ -137,20 +139,16 @@ public List doCreateOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { //作为分发点 try { - if(examineOriginalFile(measureItemInfo)){ - log.debug("校验没有原始记录"); - return null; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + if (examineOriginalFile(measureItemInfo)) { + log.debug("校验没有原始记录"); + return null; } Map map = BeanUtil.beanToMap(measureItemInfo); List customTemplateUrls = new ArrayList<>(); BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); //准备封面参数 prepareCoverParams(map, measureItemInfo.getLabCode()); + List dataItems = checkParamAddRomveItem(measureItemInfo, map); measureItemInfo.setLabCodeName("12222"); //定制化原始记录参数 prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); @@ -163,7 +161,13 @@ map.put("id", snowflakeUtil.nextId()); log.debug("original before ----"); //除了选用的模板不一致,模板配置流程是一致的 - String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, false, null, customTemplateUrls); + String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, + RegisterCustomParameters.builder() + .customParam(map) + .dataItems(dataItems) + .pdf(false) + .customTemplateUrls(customTemplateUrls) + .build()); log.debug("originalUrlFile after------------{}", originalWordUrlFile); List urlList = new ArrayList<>(); urlList.add(originalWordUrlFile); @@ -313,6 +317,42 @@ /** + * 检定项不存在,则对该项填充的标题和表格进行删除 + * + * @param measureItemInfo + * @param map + * @return + */ + private List checkParamAddRomveItem(BizBusinessDeviceMeasureApproval measureItemInfo, Map map) { + List dataItems = new ArrayList<>(); + int titleIndex = 1; + //外观及功能性检查 和检定项删除无关系 + if (StringUtils.isEmpty(measureItemInfo.getAppearanceFunctionCheck())) { + addDataRemoveItem(dataItems, -1, "外观及功能性检查"); + } else { + map.put("zeroSeq", (titleIndex++) + "."); + } + //如果是功能校准源,则进行一下删除 + if (measureItemInfo.getItemCategoryName().contains("多功能")) { + Map> measureDataMap = measureItemInfo.getMeasureDataCalibratorList().stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + checkRemoveItem(measureDataMap, "ACI", map, "firstSeq", titleIndex, dataItems, 3, "交流电流"); + checkRemoveItem(measureDataMap, "ACV", map, "secondSeq", titleIndex, dataItems, 4, "交流电压"); + checkRemoveItem(measureDataMap, "DCI", map, "thirdSeq", titleIndex, dataItems, 5, "直流电流"); + checkRemoveItem(measureDataMap, "DCV", map, "fourthSeq", titleIndex, dataItems, 6, "直流电压"); + } else {//其他检查项 + if (CollectionUtils.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + addDataRemoveItem(dataItems, 2, measureItemInfo.getItemCategoryName().contains("交流电压") ? "基本误差" : "示值误差"); + } else { + map.put("firstSeq", (titleIndex++) + "."); + } + } + return dataItems; + } + + + /** * 直流电压表没有HZ,处理电流表\电压表定制化参数 * 多功能 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 94097ee..51d1533 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,10 +96,7 @@ return; } //创建线程组 - int corePoolSize = 1; - if (list.size() > 5) { - corePoolSize = 5; - } + int corePoolSize = list.size() > 5 ? 5 : list.size(); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index d76ab4c..b491198 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.service.listeners.register.util.WordUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -14,6 +15,7 @@ import com.spire.doc.fields.TextRange; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.springframework.util.CollectionUtils; import javax.imageio.ImageIO; import java.awt.*; @@ -111,8 +113,8 @@ // params.put("assetList", assetList); // params.put("one", "1、李四的意思"); // } - String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); - System.out.println(newOldUrl); +// String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); +// System.out.println(newOldUrl); } private static void textBoxTest() throws IOException { @@ -151,7 +153,22 @@ } public static void main(String[] args) { - removeBodyElement(); + String localPathUrl = "D:\\casic\\cut\\"; + String filePath = localPathUrl + "1.docx"; + String saveFilePath = localPathUrl + "2.docx"; + List toBeRemoveDataItemList = new ArrayList<>(); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .paramContent("相信") + .build() + ); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .table(true) + .tableIndex(1) + .build() + ); + removeBodyElement(toBeRemoveDataItemList, filePath); } @@ -235,24 +252,42 @@ /** * 删除文档 */ - public static void removeBodyElement() { - String localPathUrl = "D:\\casic\\cut\\"; - String filePath = localPathUrl + "1.docx"; - String saveFilePath = localPathUrl + "2.docx"; + public static void removeBodyElement(List dataItems, String filePath) { + if (CollectionUtils.isEmpty(dataItems)) { + return; + } // 加载Word文档 InputStream in = null; + int dataItemIndex = 0; try { in = new FileInputStream(filePath); org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(in); - // 找到需要删除的表格,这里假设我们删除第一个表格 + // 存在两个下标,一个是当前文档的下标,一个是查询空的下标,两个下标同时移动,判断是表还是普通文段 int tableIndex = 0; - document.getParagraphs().get(1).removeRun(1); -// document.removeBodyElement(7); - System.out.println(document.getBodyElements().size()); -// document.removeBodyElement(8); - System.out.println(document.getBodyElements().size()); + for (int i = 0; i < document.getBodyElements().size() - tableIndex; i++) { + System.out.println(document.getBodyElements().size()); + ToBeRemoveDataItem removeDataItem = dataItems.get(dataItemIndex); + //段落的情况下根据内容进行删除 + if ("PARAGRAPH".equals(document.getBodyElements().get(i).getElementType().name())) { + if (!removeDataItem.isTable()) { + if (document.getParagraphs().get(i).getText().contains(removeDataItem.getParamContent())) { + document.removeBodyElement(i--); + dataItemIndex++; + continue; + } + } + } + //表格的情况下根据下标进行删除内容 + if ("TABLE".equals(document.getBodyElements().get(i).getElementType().name())) { + if (removeDataItem.isTable() && tableIndex == (removeDataItem.getTableIndex() - 1)) { + document.removeBodyElement(i--); + } + tableIndex++; + dataItemIndex++; + } + } // 将修改后的文档写入新文件 - FileOutputStream out = new FileOutputStream(saveFilePath); + FileOutputStream out = new FileOutputStream(filePath); document.write(out); out.close(); } catch (Exception e) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 7a9bebf..bc44ddc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -56,8 +56,7 @@ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { ElectronicImage selectSeal = null; //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = WordUtil.exportWord(filePrintRegister.getTemDir(), filePrintRegister.getFileNames(), - filePrintRegister.getParams(), filePrintRegister.getMergeColNames(), filePrintRegister.getCustomFileName()); + String wordOldUrl = WordUtil.exportWord(filePrintRegister); log.debug("执行完填充参数操作......"); if (CollectionUtils.isNotEmpty(filePrintRegister.getElectronicImageList())) { try { diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java index 9fde36c..656caf8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrintFileModuleNameEnum; import com.casic.missiles.enums.PrintFileModuleParamsEnum; @@ -137,20 +139,16 @@ public List doCreateOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { //作为分发点 try { - if(examineOriginalFile(measureItemInfo)){ - log.debug("校验没有原始记录"); - return null; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + if (examineOriginalFile(measureItemInfo)) { + log.debug("校验没有原始记录"); + return null; } Map map = BeanUtil.beanToMap(measureItemInfo); List customTemplateUrls = new ArrayList<>(); BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); //准备封面参数 prepareCoverParams(map, measureItemInfo.getLabCode()); + List dataItems = checkParamAddRomveItem(measureItemInfo, map); measureItemInfo.setLabCodeName("12222"); //定制化原始记录参数 prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); @@ -163,7 +161,13 @@ map.put("id", snowflakeUtil.nextId()); log.debug("original before ----"); //除了选用的模板不一致,模板配置流程是一致的 - String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, false, null, customTemplateUrls); + String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, + RegisterCustomParameters.builder() + .customParam(map) + .dataItems(dataItems) + .pdf(false) + .customTemplateUrls(customTemplateUrls) + .build()); log.debug("originalUrlFile after------------{}", originalWordUrlFile); List urlList = new ArrayList<>(); urlList.add(originalWordUrlFile); @@ -313,6 +317,42 @@ /** + * 检定项不存在,则对该项填充的标题和表格进行删除 + * + * @param measureItemInfo + * @param map + * @return + */ + private List checkParamAddRomveItem(BizBusinessDeviceMeasureApproval measureItemInfo, Map map) { + List dataItems = new ArrayList<>(); + int titleIndex = 1; + //外观及功能性检查 和检定项删除无关系 + if (StringUtils.isEmpty(measureItemInfo.getAppearanceFunctionCheck())) { + addDataRemoveItem(dataItems, -1, "外观及功能性检查"); + } else { + map.put("zeroSeq", (titleIndex++) + "."); + } + //如果是功能校准源,则进行一下删除 + if (measureItemInfo.getItemCategoryName().contains("多功能")) { + Map> measureDataMap = measureItemInfo.getMeasureDataCalibratorList().stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + checkRemoveItem(measureDataMap, "ACI", map, "firstSeq", titleIndex, dataItems, 3, "交流电流"); + checkRemoveItem(measureDataMap, "ACV", map, "secondSeq", titleIndex, dataItems, 4, "交流电压"); + checkRemoveItem(measureDataMap, "DCI", map, "thirdSeq", titleIndex, dataItems, 5, "直流电流"); + checkRemoveItem(measureDataMap, "DCV", map, "fourthSeq", titleIndex, dataItems, 6, "直流电压"); + } else {//其他检查项 + if (CollectionUtils.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + addDataRemoveItem(dataItems, 2, measureItemInfo.getItemCategoryName().contains("交流电压") ? "基本误差" : "示值误差"); + } else { + map.put("firstSeq", (titleIndex++) + "."); + } + } + return dataItems; + } + + + /** * 直流电压表没有HZ,处理电流表\电压表定制化参数 * 多功能 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 94097ee..51d1533 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,10 +96,7 @@ return; } //创建线程组 - int corePoolSize = 1; - if (list.size() > 5) { - corePoolSize = 5; - } + int corePoolSize = list.size() > 5 ? 5 : list.size(); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index d76ab4c..b491198 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.service.listeners.register.util.WordUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -14,6 +15,7 @@ import com.spire.doc.fields.TextRange; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.springframework.util.CollectionUtils; import javax.imageio.ImageIO; import java.awt.*; @@ -111,8 +113,8 @@ // params.put("assetList", assetList); // params.put("one", "1、李四的意思"); // } - String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); - System.out.println(newOldUrl); +// String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); +// System.out.println(newOldUrl); } private static void textBoxTest() throws IOException { @@ -151,7 +153,22 @@ } public static void main(String[] args) { - removeBodyElement(); + String localPathUrl = "D:\\casic\\cut\\"; + String filePath = localPathUrl + "1.docx"; + String saveFilePath = localPathUrl + "2.docx"; + List toBeRemoveDataItemList = new ArrayList<>(); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .paramContent("相信") + .build() + ); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .table(true) + .tableIndex(1) + .build() + ); + removeBodyElement(toBeRemoveDataItemList, filePath); } @@ -235,24 +252,42 @@ /** * 删除文档 */ - public static void removeBodyElement() { - String localPathUrl = "D:\\casic\\cut\\"; - String filePath = localPathUrl + "1.docx"; - String saveFilePath = localPathUrl + "2.docx"; + public static void removeBodyElement(List dataItems, String filePath) { + if (CollectionUtils.isEmpty(dataItems)) { + return; + } // 加载Word文档 InputStream in = null; + int dataItemIndex = 0; try { in = new FileInputStream(filePath); org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(in); - // 找到需要删除的表格,这里假设我们删除第一个表格 + // 存在两个下标,一个是当前文档的下标,一个是查询空的下标,两个下标同时移动,判断是表还是普通文段 int tableIndex = 0; - document.getParagraphs().get(1).removeRun(1); -// document.removeBodyElement(7); - System.out.println(document.getBodyElements().size()); -// document.removeBodyElement(8); - System.out.println(document.getBodyElements().size()); + for (int i = 0; i < document.getBodyElements().size() - tableIndex; i++) { + System.out.println(document.getBodyElements().size()); + ToBeRemoveDataItem removeDataItem = dataItems.get(dataItemIndex); + //段落的情况下根据内容进行删除 + if ("PARAGRAPH".equals(document.getBodyElements().get(i).getElementType().name())) { + if (!removeDataItem.isTable()) { + if (document.getParagraphs().get(i).getText().contains(removeDataItem.getParamContent())) { + document.removeBodyElement(i--); + dataItemIndex++; + continue; + } + } + } + //表格的情况下根据下标进行删除内容 + if ("TABLE".equals(document.getBodyElements().get(i).getElementType().name())) { + if (removeDataItem.isTable() && tableIndex == (removeDataItem.getTableIndex() - 1)) { + document.removeBodyElement(i--); + } + tableIndex++; + dataItemIndex++; + } + } // 将修改后的文档写入新文件 - FileOutputStream out = new FileOutputStream(saveFilePath); + FileOutputStream out = new FileOutputStream(filePath); document.write(out); out.close(); } catch (Exception e) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 7a9bebf..bc44ddc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -56,8 +56,7 @@ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { ElectronicImage selectSeal = null; //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = WordUtil.exportWord(filePrintRegister.getTemDir(), filePrintRegister.getFileNames(), - filePrintRegister.getParams(), filePrintRegister.getMergeColNames(), filePrintRegister.getCustomFileName()); + String wordOldUrl = WordUtil.exportWord(filePrintRegister); log.debug("执行完填充参数操作......"); if (CollectionUtils.isNotEmpty(filePrintRegister.getElectronicImageList())) { try { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index d14aaa3..cc5d745 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -110,6 +110,7 @@ //合并注册 try { filePrintRegister.setCustomFileName(registerParameters.getCustomFileName()); + filePrintRegister.setDataItems(registerParameters.getDataItems()); printDocUrl = FilePrintRegisterUtils.filePrintGenerate(filePrintRegister); //当有骑缝章,强制执行为word文档 if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { @@ -129,7 +130,7 @@ log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); } finally { if (ObjectUtils.isNotEmpty(registerParameters.getCompressParameter()) && registerParameters.getCompressParameter().getZip()) { - String zipLocalFileDir=""; + String zipLocalFileDir = ""; //先判断是否附属文件,再进行文件转移 if (CollectionUtils.isNotEmpty(registerParameters.getCompressParameter().getAttachmentFiles()) && !StringUtils.isEmpty(registerParameters.getCustomFileName())) { zipLocalFileDir = localFileDir + registerParameters.getCompressParameter().getRootDirName() + File.separator + registerParameters.getCustomFileName(); @@ -141,7 +142,7 @@ } downTemplateFile(registerParameters.getCompressParameter().getAttachmentFiles(), zipLocalFileDir); } else { - zipLocalFileDir = localFileDir + registerParameters.getCompressParameter().getRootDirName(); + zipLocalFileDir = localFileDir + registerParameters.getCompressParameter().getRootDirName(); } fileMove(zipLocalFileDir, printDocUrl); } else if (StringUtils.isNotEmpty(printDocUrl)) { diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java index 15996c7..3822066 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/FilePrintRegister.java @@ -44,6 +44,12 @@ private List beDownloadedFileNames; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * electronicSealList 填充的电子图片信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java index 05150b6..b9ce15a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/RegisterCustomParameters.java @@ -10,6 +10,7 @@ /** * 定制化配置参数 * + * @author cz * @date 2024-02-28 */ @Data @@ -23,6 +24,12 @@ * 压缩参数 */ private CompressParameter compressParameter; + + /** + * word待删除数据列表,按顺序排序 + */ + private List dataItems; + /** * 定制化文件名称 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java new file mode 100644 index 0000000..eb9caa3 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/ToBeRemoveDataItem.java @@ -0,0 +1,30 @@ +package com.casic.missiles.dto.certificate; + +import lombok.Builder; +import lombok.Data; + +/** + * @author cz + * @date 2024-03-29 + */ +@Data +@Builder +public class ToBeRemoveDataItem { + + /** + * 参数,依据内容进行删除 + */ + private String paramContent; + + /** + * 是否是表格 + */ + private boolean table; + + /** + * 表格下标,表格依据下标进行删除 + */ + private int tableIndex; + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java index a819683..e692440 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/StandardEquipmentSupport.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.eqpt.standard; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.business.MeasureCategoryEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataElectricalSafety; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -192,6 +195,57 @@ } /** + * @param measureDataMap 检定数据集合 + * @param key 检定项key + * @param map 最后添加的map + * @param dataItems 待删除的集合 + * @param titleParam 标题参数 + * @param titleIndex 标题要形成下标 + * @param tableIndex 删除的表格下标 + * @param titleKeyWords 待删除的标题关键字 + */ + protected void checkRemoveItem(Map measureDataMap, String key, Map map, String titleParam, Integer titleIndex, + List dataItems, Integer tableIndex, String titleKeyWords) { + if (measureDataMap.containsKey(key)) { + map.put(titleParam, (titleIndex++) + "."); + } else { + addDataRemoveItem(dataItems, tableIndex, titleKeyWords); + } + } + + + /** + * 新增删除项公共配置 + * + * @param dataItems + * @param index + * @param paramContent + */ + protected void addDataRemoveItem(List dataItems, Integer index, String paramContent) { + //健壮性校验 + if (dataItems == null) { + return; + } + if (StringUtils.isNotEmpty(paramContent)) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .paramContent(paramContent) + .build() + ); + } + if (index > 0) { + dataItems.add( + ToBeRemoveDataItem + .builder() + .table(true) + .tableIndex(index) + .build() + ); + } + } + + /** * 封面基本信息的定制化参数 * * @param map diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java index 9fde36c..656caf8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/MultiCalibrationHandler.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrintFileModuleNameEnum; import com.casic.missiles.enums.PrintFileModuleParamsEnum; @@ -137,20 +139,16 @@ public List doCreateOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { //作为分发点 try { - if(examineOriginalFile(measureItemInfo)){ - log.debug("校验没有原始记录"); - return null; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + if (examineOriginalFile(measureItemInfo)) { + log.debug("校验没有原始记录"); + return null; } Map map = BeanUtil.beanToMap(measureItemInfo); List customTemplateUrls = new ArrayList<>(); BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); //准备封面参数 prepareCoverParams(map, measureItemInfo.getLabCode()); + List dataItems = checkParamAddRomveItem(measureItemInfo, map); measureItemInfo.setLabCodeName("12222"); //定制化原始记录参数 prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); @@ -163,7 +161,13 @@ map.put("id", snowflakeUtil.nextId()); log.debug("original before ----"); //除了选用的模板不一致,模板配置流程是一致的 - String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, false, null, customTemplateUrls); + String originalWordUrlFile = printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, + RegisterCustomParameters.builder() + .customParam(map) + .dataItems(dataItems) + .pdf(false) + .customTemplateUrls(customTemplateUrls) + .build()); log.debug("originalUrlFile after------------{}", originalWordUrlFile); List urlList = new ArrayList<>(); urlList.add(originalWordUrlFile); @@ -313,6 +317,42 @@ /** + * 检定项不存在,则对该项填充的标题和表格进行删除 + * + * @param measureItemInfo + * @param map + * @return + */ + private List checkParamAddRomveItem(BizBusinessDeviceMeasureApproval measureItemInfo, Map map) { + List dataItems = new ArrayList<>(); + int titleIndex = 1; + //外观及功能性检查 和检定项删除无关系 + if (StringUtils.isEmpty(measureItemInfo.getAppearanceFunctionCheck())) { + addDataRemoveItem(dataItems, -1, "外观及功能性检查"); + } else { + map.put("zeroSeq", (titleIndex++) + "."); + } + //如果是功能校准源,则进行一下删除 + if (measureItemInfo.getItemCategoryName().contains("多功能")) { + Map> measureDataMap = measureItemInfo.getMeasureDataCalibratorList().stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + checkRemoveItem(measureDataMap, "ACI", map, "firstSeq", titleIndex, dataItems, 3, "交流电流"); + checkRemoveItem(measureDataMap, "ACV", map, "secondSeq", titleIndex, dataItems, 4, "交流电压"); + checkRemoveItem(measureDataMap, "DCI", map, "thirdSeq", titleIndex, dataItems, 5, "直流电流"); + checkRemoveItem(measureDataMap, "DCV", map, "fourthSeq", titleIndex, dataItems, 6, "直流电压"); + } else {//其他检查项 + if (CollectionUtils.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + addDataRemoveItem(dataItems, 2, measureItemInfo.getItemCategoryName().contains("交流电压") ? "基本误差" : "示值误差"); + } else { + map.put("firstSeq", (titleIndex++) + "."); + } + } + return dataItems; + } + + + /** * 直流电压表没有HZ,处理电流表\电压表定制化参数 * 多功能 * diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 94097ee..51d1533 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,10 +96,7 @@ return; } //创建线程组 - int corePoolSize = 1; - if (list.size() > 5) { - corePoolSize = 5; - } + int corePoolSize = list.size() > 5 ? 5 : list.size(); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java index d76ab4c..b491198 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.listeners.register; import com.casic.missiles.dto.certificate.ElectronicImage; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.service.listeners.register.util.WordUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -14,6 +15,7 @@ import com.spire.doc.fields.TextRange; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.springframework.util.CollectionUtils; import javax.imageio.ImageIO; import java.awt.*; @@ -111,8 +113,8 @@ // params.put("assetList", assetList); // params.put("one", "1、李四的意思"); // } - String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); - System.out.println(newOldUrl); +// String newOldUrl = WordUtil.exportWord(localPathUrl, woldUrlList, params, null, null); +// System.out.println(newOldUrl); } private static void textBoxTest() throws IOException { @@ -151,7 +153,22 @@ } public static void main(String[] args) { - removeBodyElement(); + String localPathUrl = "D:\\casic\\cut\\"; + String filePath = localPathUrl + "1.docx"; + String saveFilePath = localPathUrl + "2.docx"; + List toBeRemoveDataItemList = new ArrayList<>(); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .paramContent("相信") + .build() + ); + toBeRemoveDataItemList.add( + ToBeRemoveDataItem.builder() + .table(true) + .tableIndex(1) + .build() + ); + removeBodyElement(toBeRemoveDataItemList, filePath); } @@ -235,24 +252,42 @@ /** * 删除文档 */ - public static void removeBodyElement() { - String localPathUrl = "D:\\casic\\cut\\"; - String filePath = localPathUrl + "1.docx"; - String saveFilePath = localPathUrl + "2.docx"; + public static void removeBodyElement(List dataItems, String filePath) { + if (CollectionUtils.isEmpty(dataItems)) { + return; + } // 加载Word文档 InputStream in = null; + int dataItemIndex = 0; try { in = new FileInputStream(filePath); org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(in); - // 找到需要删除的表格,这里假设我们删除第一个表格 + // 存在两个下标,一个是当前文档的下标,一个是查询空的下标,两个下标同时移动,判断是表还是普通文段 int tableIndex = 0; - document.getParagraphs().get(1).removeRun(1); -// document.removeBodyElement(7); - System.out.println(document.getBodyElements().size()); -// document.removeBodyElement(8); - System.out.println(document.getBodyElements().size()); + for (int i = 0; i < document.getBodyElements().size() - tableIndex; i++) { + System.out.println(document.getBodyElements().size()); + ToBeRemoveDataItem removeDataItem = dataItems.get(dataItemIndex); + //段落的情况下根据内容进行删除 + if ("PARAGRAPH".equals(document.getBodyElements().get(i).getElementType().name())) { + if (!removeDataItem.isTable()) { + if (document.getParagraphs().get(i).getText().contains(removeDataItem.getParamContent())) { + document.removeBodyElement(i--); + dataItemIndex++; + continue; + } + } + } + //表格的情况下根据下标进行删除内容 + if ("TABLE".equals(document.getBodyElements().get(i).getElementType().name())) { + if (removeDataItem.isTable() && tableIndex == (removeDataItem.getTableIndex() - 1)) { + document.removeBodyElement(i--); + } + tableIndex++; + dataItemIndex++; + } + } // 将修改后的文档写入新文件 - FileOutputStream out = new FileOutputStream(saveFilePath); + FileOutputStream out = new FileOutputStream(filePath); document.write(out); out.close(); } catch (Exception e) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 7a9bebf..bc44ddc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -56,8 +56,7 @@ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { ElectronicImage selectSeal = null; //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = WordUtil.exportWord(filePrintRegister.getTemDir(), filePrintRegister.getFileNames(), - filePrintRegister.getParams(), filePrintRegister.getMergeColNames(), filePrintRegister.getCustomFileName()); + String wordOldUrl = WordUtil.exportWord(filePrintRegister); log.debug("执行完填充参数操作......"); if (CollectionUtils.isNotEmpty(filePrintRegister.getElectronicImageList())) { try { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index d14aaa3..cc5d745 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -110,6 +110,7 @@ //合并注册 try { filePrintRegister.setCustomFileName(registerParameters.getCustomFileName()); + filePrintRegister.setDataItems(registerParameters.getDataItems()); printDocUrl = FilePrintRegisterUtils.filePrintGenerate(filePrintRegister); //当有骑缝章,强制执行为word文档 if (registerParameters.getPdf() && printDocUrl.contains(WORD_SUFFIX)) { @@ -129,7 +130,7 @@ log.error("文件打印出现异常,打印参数信息为{},异常信息为{}", JSON.toJSON(filePrintRegister), rex); } finally { if (ObjectUtils.isNotEmpty(registerParameters.getCompressParameter()) && registerParameters.getCompressParameter().getZip()) { - String zipLocalFileDir=""; + String zipLocalFileDir = ""; //先判断是否附属文件,再进行文件转移 if (CollectionUtils.isNotEmpty(registerParameters.getCompressParameter().getAttachmentFiles()) && !StringUtils.isEmpty(registerParameters.getCustomFileName())) { zipLocalFileDir = localFileDir + registerParameters.getCompressParameter().getRootDirName() + File.separator + registerParameters.getCustomFileName(); @@ -141,7 +142,7 @@ } downTemplateFile(registerParameters.getCompressParameter().getAttachmentFiles(), zipLocalFileDir); } else { - zipLocalFileDir = localFileDir + registerParameters.getCompressParameter().getRootDirName(); + zipLocalFileDir = localFileDir + registerParameters.getCompressParameter().getRootDirName(); } fileMove(zipLocalFileDir, printDocUrl); } else if (StringUtils.isNotEmpty(printDocUrl)) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/util/WordUtil.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/util/WordUtil.java index e069e06..c1ed3b2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/util/WordUtil.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/util/WordUtil.java @@ -2,6 +2,8 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.dto.certificate.FilePrintRegister; +import com.casic.missiles.dto.certificate.ToBeRemoveDataItem; import com.casic.missiles.service.listeners.register.DocPictureProvider; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -15,33 +17,60 @@ import java.io.*; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; - +/** + * @author da + * @date 2024-03-29 + */ public class WordUtil { - - - /** + * 根据路径和传入的参数,对数据进行删除 * 删除文档 */ - public static void removeBodyElement() { - String localPathUrl = "D:\\casic\\cut\\"; - String filePath = localPathUrl + "1.docx"; - String saveFilePath = localPathUrl + "2.docx"; + public static void removeBodyElement(List dataItems, String filePath) { + if (org.springframework.util.CollectionUtils.isEmpty(dataItems)) { + return; + } + List tableDataItem = dataItems.stream().filter(e -> e.isTable()).collect(Collectors.toList()); + List paragraphDataItem = dataItems.stream().filter(e -> !e.isTable()).collect(Collectors.toList()); // 加载Word文档 InputStream in = null; + int dataItemIndex = 0, tableItemIndex = 0; try { in = new FileInputStream(filePath); org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(in); - // 找到需要删除的表格,这里假设我们删除第一个表格 - int tableIndex = 0; - document.getParagraphs().get(1).removeRun(1); -// document.removeBodyElement(7); - System.out.println(document.getBodyElements().size()); -// document.removeBodyElement(8); -// System.out.println(document.getBodyElements().size()); + // 存在两个下标,一个是当前文档的下标,一个是查询空的下标,两个下标同时移动,判断是表还是普通文段 + int tableIndex = 0, currentTableIndex = 0; + for (int paragraphIndex = 0; (tableIndex + paragraphIndex)< document.getBodyElements().size() && ( + dataItemIndex < paragraphDataItem.size() || tableItemIndex < tableDataItem.size()); paragraphIndex++) { + //段落的情况下根据内容进行删除 + if ("PARAGRAPH".equals(document.getBodyElements().get(tableIndex + paragraphIndex).getElementType().name())) { + if (dataItemIndex < paragraphDataItem.size()) { + ToBeRemoveDataItem removeDataItem = paragraphDataItem.get(dataItemIndex); + if (document.getParagraphs().get(paragraphIndex).getText().contains(removeDataItem.getParamContent())) { + document.removeBodyElement(tableIndex + paragraphIndex); + paragraphIndex--; + dataItemIndex++; + continue; + } + } + } else if ("TABLE".equals(document.getBodyElements().get(paragraphIndex + tableIndex).getElementType().name())) { + if (tableItemIndex < tableDataItem.size()) { + ToBeRemoveDataItem removeTableItem = tableDataItem.get(tableItemIndex); + //表格的情况下根据下标进行删除内容 + if (currentTableIndex++ == (removeTableItem.getTableIndex() - 1)) { + document.removeBodyElement(tableIndex + paragraphIndex); + paragraphIndex--; + tableItemIndex++; + continue; + } + } + tableIndex++; + } + } // 将修改后的文档写入新文件 - FileOutputStream out = new FileOutputStream(saveFilePath); + FileOutputStream out = new FileOutputStream(filePath); document.write(out); out.close(); } catch (Exception e) { @@ -58,13 +87,15 @@ /** * 按照模板 填充数据生成word 只支持docx * - * @param temDir 生成文件的目录 - * @param fileNames 待处理的文件列表 - * @param params 参数 + * @param filePrintRegister 参数 */ - public static String exportWord(String temDir, List fileNames, Map params, List mergeColNames, String customFileName) { + public static String exportWord(FilePrintRegister filePrintRegister) { + Map params = filePrintRegister.getParams(); + String temDir = filePrintRegister.getTemDir(); + String customFileName = filePrintRegister.getCustomFileName(); //两个文档合并为fileNames[0]文档 - String fileName = WordUtil.mergeDoc(temDir, fileNames, (String) params.get("certificateNo")); + String fileName = WordUtil.mergeDoc(filePrintRegister.getTemDir(), filePrintRegister.getFileNames(), (String) params.get("certificateNo")); + removeBodyElement(filePrintRegister.getDataItems(), temDir + fileName); Assert.notNull(temDir, "临时文件路径不能为空"); Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式"); File dir = new File(temDir); @@ -77,7 +108,7 @@ try { //执行文件填充 ParseWord07 parseWord07 = new ParseWord07(); - XWPFDocument doc = parseWord07.parseWord(temDir + fileName, params, mergeColNames); + XWPFDocument doc = parseWord07.parseWord(temDir + fileName, params, filePrintRegister.getMergeColNames()); //新增定制化参数 customFileName = StringUtils.isNotEmpty(customFileName) ? customFileName + ".docx" : fileName; filePath = temDir + customFileName;