package com.ruoyi.inspect.handler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; 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.inspect.dto.SampleProductDto; import com.ruoyi.inspect.mapper.InsProductMapper; import com.ruoyi.inspect.mapper.InsProductResultMapper; import com.ruoyi.inspect.pojo.InsProduct; import com.ruoyi.inspect.pojo.InsProductResult; import com.ruoyi.inspect.pojo.InsReport; 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.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 热循环报告处理类 */ public class ThermalCycleReportHandler { private final InsProductMapper insProductMapper; private final InsProductResultMapper insProductResultMapper; public ThermalCycleReportHandler(InsProductMapper insProductMapper,InsProductResultMapper insProductResultMapper){ this.insProductMapper = insProductMapper; this.insProductResultMapper = insProductResultMapper; } /** * * @param samples 当前订单的所有样品 * @param insReport report对象 * @param tables3 热循环附件表格数据 */ public void doWrite(List samples, InsReport insReport, List> tables3){ samples.forEach(sample -> { //计算数据的行数,先查出有多少次循环,再查每个循环的填写数量 InsProduct insProduct = insProductMapper.selectOne(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItem, "热循环")); String[] split = insProduct.getAsk().split(";"); Integer cycle = Integer.parseInt(split[split.length - 1]);//循环次数 int vCount = 0; List list = new ArrayList<>(); for (Integer i = 1; i <= cycle; i++) { //查每个循环里面的填写数量 List insPros = insProductMapper.selectList(Wrappers.lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .isNotNull(InsProduct::getSpecialItemParentId) //区分常规项目 .eq(InsProduct::getInspectionItemClass, "直流电阻") .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环 .eq(InsProduct::getInspectionItem, i + "")); InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.lambdaQuery() .eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0); vCount += StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\""); list.add(StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"")); } long index3 = 1; for (int c = 0; c < vCount; c++) { if (c % 18 == 0) { List rows = new ArrayList<>(); //表格的行数 for (int i = 0; i < 4 + vCount; i++) { RowRenderData rowRenderData = new RowRenderData(); RowStyle rowStyle = new RowStyle(); rowStyle.setHeight(40); rowRenderData.setRowStyle(rowStyle); List cells = new ArrayList<>(); String a = null;//导线温度 String b = null;//耐张温度 String d = null;//接续温度 //列数 for (int j = 0; j < 9; 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"); textRenderData.setStyle(style); if (i == 0) { //第一行 if (j == 0) { //第一列 textRenderData.setText("样品编号@Sample number"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText(sample.getSampleCode()); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2 || j == 3) { //第三列和第四列 textRenderData.setText("规格型号@Type and size∑301"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 4 || j == 5) { //第五列和第六列 textRenderData.setText(sample.getModel()+"∑302"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 6) { //第七列 textRenderData.setText("检测项@Testing items"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //第八列和第九列 textRenderData.setText("热循环@Thermal cycle∑303"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (i == 1) { //第二行 if (j == 0) { //第一列 textRenderData.setText("循环次数@Number of cycles(times)∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("环境温度@Ambient temperature(℃)∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2 || j == 3) { //第三列和第四列 textRenderData.setText("导线@Conductor∑102"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 4 || j == 5) { //第五列和第六列 textRenderData.setText("耐张线夹@Tension clamp∑103"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 6 || j == 7) { //第七列第八列 textRenderData.setText("接续金具@Splicing fittings∑104"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //第九列 textRenderData.setText("结果判定@Result judgment∑105"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (i == 2) { //第三行 if (j == 0) { //第一列 textRenderData.setText("循环次数@Number of cycles(times)∑100"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 1) { //第二列 textRenderData.setText("环境温度@Ambient temperature(℃)∑101"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2) { //第三列 textRenderData.setText("温度@Temperature(℃)"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 3) { //第四列 textRenderData.setText("直流电阻@DC resistance(Ω/km)"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 4) { //第五列 textRenderData.setText("温度@Temperature(℃)"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 5) { //第六列 textRenderData.setText("直流电阻@DC resistance(Ω/km)"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 6) { //第七列 textRenderData.setText("温度@Temperature(℃)"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 7) { //第八列 textRenderData.setText("直流电阻@DC resistance(Ω/km)"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //第九列 textRenderData.setText("结果判定@Result judgment∑105"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else if (i == 3 + vCount) { //最后一行 if (j == 0) { //第一列 textRenderData.setText("备注"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //其余列 textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。∑108"); renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } } else { //其余行 if (j == 0) { //第一列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "环境温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3-(aa-list.get(m))); String vValue = jsonObject.getString("v"); System.out.println("环境温度第 " + (i - 2-(aa-list.get(m))) + " 个 'v' 字段的值是: " + vValue); textRenderData.setText(vValue); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 2) { //第三列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "导线温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); if (ObjectUtils.isNotEmpty(insPro)) { String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); String vValue = jsonObject.getString("v"); a=vValue; System.out.println("导线温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'v' 字段的值是: " + vValue); textRenderData.setText(vValue); }else textRenderData.setText(""); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 3) { //第四列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "导线温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); if (ObjectUtils.isNotEmpty(insPro)) { String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); String vValue = jsonObject.getString("w"); System.out.println("导线温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'w' 字段的值是: " + vValue); textRenderData.setText(vValue); }else textRenderData.setText(""); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 4) { //第五列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "耐张温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); if (ObjectUtils.isNotEmpty(insPro)) { String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); String vValue = jsonObject.getString("v"); b=vValue; System.out.println("耐张温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'v' 字段的值是: " + vValue); textRenderData.setText(vValue); }else textRenderData.setText(""); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 5) { //第六列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "耐张温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); if (ObjectUtils.isNotEmpty(insPro)) { String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); String vValue = jsonObject.getString("w"); System.out.println("耐张温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'w' 字段的值是: " + vValue); textRenderData.setText(vValue); }else textRenderData.setText(""); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 6) { //第七列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "接续温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); if (ObjectUtils.isNotEmpty(insPro)) { String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); String vValue = jsonObject.getString("v"); d=vValue; System.out.println("接续温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'v' 字段的值是: " + vValue); textRenderData.setText(vValue); }else textRenderData.setText(""); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else if (j == 7) { //第八列 int aa= 0; for (int m = 0; m < cycle; m++) { aa += list.get(m); if (i-3lambdaQuery() .eq(InsProduct::getState, 1) .eq(InsProduct::getInsSampleId, sample.getId()) .eq(InsProduct::getInspectionItemSubclass, "接续温度") .isNotNull(InsProduct::getSpecialItemParentId) .eq(InsProduct::getInspectionItemClass,"直流电阻") .isNull(InsProduct::getInsFiberId) .eq(InsProduct::getInspectionItem, (m+1)+"")); if (ObjectUtils.isNotEmpty(insPro)) { String insValue = insProductResultMapper.selectList(Wrappers.lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); JSONArray jsonArray = JSONArray.parseArray(insValue); JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); String vValue = jsonObject.getString("w"); System.out.println("接续温度第 " + (i - 2 - (aa - list.get(m))) + " 个 'w' 字段的值是: " + vValue); textRenderData.setText(vValue); }else textRenderData.setText(""); break; } } renderData.add(textRenderData); paragraphRenderData.setContents(renderData); paragraphRenderDataList.add(paragraphRenderData); cellRenderData.setParagraphs(paragraphRenderDataList); cells.add(cellRenderData); } else { //判断合格与不合格 BigDecimal decimal1 = new BigDecimal(a); BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b); BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d); if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) { textRenderData.setText("√"); } else { textRenderData.setText("×"); } 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("每行单元格不相等5"); } } 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("table3", tableRenderData); table.put("report", insReport); table.put("index3", index3); tables3.add(table); index3++; } } }); } }