package com.ruoyi.inspect.handler; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.deepoove.poi.data.*; import com.deepoove.poi.data.style.*; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.framework.util.MyUtil; import com.ruoyi.inspect.mapper.InsProductMapper; import com.ruoyi.inspect.pojo.InsProduct; import com.ruoyi.inspect.pojo.InsReport; import com.ruoyi.inspect.pojo.InsSample; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TableRowAlign; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import java.util.*; import java.util.stream.Collectors; /** * 光纤接头损耗报告处理类 */ public class FiberOpticConnectorLossReportHandler { private final InsProductMapper insProductMapper; public FiberOpticConnectorLossReportHandler(InsProductMapper insProductMapper){ this.insProductMapper = insProductMapper; } /** * * @param insProducts0 当前订单下的所有检验项 * @param insSamples 当前订单所有样品 * @param insReport report对象 * @param tables4 光纤接头损耗附件表格行数据 */ public void doWrite(List insProducts0, List insSamples, InsReport insReport, List> tables4){ // //去重的检验项目 List filteredProducts = insProducts0.stream() .map(insProduct -> (MyUtil.joinChars(",",insProduct.getInspectionItem(),insProduct.getInspectionItemEn(),insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn(),insProduct.getTell()))) .distinct().collect(Collectors.toList()); long index4 = 0; //光纤接头损耗的报告还是tables4 //查询样品(只查询带"/")的数量 List sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList()); //过滤出光纤接头损耗的检验项目 List strings = filteredProducts.stream().filter(s -> s.contains("光纤接头损耗")).distinct().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); long index41 = 1; for (int i = 0; i < sampleList.size(); i++) { if (i % 16 == 0) { //样品数量超过16需要新增表格 List rows = new ArrayList<>(); int count2 = sampleList.size() - (index41 - 1) * 16 < 16 ? (int) (sampleList.size() - (index41 - 1) * 16 + 1) : 17; //表格的行数 for (int j = 0; j < count2; j++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数 for (int k = 0; k < 6; k++) { CellRenderData cellRenderData = new CellRenderData(); CellStyle cellStyle = new CellStyle(); cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); cellRenderData.setCellStyle(cellStyle); List paragraphRenderDataList = new ArrayList<>(); ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); ParagraphStyle paragraphStyle = new ParagraphStyle(); paragraphStyle.setAlign(ParagraphAlignment.CENTER); paragraphRenderData.setParagraphStyle(paragraphStyle); List renderData = new ArrayList<>(); TextRenderData textRenderData = new TextRenderData(); Style style = new Style(); style.setFontFamily("宋体"); style.setColor("000000"); textRenderData.setStyle(style); if (j == 0) { //第一行 if (k == 0) { //第一列 textRenderData.setText("光纤类型@Fiber type"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 1 || k == 2) { //第二 三列 textRenderData.setText("样品编号@Sample number∑3333"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { String[] split = strings.get(k - 3).split(","); if (ObjectUtils.isEmpty(split[3]) || split[3].isEmpty()) { textRenderData.setText(split[2]); } else { textRenderData.setText(split[2] + "@" + split[3]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else { if (k == 0) { //第一列 textRenderData.setText(sampleList.get(0).getModel() + "∑44"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 1) { //第二列 textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[0]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (k == 2) { //第三列 textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[1]); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //根据对应的样品编号和检验项目查询对应数据(最终值) String[] split = strings.get(k - 3).split(","); // 如果是检验项为光纤接头损耗,则取第一条 InsProduct insProduct = null; if(split[0].equals("光纤接头损耗")) { insProduct = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId()) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2])).get(0); }else { insProduct = insProductMapper.selectOne(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId()) .eq(InsProduct::getInspectionItem, split[0]) .eq(InsProduct::getInspectionItemSubclass, split[2])); } textRenderData.setText(insProduct.getLastValue()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } rowRenderData.setCells(cells); if (!rowRenderData.getCells().isEmpty()) { rows.add(rowRenderData); } } TableRenderData tableRenderData = new TableRenderData(); tableRenderData.setRows(rows); int countSize = tableRenderData.getRows().get(0).getCells().size(); for (RowRenderData row : tableRenderData.getRows()) { /*for (CellRenderData cell : row.getCells()) { System.out.print(cell.getParagraphs().get(0).getContents()); } System.out.println("");*/ if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等3"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); tableStyle.setAlign(TableRowAlign.CENTER); BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("000000"); borderStyle.setType(XWPFTable.XWPFBorderType.THICK); borderStyle.setSize(14); tableStyle.setLeftBorder(borderStyle); tableStyle.setTopBorder(borderStyle); tableStyle.setRightBorder(borderStyle); tableStyle.setBottomBorder(borderStyle); tableRenderData.setTableStyle(tableStyle); Map table = new HashMap<>(); table.put("table4", tableRenderData); table.put("report", insReport); table.put("index4", index4 + 1); tables4.add(table); index4++; index41++; } } tables4.forEach(table4 -> { table4.put("tableSize4", tables4.size()); }); } }