package com.ruoyi.requier.handler; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; 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.dto.SampleProductDto; import com.ruoyi.inspect.mapper.InsProductMapper; import com.ruoyi.inspect.mapper.InsSampleMapper; import com.ruoyi.inspect.pojo.InsProduct; import com.ruoyi.inspect.pojo.InsReport; import com.ruoyi.inspect.pojo.InsSample; import com.ruoyi.inspect.vo.InsProductFiberVO; import org.apache.commons.lang3.StringUtils; 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.text.Collator; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** * 光纤带尺寸参数报告处理类 */ public class FiberOpticRibbonReportHandler { /** * 默认表格宽度 */ private final static int[] DEFAULT_COL_WIDTHS = {1600,0, 1200, 1200, 1200, 1200, 1200, 1200,1200}; private final InsProductMapper insProductMapper; private final InsSampleMapper insSampleMapper; public FiberOpticRibbonReportHandler(InsProductMapper insProductMapper, InsSampleMapper insSampleMapper){ this.insProductMapper = insProductMapper; this.insSampleMapper = insSampleMapper; } private final static String ITEM_SPLIT_CHAR = "&";//检验项分隔符 private final static String COLOR_SPLIT_CHAR = "-";//色标分隔符 /** * * @param samples 所有样品 * @param insReport report对象 * @param tables6 尺寸参数附件表格行列表 * @param colorDict 色标字典 */ public void doWrite(List samples, InsReport insReport, List> tables6, List colorDict){ AtomicInteger index6 = new AtomicInteger(1);//页码 samples.forEach(sample -> { //查询样品下的检验项和光纤带编号 List insProducts1 = insProductMapper.selectInsProductInsFibersList(sample.getId()); //根据光纤带编号 Map> groupProducts = insProducts1.stream() .filter(p->p.getInspectionItem().equals("尺寸参数")) .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getCode())); if(groupProducts.isEmpty()){ return; } List collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> { if (o1.length > 1 && o2.length > 1) { if (!Objects.equals(o1[0], o2[0])) { Integer o1Index = colorDict.indexOf(o1[0]); Integer o2Index = colorDict.indexOf(o2[0]); return o1Index.compareTo(o2Index); } if (!Objects.equals(o1[1], o2[1])) { Integer o1Index = colorDict.indexOf(o1[1]); Integer o2Index = colorDict.indexOf(o2[1]); return o1Index.compareTo(o2Index); } } return 0; }).collect(Collectors.toList()); List sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList()); //检验项列表(表头) List itemMap = insProducts1.stream().sorted((o1,o2)->{ //根据检验项排序 if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ List specialItems = Arrays.asList("耐环境应力开裂","热收缩率"); if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ return Integer.MAX_VALUE; } Collator instance = Collator.getInstance(Locale.CHINA); return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); } //检验子项排序 if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ Collator instance = Collator.getInstance(Locale.CHINA); return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); } } return 0; }).map(insProduct -> { String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); }).distinct().collect(Collectors.toList()); long size = itemMap.size();//表头长度 long size2 = insProducts1.stream().map(InsProduct::getInsFibersId).distinct().count(); long number = 10; //判断检验项目是否有父子关系 int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; for (long c = 0; c < size; c++) { if (c % number == 0) { List rows = new ArrayList<>(); //表格的行数 for (long i = 0; i < size2 + a + 2; i++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数 for (long j = 0; j < 12; j++) { 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"); style.setFontSize(10); textRenderData.setStyle(style); if(i==0){ //第一行 if (j<=2) { textRenderData.setText("样品编号@Sample number∑456"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >2&&j<=5) { textRenderData.setText(sample.getSampleCode()+"∑4566"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >5&&j<=8) { textRenderData.setText("规格型号@Type∑457"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); }else{ textRenderData.setText(sample.getModel()+"∑4577"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (i == 1) { //第二行 if (j == 0) { //第一列 textRenderData.setText("管色标@Pipe∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("光纤带编号@Scanning Number∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; textRenderData.setText("∑" + inspectionItem); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (a == 2 && i == 2) { //有父子项目关系的第三行 if (j == 0) { //第一列 textRenderData.setText("管色标@Pipe∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("光纤带编号@Scanning Number∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >1&& j<=3) { String[] splits = itemMap.get(0).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j>3&&j<=5) { String[] splits = itemMap.get(1).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >5&&j<=7) { String[] splits = itemMap.get(2).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >7&&j<=9) { String[] splits = itemMap.get(3).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else{ String[] splits = itemMap.get(4).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if ( i == 3) { //第四行 if (j == 0) { //第一列 textRenderData.setText("管色标@Pipe∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("光纤带编号@Scanning Number∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 if((int)(j - 2)%2==0){ textRenderData.setText("A端"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); }else{ textRenderData.setText("B端"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } else{ //循环光纤带编号 String key = sortKeys.get((int)i-4); String item; if (j<=3) { item = itemMap.get(0); } else if (j>3&&j<=5) { item = itemMap.get(1); } else if (j >5&&j<=7) { item = itemMap.get(2); } else if (j >7&&j<=9) { item = itemMap.get(3); } else{ item = itemMap.get(4); } InsProductFiberVO insProduct = groupProducts.get(key).stream() .filter(p->{ String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem)); }).findFirst().orElse(new InsProductFiberVO()); //填值 if (j == 0) { //第一列 textRenderData.setText(insProduct.getBushColor()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText(insProduct.getCode()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 if((int)(j - 2)%2==0){ textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(0)); }else{ textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(1)); } 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()) { if (row.getCells().size() != countSize) { throw new ErrorException("每行单元格不相等6"); } } 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("table6", tableRenderData); table.put("report", insReport); table.put("sample_number", sample.getSampleCode()); table.put("type", sample.getModel()); table.put("index6", index6.get()); tables6.add(table); index6.getAndIncrement(); } } }); } /** * 格式化检验过程值json字符串 * @param insValue 检验过程值json字符串 * @return */ private static List transformInsValue(String insValue){ List list = new ArrayList<>(); if(!insValue.isEmpty() && !"[]".equals(insValue)){ for (Object o : JSONUtil.parseArray(insValue)) { JSONObject obj = JSON.parseObject(JSON.toJSONString(o)); if(Objects.nonNull(obj.get("v"))){ list.add(obj.get("v").toString()); } } } return list; } /** * 光纤附件表格:写入行数据 * @param ribbonList 光纤项目信息 * @param tables6 光纤带尺寸参数附件表格 */ public void writeFiberOpticRibbonEnclosureTableRow(List ribbonList, List> tables6,InsReport insReport){ AtomicInteger index6 = new AtomicInteger(1);//页码 int colCount = 12;//表格总列数 int itemCount = 10;//表格项目列数 //检验项列表(表头) List itemMap = ribbonList.stream().sorted((o1,o2)->{ //根据检验项排序 if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ List specialItems = Arrays.asList("耐环境应力开裂","热收缩率"); if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ return Integer.MAX_VALUE; } Collator instance = Collator.getInstance(Locale.CHINA); return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); } //检验子项排序 if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ Collator instance = Collator.getInstance(Locale.CHINA); return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); } } return 0; }).map(insProduct -> { String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); }).distinct().collect(Collectors.toList()); //根据样品id分组 Map> groupProducts = ribbonList.stream() .collect(Collectors.groupingBy(InsProductFiberVO::getInsSampleId)); //sampleId顺序排序 List sortKeys = groupProducts.keySet().stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); //判断检验项目是否有父子关系 int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; for (int c = 0; c < itemMap.size(); c++) { if (c % itemCount == 0) { List rows = new ArrayList<>(); //表格的行数(样品数量+表头) int tableRow = sortKeys.size() + a + 1; for (int i = 0; i < tableRow; i++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); //表格的列数 for (int j = 0; j < colCount; j++) { 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"); style.setFontSize(10); textRenderData.setStyle(style); //第一行 if(i==0){ if (j < 2) { //第一列 textRenderData.setText("样品编号@Sample number∑45678"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else{ //生成表头 if(itemMap.size()> (j - 2)){ String inspectionItem = itemMap.get(j - 2).split(ITEM_SPLIT_CHAR)[0]; textRenderData.setText( inspectionItem + "∑" + inspectionItem); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); }else{ String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; textRenderData.setText("∑" + inspectionItem); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } else if (a == 2 && i == 1) { //有父子项目关系的第二行 if (j < 2) { //第一列 textRenderData.setText("样品编号@Sample number∑45678"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >1&& j<=3) { String[] splits = itemMap.get(0).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j>3&&j<=5) { String[] splits = itemMap.get(1).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >5&&j<=7) { String[] splits = itemMap.get(2).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j >7&&j<=9) { String[] splits = itemMap.get(3).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else{ String[] splits = itemMap.get(4).split(ITEM_SPLIT_CHAR); if (splits.length<2 || "@".equals(splits[1])) { textRenderData.setText(splits[0] + "∑" + splits[0]); } else { textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (i == 2) { //第三行 if (j < 2) { //第一列 textRenderData.setText("样品编号@Sample number∑45678"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 if((j - 2) %2==0){ textRenderData.setText("A端"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); }else{ textRenderData.setText("B端"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } } else{ //循环样品 Integer key = sortKeys.get(i-3); //查询当前样品信息 InsSample insSample = insSampleMapper.selectById(key); int index = Math.max(j - 2, 0); String item; if (j<=3) { item = itemMap.get(0); } else if (j>3&&j<=5) { item = itemMap.get(1); } else if (j >5&&j<=7) { item = itemMap.get(2); } else if (j >7&&j<=9) { item = itemMap.get(3); } else{ item = itemMap.get(4); } InsProductFiberVO insProduct = groupProducts.get(key).stream() .filter(p->{ String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); String insItemSubClass = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insItemSubClass)); }) .findFirst().orElse(new InsProductFiberVO()); //填值 if (j < 2) { //第一列 textRenderData.setText(insSample.getSampleCode()+"∑"+key); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //项目信息 if(index%2==0){ textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(0)); }else{ textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(1)); } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } // if(itemMap.size()>j - 2) { // } } } 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()) { if (row.getCells().size() != countSize) { throw new ErrorException("光纤带报告附件表格列数不匹配"); } } TableStyle tableStyle = new TableStyle(); tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); // tableStyle.setColWidths(DEFAULT_COL_WIDTHS); // tableStyle.setWidth("10000"); 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("table6", tableRenderData); table.put("report", insReport); table.put("index6", index6.get()); tables6.add(table); index6.getAndIncrement(); } } } }