From 23875dab418476d3b01bbd784a161c9f2b6b6ea1 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 19 九月 2024 16:25:12 +0800
Subject: [PATCH] 编号规则变更
---
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java | 508 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 494 insertions(+), 14 deletions(-)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
index 9ac9ab7..cccbc18 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsReportServiceImpl.java
@@ -1,12 +1,23 @@
package com.yuanchu.mom.service.impl;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.aspose.words.*;
+import com.aspose.words.Document;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
-import com.deepoove.poi.data.Pictures;
+import com.deepoove.poi.config.Configure;
+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.itextpdf.text.BadElementException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfContentByte;
@@ -14,17 +25,21 @@
import com.itextpdf.text.pdf.PdfStamper;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
+import com.yuanchu.mom.dto.InsReportDto;
+import com.yuanchu.mom.dto.InsReportDto1;
import com.yuanchu.mom.dto.ReportPageDto;
+import com.yuanchu.mom.dto.SampleProductDto;
import com.yuanchu.mom.exception.ErrorException;
-import com.yuanchu.mom.mapper.InsOrderMapper;
-import com.yuanchu.mom.mapper.InsReportMapper;
-import com.yuanchu.mom.mapper.UserMapper;
-import com.yuanchu.mom.pojo.InsOrder;
-import com.yuanchu.mom.pojo.InsReport;
-import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.mapper.*;
+import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.service.InsReportService;
+import com.yuanchu.mom.service.StandardTemplateService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.MatrixToImageWriter;
import com.yuanchu.mom.utils.QueryWrappers;
import com.yuanchu.mom.vo.Result;
+import org.apache.commons.io.IOUtils;
+import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
@@ -44,6 +59,8 @@
import java.util.*;
import java.util.List;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -73,8 +90,41 @@
@Value("${file.path}")
private String imgUrl;
+ @Value("${twoCode}")
+ private String twoCode;
+
@Resource
private InsOrderMapper insOrderMapper;
+
+ @Resource
+ private StandardMethodListMapper standardMethodListMapper;
+
+ @Resource
+ private InsOrderStateMapper insOrderStateMapper;
+
+ @Resource
+ private InsProductMapper insProductMapper;
+
+ @Resource
+ private InsProductResultMapper insProductResultMapper;
+
+ @Resource
+ private InsProductResult2Mapper insProductResult2Mapper;
+
+ @Resource
+ private InsSampleMapper insSampleMapper;
+
+ @Resource
+ private InsSampleUserMapper insSampleUserMapper;
+
+ @Resource
+ private CustomMapper customMapper;
+
+ @Resource
+ private InsOrderFileMapper insOrderFileMapper;
+
+ @Resource
+ private StandardTemplateService standardTemplateService;
@Override
public Map<String, Object> pageInsReport(Page page, ReportPageDto reportPageDto) {
@@ -94,7 +144,7 @@
laboratory = departLims;
}
}
- map.put("body", insReportMapper.pageInsReport(page, QueryWrappers.queryWrappers(reportPageDto),laboratory));
+ map.put("body", insReportMapper.pageInsReport(page, QueryWrappers.queryWrappers(reportPageDto), laboratory));
return map;
}
@@ -171,7 +221,7 @@
//鎵瑰噯
@Override
@Transactional(rollbackFor = Exception.class)
- public int ratifyReport(Integer id, Integer isRatify, String ratifyTell) {
+ public int ratifyReport(Integer id, Integer isRatify, String ratifyTell, String sealUrl) {
InsReport insReport = insReportMapper.selectById(id);
insReport.setIsRatify(isRatify);
if (ObjectUtils.isNotEmpty(ratifyTell)) {
@@ -192,14 +242,14 @@
throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
}
//鑾峰彇鍦烘墍鐨勬姤鍛婁笓鐢ㄧ珷
- String sealUrl;
+ /* String sealUrl;
try {
String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory();
sealUrl = insReportMapper.getLaboratoryByName(laboratory);
} catch (Exception e) {
throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷");
}
- if (sealUrl == null) throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷");
+ if (sealUrl == null) throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷");*/
//绯荤粺鐢熸垚鎶ュ憡鍦板潃
String url = insReport.getUrl();
//鎵嬪姩涓婁紶鎶ュ憡鍦板潃
@@ -286,7 +336,7 @@
for (File f : files) {
// 鏍规嵁鏂囦欢鍚嶆煡璇d
String name = f.getName();
- InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().like(InsReport::getCode, f.getName().replace(".docx", "").replace("JCZX", "JCZX/")));
+ InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().like(InsReport::getCode, f.getName().replace(".docx", "")));
if (ObjectUtils.isEmpty(insReport)) {
throw new ErrorException("娌℃湁鎵惧埌 " + f.getName() + " 杩欎釜鏂囦欢瀵瑰簲鐨勬姤鍛婃暟鎹�");
}
@@ -303,8 +353,7 @@
// 澶嶅埗鏂囦欢鍒版寚瀹氳矾寰�
Files.copy(f.toPath(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING);
inReport("/word/" + pathName, insReport.getId());
- }
- catch (IOException e) {
+ } catch (IOException e) {
throw new ErrorException("鏂囦欢涓婁紶澶辫触");
}
}
@@ -321,6 +370,35 @@
}
}
return 0;
+ }
+
+ //鏄惁闇�瑕佺敓鎴愭姤鍛�: 0涓嶉渶瑕�;1闇�瑕�
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int isReport(InsReportDto insReportDto) {
+ //鍏堝垽鏂璁㈠崟鏄惁鍙互鍘荤敓浜ф姤鍛�
+ Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, insReportDto.getId()).eq(InsOrderState::getInsState, 5));
+ if (count > 0) {
+ if (insReportDto.getState() == 1) {
+ generateReport(insReportDto.getId(), insReportDto.getInsReportDto1s());
+ } else {
+ //缁撴潫璁㈠崟
+ InsOrder insOrder = new InsOrder();
+ insOrder.setId(insReportDto.getId());
+ insOrder.setState(4);
+ insOrderMapper.updateById(insOrder);
+ }
+ } else {
+ throw new ErrorException("璇ヨ鍗曡繕鏈粨鏉熻瘯楠�,鏃犳硶鐢熶骇鎶ュ憡!");
+ }
+ return 0;
+ }
+
+ //鏌ュ嚭璇ヨ鍗曚笅姣忎釜绔欑偣涓嬬殑妫�楠屾鏁�
+ @Override
+ public List<InsOrderState> getInsOrderStateCount(Integer id) {
+ List<InsOrderState> insOrderStates = insOrderStateMapper.getInsOrderStateCount(id);
+ return insOrderStates;
}
@@ -425,6 +503,19 @@
os = new FileOutputStream(file);
//瑕佽浆鎹㈢殑word鏂囦欢
com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);
+ TableCollection tables = doc.getFirstSection().getBody().getTables();
+ for (Table table : tables) {
+ RowCollection rows = table.getRows();
+ table.setAllowAutoFit(false);
+ for (Row row : rows) {
+ CellCollection cells = row.getCells();
+ for (Cell cell : cells) {
+ CellFormat cellFormat = cell.getCellFormat();
+ cellFormat.setFitText(false); //璁剧疆鑷�傚簲鍏抽棴
+ cellFormat.setWrapText(true); // 璁剧疆鑷姩鎹㈣
+ }
+ }
+ }
doc.save(os, SaveFormat.PDF);
//娣诲姞楠戠紳绔�
@@ -503,6 +594,395 @@
}
stamp.close();
}
+
+ //鐢熸垚鎶ュ憡
+ private void generateReport(Integer orderId, List<InsReportDto1> insReportDto1s) {
+ LocalDateTime now = LocalDateTime.now();
+ InsOrder insOrder = insOrderMapper.selectById(orderId);
+ //濮旀墭閮ㄩ棬 departLims
+ String departLims = userMapper.selectDepartLims(insOrder.getPrepareUser());
+ //samples鏄繃婊ゆ帀娌℃湁妫�楠岄」鐩殑鏍峰搧
+ List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
+ String sampleCode = samples.get(0).getSampleCode();
+ InsReport insReport = new InsReport();
+ insReport.setCode(insOrder.getEntrustCode().replace("WT","TXJC"));
+ insReport.setInsOrderId(orderId);
+ List<Map<String, Object>> tables = new ArrayList<>();
+ Set<String> standardMethod = new HashSet<>();
+ Set<String> deviceSet = new HashSet<>();
+ Set<String> models = new HashSet<>();
+ AtomicReference<Integer> productSize = new AtomicReference<>(0);
+ AtomicReference<Integer> productSize1 = new AtomicReference<>(0);
+ AtomicReference<Integer> productSize2 = new AtomicReference<>(0);
+ AtomicReference<Integer> productSize3 = new AtomicReference<>(0);
+ String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+ samples.forEach(s -> {
+ models.add(s.getModel());
+ standardMethod.addAll(standardMethodListMapper.selectList(Wrappers.<StandardMethodList>lambdaQuery()
+ .in(StandardMethodList::getId,Arrays.stream(s.getStandardMethodListId().replaceAll("[\\[\\]]", "").split(","))
+ .map(String::trim).map(Integer::parseInt).collect(Collectors.toList()))).stream().map(aa->{return aa.getCode()+" "+aa.getName();}).distinct().collect(Collectors.toList()));
+ //鎬绘暟
+ Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, s.getId()));
+ productSize.set(productSize.get() + Integer.parseInt(productCount + ""));
+ //涓嶅垽瀹�
+ Long productCount1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, s.getId())
+ .eq(InsProduct::getInsResult, 3));
+ productSize1.set(productSize1.get() + Integer.parseInt(productCount1 + ""));
+ //涓嶅悎鏍�
+ Long productCount2 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, s.getId())
+ .eq(InsProduct::getInsResult, 0));
+ productSize2.set(productSize2.get() + Integer.parseInt(productCount2 + ""));
+ //鍚堟牸
+ Long productCount3 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, s.getId())
+ .eq(InsProduct::getInsResult, 1));
+ productSize3.set(productSize3.get() + Integer.parseInt(productCount3 + ""));
+ //灏嗛」鐩寜鐓х珯鐐硅繘琛屽垎绫�
+ Map<String, List<InsProduct>> listMap = s.getInsProduct().stream().collect(Collectors.groupingBy(InsProduct::getLaboratory));
+ // 鍒涘缓涓�涓� Map 灏嗙珯鐐瑰拰椤圭洰ID鐨勬槧灏勫叧绯�
+ Map<String, Set<Integer>> labToDeviceMap = new HashMap<>();
+ // 鑾峰彇鎵�鏈夌珯鐐圭殑椤圭洰ID 鍒楄〃
+ for (Map.Entry<String, List<InsProduct>> entry : listMap.entrySet()) {
+ Set<Integer> deviceIds = entry.getValue().stream()
+ .map(InsProduct::getId)
+ .collect(Collectors.toSet());
+ labToDeviceMap.put(entry.getKey(), deviceIds);
+ }
+ for (InsReportDto1 insReportDto1 : insReportDto1s) {
+ String laboratory = insReportDto1.getLaboratory();
+ if (!labToDeviceMap.containsKey(laboratory)) {
+ continue;
+ }
+ Set<Integer> deviceIds = labToDeviceMap.get(laboratory);
+ Integer num = insReportDto1.getNum();
+ List<InsProductResult> insProductResults = insProductResultMapper.selectList(
+ Wrappers.<InsProductResult>lambdaQuery()
+ .eq(InsProductResult::getNum, num)
+ .in(InsProductResult::getInsProductId, deviceIds));
+ for (InsProductResult insProductResult : insProductResults) {
+ List<JSONObject> jsonObjects = JSON.parseArray(insProductResult.getEquipValue(), JSONObject.class);
+ for (JSONObject jsonObject : jsonObjects) {
+ String value = jsonObject.getString("v");
+ if (value != null && !value.isEmpty()) {
+ deviceSet.add(value);
+ }
+ }
+ }
+ List<InsProductResult2> insProductResult2s = insProductResult2Mapper.selectList(
+ Wrappers.<InsProductResult2>lambdaQuery()
+ .eq(InsProductResult2::getNum, num)
+ .in(InsProductResult2::getInsProductId, deviceIds));
+ for (InsProductResult2 result2 : insProductResult2s) {
+ String equipValue = result2.getEquipValue();
+ if (equipValue != null && !equipValue.isEmpty()) {
+ deviceSet.add(equipValue);
+ }
+ }
+ }
+ });
+ String url;
+ try {
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
+ File file = File.createTempFile("temp", ".tmp");
+ OutputStream outputStream = new FileOutputStream(file);
+ IOUtils.copy(inputStream, outputStream);
+ url = file.getAbsolutePath();
+ } catch (FileNotFoundException e) {
+ throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ StringBuilder standardMethod2 = new StringBuilder();
+ for (String s : standardMethod) {
+ standardMethod2.append("锛沑n").append(s);
+ }
+ standardMethod2.append("锛沑n").append("GB/T 9410-2008 銆婄Щ鍔ㄩ�氫俊澶╃嚎閫氱敤鎶�鏈鑼冦��");
+ standardMethod2.replace(0, 1, "");
+ tables.forEach(table -> {
+ table.put("tableSize", tables.size() + 1);
+ });
+ List<Map<String, String>> deviceList = null;
+ if (deviceSet.size() != 0) {
+ deviceList = insOrderMapper.selectDeviceList(deviceSet);
+ }
+ Map<String, String> codeStr = new HashMap<>();
+ codeStr.put("鎶ュ憡缂栧彿", insReport.getCode());
+ codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample());
+ codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel());
+ codeStr.put("鍙戞斁鏃ユ湡", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ String codePath;
+ try {
+ codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{", "")
+ .replaceAll("}", "").replaceAll(",", "").replaceAll("\"", ""), twoCode);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ String modelStr = "";
+ for (String model : models) {
+ modelStr += "," + model;
+ }
+ String finalModelStr = modelStr;
+ String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
+ String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
+ String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ List<Map<String, String>> finalDeviceList = deviceList;
+ List<Map<String, String>> sampleList = insSampleMapper.selectSampleList(orderId);
+ Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
+ .eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
+ String signatureUrl;
+ try {
+ signatureUrl = userMapper.selectById(userId).getSignatureUrl();
+ } catch (Exception e) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+ if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+ Custom custom = customMapper.selectById(insOrder.getCompanyId());
+
+ /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
+ List<Map<String, Object>> images = new ArrayList<>();
+ List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
+ if (CollectionUtils.isNotEmpty(insOrderFiles)) {
+ insOrderFiles.forEach(insOrderFile -> {
+ Map<String, Object> image = new HashMap<>();
+ PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create();
+ image.put("url", pictureRenderData);
+ image.put("report", insReport);
+ images.add(image);
+ });
+ }
+ //濮旀墭浜哄拰鐢佃瘽瀛楁鍒ゆ柇
+ if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
+ insOrder.setPrepareUser("/");
+ }
+ if (ObjectUtils.isEmpty(insOrder.getPhone())) {
+ insOrder.setPhone("/");
+ }
+ //妫�楠岄」鐩殑鐜
+ InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0);
+ String environment = "";
+ environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
+ String finalEnvironment = environment;
+ List<SampleProductDto> finalSamples = samples;
+ XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("order", insOrder);
+ put("report", insReport);
+ put("departLims", departLims);
+ put("sampleCode", sampleCode);
+ put("environment", finalEnvironment);
+ put("custom", custom);
+ put("sampleSize", finalSamples.size());
+ put("tables", tables);
+ put("tableSize", tables.size() + 1);
+ put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
+ put("deviceList", finalDeviceList);
+ put("sampleList", sampleList);
+ put("twoCode", Pictures.ofLocal(codePath).create());
+ put("models", finalModelStr.replace(",", ""));
+ put("productSize", productSize);
+ put("productSize1", productSize1);
+ put("productSize2", productSize2);
+ put("productSize3", productSize3);
+ put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
+ put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear());
+ put("writeUrl", null);
+ put("insUrl", Pictures.ofLocal(imgUrl + "/" + signatureUrl).create());
+ put("images", images);
+ put("examineUrl", null);
+ put("ratifyUrl", null);
+ put("sampleEn", sampleEn);
+ put("orderType", orderType);
+ put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear());
+ put("seal1", null);
+ put("seal2", null);
+ put("formTypeCh", formType);
+ put("formTypeEn", insOrder.getFormType());
+ }});
+ try {
+ String name = insReport.getCode().replace("/", "") + ".docx";
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ insReport.setUrl("/word/" + name);
+ insReportMapper.insert(insReport);
+ insOrder.setInsState(5);
+ insOrderMapper.updateById(insOrder);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
+ try {
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); i++) {
+ Set<String> set1 = new HashSet<>();
+ Map<String, Map<String, Integer>> maps = new HashMap<>();
+ for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+ String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+ if (set1.add(split[1])) {
+ Map<String, Integer> map = new HashMap<>();
+ map.put("sr", j);
+ map.put("sc", k);
+ map.put("er", j + 0);
+ map.put("ec", k + 0);
+ maps.put(split[1], map);
+ } else {
+ Map<String, Integer> map1 = maps.get(split[1]);
+ if (j == map1.get("sr")) {
+ map1.put("ec", map1.get("ec") + 1);
+ } else if (k == map1.get("sc")) {
+ map1.put("er", map1.get("er") + 1);
+ }
+ }
+ String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ List<String> list = new ArrayList<>();
+ for (String s : maps.keySet()) {
+ list.add(s);
+ }
+ for (int a = list.size() - 1; a >= 0; a--) {
+ Map<String, Integer> v = maps.get(list.get(a));
+ for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+ if (v.get("ec") > v.get("sc")) {
+ try {
+ TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ if (v.get("er") > v.get("sr")) {
+ try {
+ TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream = new FileOutputStream(path);
+ document.write(fileOutputStream);
+ fileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ // 璁$畻琛岄珮鐨勬柟娉�
+ private int calculateRowHeight(RowRenderData rowRenderData) {
+ // 瀹炵幇璁$畻閫昏緫锛屽彲鑳介渶瑕佹牴鎹崟鍏冩牸鍐呭鍜屽瓧浣撶瓑鍙傛暟杩涜璁$畻
+ int height = 0;
+ for (CellRenderData cell : rowRenderData.getCells()) {
+ int cellHeight = estimateCellHeight(cell); // 鏍规嵁鍐呭浼扮畻鍗曞厓鏍奸珮搴�
+ if (cellHeight > height) {
+ height = cellHeight;
+ }
+ }
+ return height;
+ }
+
+ //鏍规嵁鍗曞厓鏍肩殑鏂囨湰鍐呭璁$畻瀹為檯琛岄珮
+ private int estimateCellHeight(CellRenderData cellRenderData) {
+ // 鍋囪榛樿琛岄珮鏄�40
+ int defaultHeight = 40;
+ // 鑾峰彇鍗曞厓鏍间腑鐨勬墍鏈夋钀�
+ List<ParagraphRenderData> paragraphs = cellRenderData.getParagraphs();
+ int estimatedHeight = 0;
+ // 閬嶅巻娈佃惤锛屼及绠楁瘡涓钀界殑楂樺害
+ for (ParagraphRenderData paragraph : paragraphs) {
+ List<RenderData> contents = paragraph.getContents();
+ for (RenderData content : contents) {
+ if (content instanceof TextRenderData) {
+ TextRenderData text = (TextRenderData) content;
+ Style style = text.getStyle();
+ // 鍋囪姣忚鏂囨湰鐨勯珮搴︿负瀛椾綋澶у皬鐨�1.2鍊�
+ Double fontSize = Objects.isNull(style.getFontSize()) ? 12.0 : style.getFontSize();
+ int lines = (int) Math.ceil(text.getText().length() / 15.0); // 鍋囪姣忚绾�15涓瓧绗�
+ int textHeight = (int) (fontSize * 1.2 * lines);
+ // 绱姞娈佃惤鐨勯珮搴�
+ estimatedHeight += textHeight;
+ }
+ }
+ }
+ // 杩斿洖鏈�澶у�硷紝纭繚楂樺害涓嶄綆浜庨粯璁ら珮搴�
+ return Math.max(estimatedHeight, defaultHeight);
+ }
+
+ private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
+ for (InsProduct product : insProducts) {
+ if (product.getTemplateId() == null) {
+ product.setTemplate(new ArrayList<>());
+ continue;
+ }
+ String thing = null;
+ if (product.getTemplateId() != null && set.add(product.getTemplateId())) {
+ map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
+ thing = map2.get(product.getTemplateId());
+ }
+ if (StrUtil.isNotEmpty(thing)) {
+ JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
+ JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
+ List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
+ Map<String, Object> style = new HashMap<>();
+ style.put("rowlen", config.get("rowlen"));
+ style.put("columnlen", config.get("columnlen"));
+ product.setTemplate(cellData);
+ product.setStyle(style);
+ product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId()));
+ }
+ }
+ }
}
--
Gitblit v1.9.3