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<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables6,
|
List<String> colorDict){
|
AtomicInteger index6 = new AtomicInteger(1);//页码
|
samples.forEach(sample -> {
|
//查询样品下的检验项和光纤带编号
|
List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsFibersList(sample.getId());
|
//根据光纤带编号
|
Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream()
|
.filter(p->p.getInspectionItem().equals("尺寸参数"))
|
.collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getCode()));
|
if(groupProducts.isEmpty()){
|
return;
|
}
|
List<String[]> 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<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList());
|
//检验项列表(表头)
|
List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{
|
//根据检验项排序
|
if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
|
List<String> 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<RowRenderData> 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<CellRenderData> 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<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");
|
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<String, Object> 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<String> transformInsValue(String insValue){
|
List<String> 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<InsProductFiberVO> ribbonList, List<Map<String, Object>> tables6,InsReport insReport){
|
AtomicInteger index6 = new AtomicInteger(1);//页码
|
int colCount = 12;//表格总列数
|
int itemCount = 10;//表格项目列数
|
//检验项列表(表头)
|
List<String> itemMap = ribbonList.stream().sorted((o1,o2)->{
|
//根据检验项排序
|
if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
|
List<String> 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<Integer,List<InsProductFiberVO>> groupProducts = ribbonList.stream()
|
.collect(Collectors.groupingBy(InsProductFiberVO::getInsSampleId));
|
//sampleId顺序排序
|
List<Integer> 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<RowRenderData> 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<CellRenderData> 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<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");
|
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<String, Object> table = new HashMap<>();
|
table.put("table6", tableRenderData);
|
table.put("report", insReport);
|
table.put("index6", index6.get());
|
tables6.add(table);
|
index6.getAndIncrement();
|
}
|
}
|
}
|
|
}
|