From 5b3c5538dba333b717832c73d59566cf1fbdb48b Mon Sep 17 00:00:00 2001 From: liwen Date: Sun, 4 Feb 2024 17:27:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=8D=AB=E7=94=9F?= =?UTF-8?q?=E8=87=AA=E6=9F=A5=E8=A1=A8=E6=A0=BC=E5=BC=8F=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safeproduct/vo/HygieneRecordDetailVO.java | 6 ++ .../service/impl/HygieneRecordServiceImpl.java | 35 ++++++++++-- .../com/hnac/hzims/safeproduct/utils/BaseUtil.java | 62 +++++++++++++++++++++ .../main/resources/template/卫生自查表.docx | Bin 11487 -> 11555 bytes 4 files changed, 97 insertions(+), 6 deletions(-) diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneRecordDetailVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneRecordDetailVO.java index 1aeae76..52bee71 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneRecordDetailVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneRecordDetailVO.java @@ -47,4 +47,10 @@ public class HygieneRecordDetailVO { @ApiModelProperty("检查信息列表") private List checkList; + + @ApiModelProperty("年份") + private String year; + + @ApiModelProperty("月份") + private String month; } diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java index 608f1ed..48d21fb 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java @@ -94,7 +94,7 @@ public class HygieneRecordServiceImpl extends ServiceImpl hygienePlanEntity.getStandardScore()) { @@ -122,7 +122,7 @@ public class HygieneRecordServiceImpl extends ServiceImpl hygienePlanEntity.getStandardScore()) { @@ -138,11 +138,11 @@ public class HygieneRecordServiceImpl extends ServiceImpl checkDetailVOList = new ArrayList<>(); - for (int i = 0; i < zoneIds.length ; i++) { + for (int i = 0; i < zoneIds.length; i++) { HygieneZoneDetailVO zoneDetailVO = new HygieneZoneDetailVO(); HygieneZoneEntity hygieneZoneEntity = hygieneZoneService.getById(zoneIds[i]); BeanUtils.copyProperties(hygieneZoneEntity, zoneDetailVO); @@ -169,6 +169,29 @@ public class HygieneRecordServiceImpl extends ServiceImpl checkList = hygieneRecordDetailVO.getCheckList(); + List res = new ArrayList<>(); + checkList.forEach(item -> { + String[] checkItem = item.getCheckItem().split(","); + String[] checkItemScore = item.getCheckItemScore().split(","); + for (int i = 0; i < checkItem.length; i++) { + HygieneZoneDetailVO hygieneZoneDetailVO = new HygieneZoneDetailVO(); + hygieneZoneDetailVO.setZone(item.getZone()); + hygieneZoneDetailVO.setPrincipal(item.getPrincipal()); + hygieneZoneDetailVO.setResult(item.getResult()); + hygieneZoneDetailVO.setScore(item.getScore()); + hygieneZoneDetailVO.setCheckItem(checkItem[i]); + hygieneZoneDetailVO.setCheckItemScore(checkItemScore[i]); + res.add(hygieneZoneDetailVO); + } + }); + // 表头 + String code = hygieneRecordDetailVO.getCode(); + hygieneRecordDetailVO.setYear(code.substring(4, 8)); + hygieneRecordDetailVO.setMonth(code.substring(8, 10)); + hygieneRecordDetailVO.setCheckList(res); Map params = BaseUtil.obj2Map(hygieneRecordDetailVO); String templateFile = "template/卫生自查表" + SafeProductConstant.DOCX_SUFFIX; String wordPath = savePath + "/卫生自查表" + SafeProductConstant.DOCX_SUFFIX; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java index 3118280..20028cd 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java @@ -6,6 +6,10 @@ import com.hnac.hzims.safeproduct.constants.SafeProductConstant; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.apache.poi.xwpf.usermodel.XWPFTableRow; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; @@ -106,11 +110,15 @@ public class BaseUtil { * 数据写入 * @param templatePath 模板文件路径 * @param params 数据参数 + * @return 文件 */ public static XWPFDocument fillDocument(String templatePath, Map params) { XWPFDocument xwpfDocument = null; try { xwpfDocument = WordExportUtil.exportWord07(templatePath, params); + if (templatePath.equals("template/卫生自查表.docx")) { + formatHygieneRecordTable(xwpfDocument); + } } catch (Exception e) { log.error("数据写入异常: {}", e.getMessage()); e.printStackTrace(); @@ -119,6 +127,60 @@ public class BaseUtil { } /** + * 卫生自查表格式处理 + * @param xwpfDocument word文件类 + */ + private static void formatHygieneRecordTable(XWPFDocument xwpfDocument) { + // 获取文档中所有的表格 + List tableList = xwpfDocument.getTables(); + if (tableList.size() > 0) { + // 循环表格 + for (XWPFTable table : tableList) { + // 获取表格所有行数 + List rows = table.getRows(); + // 第三行到倒数第二行为需合并区域 + for (int row = 3; row < rows.size() - 1;) { + XWPFTableCell startCell = rows.get(row).getCell(0); + String startText = startCell.getText(); + int index = row + 1; + for (; index < rows.size(); index++) { + XWPFTableCell endCell = rows.get(index).getCell(0); + String endText = endCell.getText(); + if (!startText.equals(endText)) { + break; + } + } + mergeCellsVertically(table, 0, row, index - 1); + mergeCellsVertically(table, 1, row, index - 1); + mergeCellsVertically(table, 4, row, index - 1); + mergeCellsVertically(table, 5, row, index - 1); + row = index; + } + } + } + } + + /** + * word单元格行合并 + * @param table 表格 + * @param col 合并行所在列 + * @param startRow 开始行 + * @param endRow 结束行 + */ + public static void mergeCellsVertically(XWPFTable table, int col, int startRow, int endRow) { + for (int i = startRow; i <= endRow; i++) { + XWPFTableCell cell = table.getRow(i).getCell(col); + if (i == startRow) { + // The first merged cell is set with RESTART merge value + cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); + } else { + // Cells which join (merge) the first one, are set with CONTINUE + cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); + } + } + } + + /** * 读取本地pdf,这里设置的是预览 * @param response 响应类 * @param filePath 文件路径 diff --git a/hzims-service/safeproduct/src/main/resources/template/卫生自查表.docx b/hzims-service/safeproduct/src/main/resources/template/卫生自查表.docx index 06133d5cb6e52c809b65ee8437663985afb67123..141b2aec0243b85397e1a8c299c2209678a70329 100644 GIT binary patch delta 5079 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 delta 5024 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 W6l