From 68897236636f9c54e34bdca52864cb424c2291e5 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期四, 20 三月 2025 17:16:14 +0800
Subject: [PATCH] 近场/远场检验刷新目录功能修改
---
inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java | 307 ++++++++++++++++++++++++++++++++------------------
1 files changed, 194 insertions(+), 113 deletions(-)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
index 6fcbefd..b62f370 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/utils/WordUtils.java
@@ -11,6 +11,7 @@
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
+import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.util.TableTools;
import com.spire.doc.FileFormat;
import com.yuanchu.mom.dto.*;
@@ -18,18 +19,23 @@
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.vo.InsProductResult2VO;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xwpf.usermodel.*;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.docx4j.XmlUtils;
+import org.docx4j.jaxb.Context;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.docx4j.wml.*;
+import org.docx4j.wml.STBrType;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
+import javax.xml.bind.JAXBElement;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
@@ -42,6 +48,7 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+@Slf4j
@Component
public class WordUtils {
@@ -2706,9 +2713,12 @@
}
//杈愬皠琛ㄦ牸
List<Map<String, Object>> tables3 = new ArrayList<>();
+ List<InsOrderFile> insOrderDocFiles = new ArrayList<>();; // 鏆傚瓨闇�瑕佸悎骞惰〃鍗曞埌鐢熸垚word鏂囦欢鐨刣ocx鏂囦欢
+ // 缁熻杈愬皠瀹為獙琛ㄦ暟閲�
+ int radiationReportNum = 0;
if (strings.contains("杩戝満") || strings.contains("杩滃満")) {
/*杈愬皠鐨勮瘯楠岃〃*/
- List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
+ List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
.eq(InsOrderFile::getInsOrderId, orderId)
.eq(InsOrderFile::getInsSampleId, insReportDto1.getSampleId())
.like(InsOrderFile::getFileName, "瑙f瀽鐨勮緪灏勭珯鐐规姤鍛�")
@@ -2717,102 +2727,104 @@
.or()
.eq(InsOrderFile::getSonLaboratory, "杩戝満")
));
- if (insOrderFiles.size() > 0) {
- int aa = 0;
- for (InsOrderFile insOrderFile : insOrderFiles) {
- try {
- XWPFDocument circuitParamsDoc = new XWPFDocument(new FileInputStream(wordUrl + "/" + insOrderFile.getFileUrl()));
- // 閬嶅巻鐢佃矾鍙傛暟鏂囦欢鐨勬墍鏈夊厓绱狅紝娈佃惤鍜岃〃鏍�
- for (IBodyElement element : circuitParamsDoc.getBodyElements()) {
- Map<String, Object> table3 = new HashMap<>();
- TableRenderData tableData = new TableRenderData();
- List<RowRenderData> rows = new ArrayList<>();
- if (element instanceof XWPFTable) {
- aa += 1;
- XWPFTable tab = (XWPFTable) element;
- List<XWPFTableRow> row = tab.getRows();
- for (int i = 0; i < row.size(); i++) {
- RowRenderData rowRenderData = new RowRenderData();
- List<CellRenderData> cells = new ArrayList<>();
- List<XWPFTableCell> cell = row.get(i).getTableCells();
- for (int j = 0; j < cell.size(); j++) {
- CellRenderData cellRenderData = new CellRenderData();
- List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
- ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
- ParagraphStyle paragraphStyle = new ParagraphStyle();
- paragraphStyle.setAlign(ParagraphAlignment.CENTER);
- paragraphRenderData.setParagraphStyle(paragraphStyle);
- List<RenderData> renderData = new ArrayList<>();
- TextRenderData textRenderData = new TextRenderData();
- Style style = new Style();
- style.setFontFamily("瀹嬩綋");
- style.setColor("000000");
- textRenderData.setStyle(style);
- CTTcPr tcPr = cell.get(j).getCTTc().getTcPr();
- if (tcPr != null) {
- //鍚堝苟鍒�
- CTHMerge hMerge = tcPr.getHMerge();
- if (ObjectUtils.isNotEmpty(hMerge)) {
- if (STMerge.RESTART.equals(hMerge.getVal()) || STMerge.CONTINUE.equals(hMerge.getVal())) {
- int index = j;
- String text = null;
- while (text == null || text.equals("")) {
- if (index < 0) {
- text = "/";
- }
- text = cell.get(index).getText();
- index--;
- }
- textRenderData.setText(text + "鈭�88" + aa + i);
- }
- }
- //鍚堝苟琛�
- CTVMerge vMerge = tcPr.getVMerge();
- if (ObjectUtils.isNotEmpty(vMerge)) {
- if (STMerge.RESTART.equals(vMerge.getVal()) || STMerge.CONTINUE.equals(vMerge.getVal())) {
- int index = i;
- String text = null;
- while (text == null || text.equals("")) {
- if (index < 0) {
- text = "/";
- break;
- }
- text = row.get(index).getCell(j).getText();
- index--;
- }
- if (text.equals("鍚堟牸") || text.equals("涓嶅悎鏍�")) {
- textRenderData.setText(text + "鈭�25" + aa + j);
- } else {
- textRenderData.setText(text + "鈭�22" + aa + j);
- }
- }
- }
- } else {
- textRenderData.setText(cell.get(j).getText());
- }
- renderData.add(textRenderData);
- paragraphRenderData.setContents(renderData);
- paragraphRenderDataList.add(paragraphRenderData);
- cellRenderData.setParagraphs(paragraphRenderDataList);
- cells.add(cellRenderData);
- }
- rowRenderData.setCells(cells);
- rows.add(rowRenderData);
- }
- tableData.setRows(rows);
- table3.put("table3", tableData);
- tables3.add(table3);
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
+ insOrderDocFiles.addAll(insOrderFiles);
+ radiationReportNum = insOrderFiles.size();
+// if (insOrderFiles.size() > 0) {
+// int aa = 0;
+// for (InsOrderFile insOrderFile : insOrderFiles) {
+// try {
+// XWPFDocument circuitParamsDoc = new XWPFDocument(new FileInputStream(wordUrl + "/" + insOrderFile.getFileUrl()));
+// // 閬嶅巻鐢佃矾鍙傛暟鏂囦欢鐨勬墍鏈夊厓绱狅紝娈佃惤鍜岃〃鏍�
+// for (IBodyElement element : circuitParamsDoc.getBodyElements()) {
+// Map<String, Object> table3 = new HashMap<>();
+// TableRenderData tableData = new TableRenderData();
+// List<RowRenderData> rows = new ArrayList<>();
+// if (element instanceof XWPFTable) {
+// aa += 1;
+// XWPFTable tab = (XWPFTable) element;
+// List<XWPFTableRow> row = tab.getRows();
+// for (int i = 0; i < row.size(); i++) {
+// RowRenderData rowRenderData = new RowRenderData();
+// List<CellRenderData> cells = new ArrayList<>();
+// List<XWPFTableCell> cell = row.get(i).getTableCells();
+// for (int j = 0; j < cell.size(); j++) {
+// CellRenderData cellRenderData = new CellRenderData();
+// List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+// ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+// ParagraphStyle paragraphStyle = new ParagraphStyle();
+// paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+// paragraphRenderData.setParagraphStyle(paragraphStyle);
+// List<RenderData> renderData = new ArrayList<>();
+// TextRenderData textRenderData = new TextRenderData();
+// Style style = new Style();
+// style.setFontFamily("瀹嬩綋");
+// style.setColor("000000");
+// textRenderData.setStyle(style);
+// CTTcPr tcPr = cell.get(j).getCTTc().getTcPr();
+// if (tcPr != null) {
+// //鍚堝苟鍒�
+// CTHMerge hMerge = tcPr.getHMerge();
+// if (ObjectUtils.isNotEmpty(hMerge)) {
+// if (STMerge.RESTART.equals(hMerge.getVal()) || STMerge.CONTINUE.equals(hMerge.getVal())) {
+// int index = j;
+// String text = null;
+// while (text == null || text.equals("")) {
+// if (index < 0) {
+// text = "/";
+// }
+// text = cell.get(index).getText();
+// index--;
+// }
+// textRenderData.setText(text + "鈭�88" + aa + i);
+// }
+// }
+// //鍚堝苟琛�
+// CTVMerge vMerge = tcPr.getVMerge();
+// if (ObjectUtils.isNotEmpty(vMerge)) {
+// if (STMerge.RESTART.equals(vMerge.getVal()) || STMerge.CONTINUE.equals(vMerge.getVal())) {
+// int index = i;
+// String text = null;
+// while (text == null || text.equals("")) {
+// if (index < 0) {
+// text = "/";
+// break;
+// }
+// text = row.get(index).getCell(j).getText();
+// index--;
+// }
+// if (text.equals("鍚堟牸") || text.equals("涓嶅悎鏍�")) {
+// textRenderData.setText(text + "鈭�25" + aa + j);
+// } else {
+// textRenderData.setText(text + "鈭�22" + aa + j);
+// }
+// }
+// }
+// } else {
+// textRenderData.setText(cell.get(j).getText());
+// }
+// renderData.add(textRenderData);
+// paragraphRenderData.setContents(renderData);
+// paragraphRenderDataList.add(paragraphRenderData);
+// cellRenderData.setParagraphs(paragraphRenderDataList);
+// cells.add(cellRenderData);
+// }
+// rowRenderData.setCells(cells);
+// rows.add(rowRenderData);
+// }
+// tableData.setRows(rows);
+// table3.put("table3", tableData);
+// tables3.add(table3);
+// }
+// }
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// }
+// }
}
//杈愬皠鐨勬爣棰�
String title3 = "";
- if (tables3.size() > 0) {
+ if (radiationReportNum > 0) {
title3 = "杈愬皠鏂瑰悜鍥惧弬鏁�";
}
//鐜琛ㄦ牸
@@ -3065,7 +3077,7 @@
put("insProductList", insProductList); //妫�楠屾儏鍐典竴瑙堣〃
put("tables2", tables2); //妫�娴嬬粨鏋�
put("title3", finalTitle); //妫�娴嬬粨鏋�
- put("tables3", tables3); //妫�娴嬬粨鏋�
+ put("tables3", null); //妫�娴嬬粨鏋�
put("tables4", tables4); //妫�娴嬬粨鏋�
put("urlList", urlList); //鏍峰搧鐓х墖
put("insUsers", insUsers); //妫�娴嬩汉鍛樹俊鎭�
@@ -3193,21 +3205,51 @@
} catch (IOException e) {
throw new RuntimeException(e);
}
-// //鐩綍鏇存柊
-// try{
-// com.spire.doc.Document document = new com.spire.doc.Document();
-// document.loadFromFile(path);
-// // 鏇存柊鐩綍
-// document.updateTableOfContents();
-// // 淇濆瓨鏂囨。
-// document.saveToFile(path, FileFormat.Docx);
-// document.close();
-// }
-// catch (Exception e) {
-// throw new RuntimeException(e);
-// }
+ // 鏇存柊琛ㄥ崟
+ try {
+ WordprocessingMLPackage targetDoc = WordprocessingMLPackage.load(new File(path));
+ List<Object> targetContent = targetDoc.getMainDocumentPart().getContent();
+ int targetIndex = findFirstTargetIndex(targetDoc, title3);
+ if (targetIndex != -1) {
+ List<Object> forms = new ArrayList<>();
+ for (InsOrderFile insOrderFile : insOrderDocFiles) {
+ // 鍔犺浇婧愭枃妗e苟鎻愬彇琛ㄥ崟鍐呭锛堝亣璁句负琛ㄦ牸锛�
+ WordprocessingMLPackage sourceDoc = WordprocessingMLPackage.load(new File(wordUrl + "/" + insOrderFile.getFileUrl()));
+ List<Object> sourceContent = sourceDoc.getMainDocumentPart().getContent();
+ for (Object obj : sourceContent) {
+ if (obj instanceof JAXBElement) { // 妫�鏌ユ槸鍚︿负 JAXBElement
+ JAXBElement jaxbElement = (JAXBElement)obj;
+ Tbl table = (Tbl) XmlUtils.deepCopy(jaxbElement.getValue());
+ targetIndex++;
+ // 鎻掑叆鍒扮洰鏍囨钀戒箣鍚�
+ targetContent.add(targetIndex, table);
+ forms.add(table);
+ // 鎻掑叆鍒嗛〉绗�
+ P paragraphWithPageBreak = Context.getWmlObjectFactory().createP();
+ R run = Context.getWmlObjectFactory().createR();
+ Br br = Context.getWmlObjectFactory().createBr();
+ br.setType(STBrType.PAGE); // 璁剧疆鍒嗛〉绗︾被鍨�
+ run.getContent().add(br);
+ paragraphWithPageBreak.getContent().add(run);
+ targetIndex++;
+ targetContent.add(targetIndex, paragraphWithPageBreak);
+ }
+ }
+ }
+ }
+ // 淇濆瓨淇敼鍚庣殑鏂囨。
+ targetDoc.save(new File(path));
+ com.spire.doc.Document document = new com.spire.doc.Document();
+ document.loadFromFile(path);
+ // 鏇存柊鐩綍
+ document.updateTableOfContents();
+ // 淇濆瓨鏂囨。
+ document.saveToFile(path, FileFormat.Docx);
+ document.close();
+ }catch (Exception e){
+ log.error(e.getMessage());
+ }
}
-
//鐢佃矾鎶ュ憡鐢ㄤ簬鎬绘姤鍛婄殑鏂规硶(澶╃嚎)
private void getWord1(String term, InsOrderState insOrderState, List<Map<String, Object>> tables2) {
@@ -5554,4 +5596,43 @@
}
}
}
+
+ // 鏌ユ壘鏂囨湰棣栨鍑虹幇琛�
+ private int findFirstTargetIndex(WordprocessingMLPackage targetDoc,String textStr){
+ int targetIndex = -1;
+ if(StringUtils.isEmpty(textStr)){
+ return targetIndex;
+ }
+ try {
+ List<Object> targetContent = targetDoc.getMainDocumentPart().getContent();
+ // 鏌ユ壘鐩爣娈佃惤
+ for (int i = 0; i < targetContent.size(); i++) {
+ Object obj = targetContent.get(i);
+ if (obj instanceof P) {
+ P paragraph = (P) obj;
+ for (Object runObj : paragraph.getContent()) {
+ if (runObj instanceof R) {
+ R run = (R) runObj;
+ for (Object textObj : run.getContent()) {
+ if (textObj instanceof JAXBElement) {
+ JAXBElement jaxbElement = (JAXBElement) textObj;
+ if(jaxbElement.getValue() instanceof Text){
+ Text text = (Text) jaxbElement.getValue();
+ if (text.getValue().contains(textStr)) {
+ targetIndex = i;
+ return targetIndex;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.error("findFirstTargetIndex<<<<<<<<<<:{}",e.getMessage());
+ }finally {
+ return targetIndex;
+ }
+ }
}
--
Gitblit v1.9.3