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<InsProduct> insProducts0,
|
List<InsSample> insSamples,
|
InsReport insReport,
|
List<Map<String,Object>> tables4){
|
// //去重的检验项目
|
List<String> 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<InsSample> sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList());
|
//过滤出光纤接头损耗的检验项目
|
List<String> 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<RowRenderData> 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<CellRenderData> 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<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);
|
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.<InsProduct>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.<InsProduct>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<String, Object> 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());
|
});
|
|
}
|
|
}
|