| | |
| | | package com.yuanchu.mom.utils; |
| | | |
| | | import cn.hutool.core.lang.UUID; |
| | | import com.deepoove.poi.XWPFTemplate; |
| | | import com.deepoove.poi.config.Configure; |
| | | import com.deepoove.poi.config.ConfigureBuilder; |
| | | import com.deepoove.poi.data.*; |
| | | import com.deepoove.poi.data.style.*; |
| | | import com.deepoove.poi.util.TableTools; |
| | | import com.opencsv.CSVReader; |
| | | import com.yuanchu.mom.dto.Exceldata; |
| | | import com.yuanchu.mom.exception.ErrorException; |
| | | import com.yuanchu.mom.mapper.InsOrderFileMapper; |
| | | import com.yuanchu.mom.mapper.InsOrderMapper; |
| | | import com.yuanchu.mom.mapper.InsSampleMapper; |
| | | import com.yuanchu.mom.pojo.InsOrder; |
| | | import com.yuanchu.mom.pojo.InsOrderFile; |
| | | import com.yuanchu.mom.pojo.InsSample; |
| | | import org.apache.commons.io.IOUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.poi.openxml4j.util.ZipSecureFile; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.apache.poi.ss.usermodel.Row; |
| | | import org.apache.poi.ss.usermodel.Sheet; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.*; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class FuSheUtils { |
| | | @Value("${wordUrl}") |
| | |
| | | @Resource |
| | | InsSampleMapper insSampleMapper; |
| | | |
| | | //近场 |
| | | public void getFuSheWord1(String sonLaboratory, InsOrderFile insOrderFile) { |
| | | //读取excel文件内容 |
| | | String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径 |
| | |
| | | Exceldata exceldata = new Exceldata(); |
| | | Map<Integer, Object> project = new HashMap<>(); |
| | | HashMap<String, Object> datas1 = new HashMap<>(); |
| | | Boolean exitLoop=false; |
| | | HashMap<String, Object> biaozhun = new HashMap<>(); |
| | | Boolean exitLoop = false; |
| | | for (int i = 0; i < workbook.getNumberOfSheets(); i++) { |
| | | String s = ""; |
| | | Sheet sheet = workbook.getSheetAt(i); |
| | |
| | | default: |
| | | System.out.print("NULL\t"); |
| | | } |
| | | } else { |
| | | } |
| | | else { |
| | | switch (cell.getCellType()) { |
| | | case STRING: |
| | | if (cell.getColumnIndex()==1) { |
| | | exitLoop=true; |
| | | if (cell.getColumnIndex() == 1) { |
| | | if (cell.getStringCellValue().equals("指标")) { |
| | | for (Cell cell1 : row) { |
| | | switch (cell1.getCellType()) { |
| | | case STRING: |
| | | biaozhun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getStringCellValue()); |
| | | break; |
| | | case NUMERIC: |
| | | System.out.print(cell1.getNumericCellValue() + "\t"); |
| | | break; |
| | | case BOOLEAN: |
| | | System.out.print(cell1.getBooleanCellValue() + "\t"); |
| | | break; |
| | | case FORMULA: |
| | | System.out.print(cell1.getCellFormula() + "\t"); |
| | | break; |
| | | default: |
| | | System.out.print("NULL\t"); |
| | | } |
| | | } |
| | | } |
| | | exitLoop = true; |
| | | break; |
| | | } |
| | | if (StringUtils.isNotEmpty(s)) { |
| | | datas.put(s, list); |
| | | String value = "zss"; |
| | | switch (row.getCell(1).getCellType()){ |
| | | case STRING: |
| | | value = cell.getStringCellValue(); |
| | | break; |
| | | } |
| | | list = new ArrayList<>(); |
| | | s = cell.getStringCellValue(); |
| | | datas.put(s, cell.getStringCellValue()); |
| | | System.out.print(cell.getStringCellValue() + "\t"); |
| | | if (value.equals("zss")){ |
| | | if (StringUtils.isNotEmpty(s)) { |
| | | datas.put(s, list); |
| | | } |
| | | list = new ArrayList<>(); |
| | | s = cell.getStringCellValue(); |
| | | datas.put(s, cell.getStringCellValue()); |
| | | System.out.print(cell.getStringCellValue() + "\t"); |
| | | } |
| | | break; |
| | | case NUMERIC: |
| | | int columnIndex = cell.getColumnIndex(); |
| | | Object o = project.get(columnIndex); |
| | | map.put(o.toString(), cell.getNumericCellValue()); |
| | | System.out.print(cell.getNumericCellValue() + "\t"); |
| | | int columnIndex = cell.getColumnIndex(); |
| | | Object o = project.get(columnIndex); |
| | | map.put(o.toString(), cell.getNumericCellValue()); |
| | | System.out.print(cell.getNumericCellValue() + "\t"); |
| | | break; |
| | | case BOOLEAN: |
| | | System.out.print(cell.getBooleanCellValue() + "\t"); |
| | |
| | | System.out.print("NULL\t"); |
| | | } |
| | | } |
| | | if (exitLoop){ |
| | | exitLoop=false; |
| | | if (exitLoop) { |
| | | exitLoop = false; |
| | | break; |
| | | } |
| | | if (map.isEmpty()) { |
| | |
| | | } |
| | | } |
| | | } |
| | | list=list.stream().filter(map -> !map.isEmpty()).collect(Collectors.toList()); |
| | | datas.put(s, list); |
| | | map1.put(sheetName, datas); |
| | | datas1.putAll(map1); |
| | |
| | | for (Map<String, Object> number : hashMaps) { |
| | | number.put("端口", s1); |
| | | Double o = (Double) number.get("频率"); |
| | | if (o!=null) { |
| | | if (o != null) { |
| | | floatList.add(o); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | System.out.println(map); |
| | | int size = map.size(); |
| | | for (String s1 : map.keySet()) { |
| | | String o = map.get(s1).toString(); |
| | | List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList()); |
| | |
| | | } |
| | | } |
| | | System.out.println(map); |
| | | createWord(sonLaboratory, document, exceldata, map, insOrderFile); |
| | | createWord(sonLaboratory, document, exceldata, map, biaozhun, insOrderFile); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | |
| | | } |
| | | } |
| | | |
| | | //远场 |
| | | public void getFuSheWord2(String sonLaboratory, InsOrderFile insOrderFile) { |
| | | //读取excel文件内容 |
| | | String excelFilePath = wordUrl + "/" + insOrderFile.getFileUrl(); // 更新为你的文件路径 |
| | | String fileEncoding = "GBK"; // 或其他编码格式,如GBK, ISO-8859-1 等 |
| | | Exceldata exceldata = new Exceldata(); |
| | | HashMap<Integer, Object> project = new HashMap<>(); |
| | | HashMap<String, Object> biaozhun = new HashMap<>(); |
| | | HashMap<String, Object> pingjunzhi = new HashMap<>(); |
| | | HashMap<String, Object> datas1 = new HashMap<>(); |
| | | HashMap<String, Object> map2 = new HashMap<>(); |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | XWPFDocument document = new XWPFDocument(); |
| | | String jiaodu = ""; |
| | | String port = ""; |
| | | try (CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(excelFilePath), fileEncoding))) { |
| | | List<String[]> records = reader.readAll(); |
| | | for (int i = 0; i < records.size(); i++) { |
| | | HashMap<String, Object> map1 = new HashMap<>(); |
| | | HashMap<String, Object> pingjun = new HashMap<>(); |
| | | String[] record = records.get(i); |
| | | |
| | | for (int i1 = 0; i1 < record.length; i1++) { |
| | | String value = record[i1]; |
| | | if (i == 0) { |
| | | project.put(i1, value); |
| | | } |
| | | if (i == 1) { |
| | | biaozhun.put(project.get(i1).toString(), value); |
| | | } |
| | | if (i > 2) { |
| | | if (i1 == 0 && StringUtils.isNotEmpty(value)) { |
| | | |
| | | if (map2.size() != 0) { |
| | | map2.put(port, list); |
| | | datas1.put(jiaodu, map2); |
| | | map2 = new HashMap<>(); |
| | | } |
| | | datas1.put(value, ""); |
| | | jiaodu = value; |
| | | } else if (i1 == 1 && StringUtils.isNotEmpty(value)) { |
| | | if (list.size() != 0) { |
| | | map2.put(port, list); |
| | | list = new ArrayList<>(); |
| | | } |
| | | map2.put(value, ""); |
| | | port = value; |
| | | } else if (StringUtils.isNotEmpty(value)) { |
| | | if (value.equals("最大值") || value.equals("最小值") || value.equals("指标") || value.equals("类别")) { |
| | | break; |
| | | } else if (value.equals("平均值")) { |
| | | for (int i2 = 0; i2 < record.length; i2++) { |
| | | String value1 = record[i2]; |
| | | if (value1.equals("平均值")) { |
| | | continue; |
| | | } |
| | | pingjun.put(project.get(i2).toString(), value1); |
| | | } |
| | | break; |
| | | } |
| | | map1.put(project.get(i1).toString(), value); |
| | | } |
| | | } |
| | | System.out.print(value + " "); |
| | | } |
| | | if (map1.size() != 0) { |
| | | list.add(map1); |
| | | } |
| | | if (pingjun.size() != 0) { |
| | | pingjunzhi.put(jiaodu, pingjun); |
| | | } |
| | | if (i == records.size() - 1) { |
| | | map2.put(port, list); |
| | | datas1.put(jiaodu, map2); |
| | | } |
| | | System.out.println(); |
| | | } |
| | | System.out.println("-----------------"); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | exceldata.setProject(project); |
| | | exceldata.setDataRow(datas1); |
| | | System.out.println(exceldata); |
| | | |
| | | |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | for (String s : datas1.keySet()) { |
| | | Map<String, List<HashMap<String, Object>>> numbers = (Map<String, List<HashMap<String, Object>>>) datas1.get(s); |
| | | for (String s1 : numbers.keySet()) { |
| | | List<HashMap<String, Object>> hashMaps = numbers.get(s1); |
| | | |
| | | List<Integer> floatList = new ArrayList<>(); |
| | | for (Map<String, Object> number : hashMaps) { |
| | | number.put("端口", s1); |
| | | floatList.add(Integer.parseInt((String) number.get("测试频率(MHZ)"))); |
| | | } |
| | | Integer maxValue = Collections.max(floatList); |
| | | Integer minValue = Collections.min(floatList); |
| | | |
| | | if (map.get(minValue + "-" + maxValue + "-" + s) == null) { |
| | | map.put(minValue + "-" + maxValue + "-" + s, s1); |
| | | } else { |
| | | Object o = map.get(minValue + "-" + maxValue + "-" + s); |
| | | map.put(minValue + "-" + maxValue + "-" + s, s1 + "," + o); |
| | | } |
| | | } |
| | | |
| | | } |
| | | System.out.println(map); |
| | | |
| | | int size = map.size(); |
| | | for (String s1 : map.keySet()) { |
| | | String o = map.get(s1).toString(); |
| | | |
| | | List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList()); |
| | | int size1 = -1; |
| | | |
| | | for (String s : datas1.keySet()) { |
| | | Map<String, List<HashMap<String, Object>>> o1 = (Map<String, List<HashMap<String, Object>>>) datas1.get(s); |
| | | for (String s3 : o1.keySet()) { |
| | | List<HashMap<String, Object>> numbers = o1.get(s3); |
| | | for (String s2 : collect) { |
| | | if (s3.equals(s2)) { |
| | | if (numbers.size() > size1) { |
| | | size1 = numbers.size(); |
| | | } |
| | | } |
| | | } |
| | | map.put(s1, o + "," + size1); |
| | | } |
| | | } |
| | | |
| | | } |
| | | System.out.println(map); |
| | | FileInputStream fileInputStream = null; |
| | | Workbook workbook = null; |
| | | |
| | | try { |
| | | createWord2(sonLaboratory, document, exceldata, map, pingjunzhi, biaozhun, insOrderFile); |
| | | fileInputStream = new FileInputStream(new File(excelFilePath)); |
| | | workbook = new XSSFWorkbook(fileInputStream); // 对于 .xlsx 文件 |
| | | XWPFDocument document = new XWPFDocument(); |
| | | for (int i = 0; i < workbook.getNumberOfSheets(); i++) { |
| | | Exceldata exceldata = new Exceldata(); |
| | | HashMap<Integer, Object> project = new HashMap<>(); |
| | | HashMap<String, Object> biaozhun = new HashMap<>(); |
| | | HashMap<String, Object> pingjunzhi = new HashMap<>(); |
| | | HashMap<String, Object> datas1 = new HashMap<>(); |
| | | HashMap<String, Object> map2 = new HashMap<>(); |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | String jiaodu = ""; |
| | | String port = ""; |
| | | Integer count = 0; |
| | | Sheet sheet = workbook.getSheetAt(i); |
| | | Boolean biaoji = false; |
| | | int lastRowNum = sheet.getLastRowNum(); |
| | | for (Row row : sheet) { |
| | | count++; |
| | | HashMap<String, Object> map1 = new HashMap<>(); |
| | | HashMap<String, Object> pingjun = new HashMap<>(); |
| | | for (Cell cell : row) { |
| | | if (row.getRowNum() == 0) { |
| | | switch (cell.getCellType()) { |
| | | case STRING: |
| | | project.put(cell.getColumnIndex(), cell.getStringCellValue()); |
| | | System.out.print(cell.getStringCellValue() + "\t"); |
| | | break; |
| | | case NUMERIC: |
| | | System.out.print(cell.getNumericCellValue() + "\t"); |
| | | break; |
| | | case BOOLEAN: |
| | | System.out.print(cell.getBooleanCellValue() + "\t"); |
| | | break; |
| | | case FORMULA: |
| | | System.out.print(cell.getCellFormula() + "\t"); |
| | | break; |
| | | default: |
| | | System.out.print("NULL\t"); |
| | | } |
| | | } else if (row.getRowNum() > 2) { |
| | | if (cell.getColumnIndex() == 0 && StringUtils.isNotEmpty(cell.getStringCellValue())) { |
| | | if (map2.size() != 0) { |
| | | map2.put(port, list); |
| | | datas1.put(jiaodu, map2); |
| | | map2 = new HashMap<>(); |
| | | } |
| | | datas1.put(cell.getStringCellValue(), ""); |
| | | jiaodu = cell.getStringCellValue(); |
| | | } else if (cell.getColumnIndex() == 1 && StringUtils.isNotEmpty(cell.getStringCellValue())) { |
| | | if (list.size() != 0) { |
| | | map2.put(port, list); |
| | | list = new ArrayList<>(); |
| | | } |
| | | map2.put(cell.getStringCellValue(), ""); |
| | | port = cell.getStringCellValue(); |
| | | |
| | | } else { |
| | | switch (cell.getCellType()) { |
| | | case STRING: |
| | | String value = cell.getStringCellValue(); |
| | | if (value.equals("avg")) { |
| | | for (Cell cell1 : row) { |
| | | switch (cell1.getCellType()) { |
| | | case STRING: |
| | | |
| | | break; |
| | | case NUMERIC: |
| | | pingjun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getNumericCellValue()); |
| | | System.out.print(cell1.getNumericCellValue() + "\t"); |
| | | break; |
| | | case BOOLEAN: |
| | | System.out.print(cell1.getBooleanCellValue() + "\t"); |
| | | break; |
| | | case FORMULA: |
| | | String cellFormula = cell1.getCellFormula(); |
| | | Double numericCellValue = cell1.getNumericCellValue(); |
| | | pingjun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getNumericCellValue()); |
| | | System.out.print(cellFormula); |
| | | break; |
| | | default: |
| | | System.out.print("NULL\t"); |
| | | } |
| | | |
| | | } |
| | | } else if (value.equals("指标")) { |
| | | for (Cell cell1 : row) { |
| | | switch (cell1.getCellType()) { |
| | | case STRING: |
| | | biaozhun.put(project.get(cell1.getColumnIndex()).toString(), cell1.getStringCellValue()); |
| | | break; |
| | | case NUMERIC: |
| | | System.out.print(cell1.getNumericCellValue() + "\t"); |
| | | break; |
| | | case BOOLEAN: |
| | | System.out.print(cell1.getBooleanCellValue() + "\t"); |
| | | break; |
| | | case FORMULA: |
| | | System.out.print(cell1.getCellFormula() + "\t"); |
| | | break; |
| | | default: |
| | | System.out.print("NULL\t"); |
| | | } |
| | | } |
| | | } else { |
| | | biaoji = true; |
| | | } |
| | | break; |
| | | case NUMERIC: |
| | | map1.put(project.get(cell.getColumnIndex()).toString(), cell.getNumericCellValue()); |
| | | System.out.print(cell.getNumericCellValue() + "\t"); |
| | | break; |
| | | case BOOLEAN: |
| | | System.out.print(cell.getBooleanCellValue() + "\t"); |
| | | break; |
| | | case FORMULA: |
| | | System.out.print(cell.getCellFormula() + "\t"); |
| | | break; |
| | | default: |
| | | System.out.print("NULL\t"); |
| | | } |
| | | } |
| | | } |
| | | if (biaoji) { |
| | | biaoji = false; |
| | | break; |
| | | } |
| | | } |
| | | if (map1.size() != 0) { |
| | | list.add(map1); |
| | | } |
| | | if (pingjun.size() != 0) { |
| | | pingjunzhi.put(jiaodu, pingjun); |
| | | } |
| | | |
| | | if (count == lastRowNum + 1) { |
| | | map2.put(port, list); |
| | | datas1.put(jiaodu, map2); |
| | | } |
| | | System.out.println(); |
| | | } |
| | | exceldata.setProject(project); |
| | | exceldata.setDataRow(datas1); |
| | | System.out.println(exceldata); |
| | | |
| | | |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | for (String s : datas1.keySet()) { |
| | | Map<String, List<HashMap<String, Object>>> numbers = (Map<String, List<HashMap<String, Object>>>) datas1.get(s); |
| | | for (String s1 : numbers.keySet()) { |
| | | List<HashMap<String, Object>> hashMaps = numbers.get(s1); |
| | | List<Integer> floatList = new ArrayList<>(); |
| | | for (Map<String, Object> number : hashMaps) { |
| | | number.put("端口", s1); |
| | | Double o = (Double) number.get("测试频率(MHZ)"); |
| | | floatList.add(o.intValue()); |
| | | } |
| | | Integer maxValue = Collections.max(floatList); |
| | | Integer minValue = Collections.min(floatList); |
| | | |
| | | if (map.get(minValue + "-" + maxValue + "-" + s) == null) { |
| | | map.put(minValue + "-" + maxValue + "-" + s, s1); |
| | | } else { |
| | | Object o = map.get(minValue + "-" + maxValue + "-" + s); |
| | | map.put(minValue + "-" + maxValue + "-" + s, s1 + "," + o); |
| | | } |
| | | } |
| | | |
| | | } |
| | | System.out.println(map); |
| | | |
| | | for (String s1 : map.keySet()) { |
| | | String o = map.get(s1).toString(); |
| | | List<String> collect = Arrays.stream(o.split(",")).collect(Collectors.toList()); |
| | | int size1 = -1; |
| | | for (String s : datas1.keySet()) { |
| | | Map<String, List<HashMap<String, Object>>> o1 = (Map<String, List<HashMap<String, Object>>>) datas1.get(s); |
| | | for (String s3 : o1.keySet()) { |
| | | List<HashMap<String, Object>> numbers = o1.get(s3); |
| | | for (String s2 : collect) { |
| | | if (s3.equals(s2)) { |
| | | if (numbers.size() > size1) { |
| | | size1 = numbers.size(); |
| | | } |
| | | } |
| | | } |
| | | map.put(s1, o + "," + size1); |
| | | } |
| | | } |
| | | |
| | | } |
| | | System.out.println(map); |
| | | |
| | | createWord2(sonLaboratory, document, exceldata, map, pingjunzhi, biaozhun, insOrderFile); |
| | | |
| | | } |
| | | // 输出到文件 |
| | | InsSample insSample = insSampleMapper.selectById(insOrderFile.getInsSampleId()); |
| | | String[] split = insOrderFile.getFileName().split("\\."); |
| | | String name = insOrderFile.getFileName().replace("#", "&").substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length())); |
| | | String url = UUID.randomUUID() + "_" + insSample.getSampleCode() + "_" + sonLaboratory + name + "解析的辐射站点报告.docx"; |
| | | url = url.replace("#", "&"); |
| | | FileOutputStream out = new FileOutputStream(wordUrl + "/" + url); |
| | | document.write(out); |
| | | out.close(); |
| | | document.close(); |
| | | InsOrderFile orderFile = new InsOrderFile(); |
| | | orderFile.setInsOrderId(insOrderFile.getInsOrderId()); |
| | | orderFile.setInsSampleId(insOrderFile.getInsSampleId()); |
| | | orderFile.setFileUrl(url); |
| | | orderFile.setType(2); |
| | | orderFile.setFileName(insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | orderFile.setSonLaboratory(sonLaboratory); |
| | | insOrderFileMapper.insert(orderFile); |
| | | |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } finally { |
| | | // 关闭资源 |
| | | try { |
| | | if (workbook != null) { |
| | | workbook.close(); |
| | | } |
| | | if (fileInputStream != null) { |
| | | fileInputStream.close(); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | public void createWord(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, InsOrderFile insOrderFile) throws IOException { |
| | | //近场 |
| | | public void createWord(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, HashMap<String, Object> bz, InsOrderFile insOrderFile) throws IOException { |
| | | int size = 1; |
| | | XWPFParagraph paragraphs = document.createParagraph(); |
| | | XWPFRun runs = paragraphs.createRun(); |
| | |
| | | XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0); |
| | | paragraph18.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run18 = paragraph18.createRun(); |
| | | run18.setText("频段: " + result1 + "MHz " + "下倾角" + result); |
| | | run18.setText("下倾角" + result); |
| | | List<String> collect = Arrays.stream(split).collect(Collectors.toList()); |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | // 对所有的键聚合 |
| | |
| | | aggregatedMap.get(key).add(item); |
| | | } |
| | | } |
| | | int rowNum = 2; |
| | | for (String s2 : aggregatedMap.keySet()) { |
| | | if (s2.equals("端口") || s2.equals("频率")) { |
| | | continue; |
| | | } |
| | | List<Map<String, Object>> mapList = aggregatedMap.get(s2); |
| | | // 创建一个表格 |
| | | XWPFTable table = document.createTable(row, cell); |
| | | table.setWidth("100%"); |
| | | int checkItemRowNum = row; |
| | | for (int i = 0; i < checkItemRowNum; i++) { |
| | | XWPFTableRow tableRow = table1.createRow(); |
| | | for (XWPFTableCell tableCell : tableRow.getTableCells()) { |
| | | // 设置单元格内容居中对齐 |
| | | for (XWPFParagraph paragraph : tableCell.getParagraphs()) { |
| | | paragraph.setAlignment(ParagraphAlignment.CENTER); |
| | | } |
| | | } |
| | | } |
| | | //垂直 |
| | | mergeCellsVertically(table, 0, 0, row - 1); |
| | | mergeCellsVertically(table, 1, 0, row - 1); |
| | | mergeCellsVertically(table, 2, 0, row - 1); |
| | | mergeCellsVertically(table, 3, 0, row - 1); |
| | | mergeCellsVertically(table, 4, 0, 1); |
| | | mergeCellsVertically(table, cell - 1, 0, 1); |
| | | mergeCellsVertically(table, cell - 1, 2, row - 2); |
| | | mergeCellsVertically(table1, 0, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 1, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 2, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 3, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 4, rowNum, rowNum + 1); |
| | | mergeCellsVertically(table1, cell - 1, rowNum, rowNum + 1); |
| | | mergeCellsVertically(table1, cell - 1, rowNum + 2, rowNum + checkItemRowNum - 2); |
| | | //水平 |
| | | mergeCellsHorizontally(table, 0, 5, cell - 2); |
| | | mergeCellsHorizontally(table, row - 1, 5, cell - 2); |
| | | |
| | | table.setInsideHBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 内部水平边框 |
| | | table.setInsideVBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 内部垂直边框 |
| | | table.setBottomBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 下边框 |
| | | table.setTopBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 上边框 |
| | | table.setLeftBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 左边框 |
| | | table.setRightBorder(XWPFTable.XWPFBorderType.SINGLE, 2, 0, "000000"); // 右边框 |
| | | mergeCellsHorizontally(table1, rowNum, 5, cell - 2); |
| | | mergeCellsHorizontally(table1, rowNum + checkItemRowNum - 1, 5, cell - 2); |
| | | |
| | | // 设置单元格文本并居中 |
| | | XWPFParagraph paragraph = table.getRow(0).getCell(0).getParagraphArray(0); |
| | | XWPFParagraph paragraph = table1.getRow(rowNum).getCell(0).getParagraphArray(0); |
| | | paragraph.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run = paragraph.createRun(); |
| | | run.setText(String.valueOf(size)); |
| | | XWPFParagraph paragraph1 = table.getRow(0).getCell(1).getParagraphArray(0); |
| | | XWPFParagraph paragraph1 = table1.getRow(rowNum).getCell(1).getParagraphArray(0); |
| | | paragraph1.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run1 = paragraph1.createRun(); |
| | | run1.setText(s2); |
| | | // 调用方法提取第一个括号内的内容 |
| | | String firstContent = extractFirstContentFromBrackets(s2); |
| | | if (firstContent != null) { |
| | | XWPFParagraph paragraph2 = table.getRow(0).getCell(2).getParagraphArray(0); |
| | | paragraph2.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run2 = paragraph2.createRun(); |
| | | run2.setText(firstContent); |
| | | // 单位 |
| | | XWPFParagraph paragraph2 = table1.getRow(rowNum).getCell(2).getParagraphArray(0); |
| | | XWPFRun run2 = paragraph2.createRun(); |
| | | if (s2.contains("增益")) { |
| | | run2.setText("dBi"); |
| | | } else if (s2.contains("波瓣宽度") || s2.contains("波束宽度") || s2.contains("下倾角")) { |
| | | run2.setText("°"); |
| | | } else if (s2.contains("前后比") || s2.contains("交叉极化") || s2.contains("旁瓣抑制") || s2.contains("下降") || s2.contains("零点填充") || s2.contains("副瓣电平")) { |
| | | run2.setText("dB"); |
| | | } else if (s2.contains("效率") || s2.contains("扇区占比")) { |
| | | run2.setText("%"); |
| | | } else { |
| | | System.out.println("没有找到括号内的内容。"); |
| | | run2.setText(""); |
| | | } |
| | | XWPFParagraph paragraph3 = table.getRow(0).getCell(3).getParagraphArray(0); |
| | | XWPFParagraph paragraph3 = table1.getRow(rowNum).getCell(3).getParagraphArray(0); |
| | | paragraph3.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run3 = paragraph3.createRun(); |
| | | run3.setText("/"); |
| | | XWPFParagraph paragraph4 = table.getRow(0).getCell(4).getParagraphArray(0); |
| | | String checkItemStandardStr = ""; |
| | | if (bz.get(s2) != null) { |
| | | run3.setText(bz.get(s2).toString()); |
| | | checkItemStandardStr = bz.get(s2).toString(); |
| | | } else { |
| | | run3.setText(""); |
| | | } |
| | | XWPFParagraph paragraph4 = table1.getRow(rowNum).getCell(4).getParagraphArray(0); |
| | | paragraph4.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run4 = paragraph4.createRun(); |
| | | run4.setText("频率(MHz)"); |
| | | XWPFParagraph paragraph5 = table.getRow(0).getCell(5).getParagraphArray(0); |
| | | XWPFParagraph paragraph5 = table1.getRow(rowNum).getCell(5).getParagraphArray(0); |
| | | paragraph5.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run5 = paragraph5.createRun(); |
| | | run5.setText("端口"); |
| | | XWPFParagraph paragraph6 = table.getRow(0).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFParagraph paragraph6 = table1.getRow(rowNum).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph6.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run6 = paragraph6.createRun(); |
| | | run6.setText("/"); |
| | | XWPFParagraph paragraph7 = table.getRow(2).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph7.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run7 = paragraph7.createRun(); |
| | | run7.setText("合格"); |
| | | XWPFParagraph paragraph8 = table.getRow(row - 1).getCell(4).getParagraphArray(0); |
| | | run6.setText("判定"); |
| | | // XWPFParagraph paragraph7 = table1.getRow(rowNum + 2 ).getCell(cell - 1).getParagraphArray(0); |
| | | // paragraph7.setAlignment(ParagraphAlignment.CENTER); |
| | | // XWPFRun run7 = paragraph7.createRun(); |
| | | // run7.setText("合格"); |
| | | XWPFParagraph paragraph8 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(4).getParagraphArray(0); |
| | | paragraph8.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run8 = paragraph8.createRun(); |
| | | run8.setText("平均值"); |
| | | XWPFParagraph paragraph9 = table.getRow(row - 1).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFParagraph paragraph9 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph9.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run9 = paragraph9.createRun(); |
| | | run9.setText("/"); |
| | | run9.setText(""); |
| | | for (int i = 0; i < collect.size(); i++) { |
| | | String s3 = collect.get(i); |
| | | if (s3.contains("端口")) { |
| | | XWPFParagraph paragraph10 = table.getRow(1).getCell(5 + i).getParagraphArray(0); |
| | | XWPFParagraph paragraph10 = table1.getRow(rowNum + 1).getCell(5 + i).getParagraphArray(0); |
| | | paragraph10.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | run10.setText(s3); |
| | | } |
| | | } |
| | | Map<Double, List<Map<String, Object>>> group = mapList.stream() |
| | | .collect(Collectors.groupingBy(item -> (Double) item.get("频率"))); |
| | | Map<BigDecimal, List<Map<String, Object>>> group = mapList.stream() |
| | | .collect(Collectors.groupingBy(item -> { |
| | | BigDecimal value = new BigDecimal(String.valueOf(item.get("频率"))); |
| | | if (value.scale() <= 0 || value.stripTrailingZeros().scale() <= 0) { |
| | | // 没有小数部分,返回整数字符串 |
| | | return new BigDecimal(value.intValue()); |
| | | } else { |
| | | // 有小数部分,返回原始值的字符串形式 |
| | | return value; |
| | | } |
| | | })); |
| | | group = new TreeMap<>(group); |
| | | int hang = 2; |
| | | Double count = 0.0; |
| | | for (Double aDouble : group.keySet()) { |
| | | // 定义 是否合格标记 |
| | | boolean passFlag = true; |
| | | // 解析判定条件并解析比较标准值 0 无需判定 1 区间判定 2 小于等于 3 大于等于 4 大于 5 小于 |
| | | int checkType = 0; |
| | | double firstParam = 0.0; |
| | | double secondParam = 0.0 ; |
| | | checkItemStandardStr = checkItemStandardStr.trim(); |
| | | if(checkItemStandardStr.contains("~") ){ |
| | | checkType = 1; |
| | | String[] params = checkItemStandardStr.split("~"); |
| | | if(null != params && params.length == 2){ |
| | | firstParam = Double.valueOf(params[0]); |
| | | secondParam = Double.valueOf(params[1]); |
| | | } |
| | | } else if(checkItemStandardStr.contains("-") && !(checkItemStandardStr.contains("≤") || checkItemStandardStr.contains("≥") || checkItemStandardStr.contains(">") || checkItemStandardStr.contains("<"))){ |
| | | checkType = 1; |
| | | String[] params = checkItemStandardStr.split("-"); |
| | | if(null != params && params.length == 2){ |
| | | firstParam = Double.valueOf(params[0]); |
| | | secondParam = Double.valueOf(params[1]); |
| | | } |
| | | } else if (checkItemStandardStr.contains("≤")) { |
| | | checkType = 2; |
| | | String[] params = checkItemStandardStr.split("≤"); |
| | | if(null != params && params.length == 1){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | }else if(checkItemStandardStr.contains("≥")){ |
| | | checkType = 3; |
| | | String[] params = checkItemStandardStr.split("≥"); |
| | | if(null != params && params.length == 2){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | }else if(checkItemStandardStr.contains(">")){ |
| | | checkType = 4; |
| | | String[] params = checkItemStandardStr.split(">"); |
| | | if(null != params && params.length == 2){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | }else if(checkItemStandardStr.contains("<")){ |
| | | checkType = 5; |
| | | String[] params = checkItemStandardStr.split("<"); |
| | | if(null != params && params.length == 2){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | } |
| | | for (BigDecimal aDouble : group.keySet()) { |
| | | List<Map<String, Object>> mapList1 = group.get(aDouble); |
| | | for (Map<String, Object> stringObjectMap : mapList1) { |
| | | String port = stringObjectMap.get("端口").toString(); |
| | | for (int i = 5; i < cell - 1; i++) { |
| | | String text = table.getRow(1).getCell(i).getText(); |
| | | String text = table1.getRow(rowNum + 1).getCell(i).getText(); |
| | | if (text.equals(port)) { |
| | | XWPFParagraph paragraph10 = table.getRow(hang).getCell(i).getParagraphArray(0); |
| | | XWPFParagraph paragraph10 = table1.getRow(hang + rowNum).getCell(i).getParagraphArray(0); |
| | | paragraph10.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | count = (Double) stringObjectMap.get(s2) + count; |
| | | String project = stringObjectMap.get(s2).toString(); |
| | | run10.setText(project); |
| | | double value = Double.parseDouble(stringObjectMap.get(s2).toString()); |
| | | count = value + count; |
| | | // 数据判断 |
| | | if(checkType == 1){ |
| | | if(!(value >= firstParam && value <= secondParam)){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 2){ |
| | | if(value >= firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 3){ |
| | | if(value <= firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 4){ |
| | | if(value < firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 5){ |
| | | if(value > firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | } |
| | | run10.setText(String.format("%.2f", value)); |
| | | } |
| | | } |
| | | } |
| | | XWPFParagraph paragraph10 = table.getRow(hang).getCell(4).getParagraphArray(0); |
| | | XWPFParagraph paragraph10 = table1.getRow(hang+rowNum).getCell(4).getParagraphArray(0); |
| | | paragraph10.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | run10.setText(String.valueOf(aDouble)); |
| | | hang++; |
| | | } |
| | | XWPFParagraph paragraph11 = table.getRow(row - 1).getCell(5).getParagraphArray(0); |
| | | // 汇总结果 |
| | | if(checkType != 0){ |
| | | XWPFParagraph paragraph10 = table1.getRow(rowNum+2).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | if(passFlag){ |
| | | run10.setText("合格"); |
| | | }else { |
| | | run10.setText("不合格"); |
| | | } |
| | | } |
| | | |
| | | XWPFParagraph paragraph11 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(5).getParagraphArray(0); |
| | | paragraph11.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run11 = paragraph11.createRun(); |
| | | double v = count / (Double.parseDouble(s1.toString()) * Double.parseDouble(i1.toString())); |
| | | run11.setText(String.format("%.2f", v)); |
| | | rowNum += checkItemRowNum; |
| | | size++; |
| | | } |
| | | } |
| | |
| | | try { |
| | | InsSample insSample = insSampleMapper.selectById(insOrderFile.getInsSampleId()); |
| | | String[] split = insOrderFile.getFileName().split("\\."); |
| | | String name = insOrderFile.getFileName().replace('#','&').substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length())); |
| | | FileOutputStream out = new FileOutputStream(wordUrl + "/" + UUID.randomUUID() + "_" + insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | String name = insOrderFile.getFileName().replace('#', '&').substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length())); |
| | | String url = UUID.randomUUID() + "_" + insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"; |
| | | url.replace("#", "&"); |
| | | FileOutputStream out = new FileOutputStream(wordUrl + "/" + url); |
| | | document.write(out); |
| | | out.close(); |
| | | document.close(); |
| | | InsOrderFile orderFile = new InsOrderFile(); |
| | | orderFile.setInsOrderId(insOrderFile.getInsOrderId()); |
| | | orderFile.setInsSampleId(insOrderFile.getInsSampleId()); |
| | | orderFile.setFileUrl(UUID.randomUUID() + "_" + insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | orderFile.setFileUrl(url); |
| | | orderFile.setType(2); |
| | | orderFile.setFileName(insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | orderFile.setSonLaboratory(sonLaboratory); |
| | |
| | | } |
| | | } |
| | | |
| | | //远场 |
| | | public void createWord2(String sonLaboratory, XWPFDocument document, Exceldata exceldata, HashMap<String, Object> map, HashMap<String, Object> pj, HashMap<String, Object> bz, InsOrderFile insOrderFile) throws IOException { |
| | | int size = 1; |
| | | for (String s : map.keySet()) { |
| | | Map<String, Object> dataRow = exceldata.getDataRow(); |
| | | String result = s.substring(s.lastIndexOf("-") + 1); |
| | | String result1 = s.substring(0, s.lastIndexOf("-")); |
| | | String o = map.get(s).toString(); |
| | | String[] split = o.split(","); |
| | | Integer s1 = Integer.parseInt(split[split.length - 1]); |
| | |
| | | HashMap<String, Object> o2 = (HashMap<String, Object>) pj.get(result); |
| | | |
| | | XWPFTable table1 = document.createTable(2, cell); |
| | | table1.setWidth("100%"); |
| | | |
| | | mergeCellsHorizontally(table1, 1, 0, cell - 1); |
| | | mergeCellsHorizontally(table1, 0, 4, cell - 2); |
| | | |
| | | XWPFParagraph paragraph12 = table1.getRow(0).getCell(0).getParagraphArray(0); |
| | | paragraph12.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run12 = paragraph12.createRun(); |
| | | run12.setText("序号"); |
| | | |
| | | XWPFParagraph paragraph13 = table1.getRow(0).getCell(1).getParagraphArray(0); |
| | | paragraph13.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run13 = paragraph13.createRun(); |
| | | run13.setText("检验项目"); |
| | | |
| | | XWPFParagraph paragraph14 = table1.getRow(0).getCell(2).getParagraphArray(0); |
| | | paragraph14.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run14 = paragraph14.createRun(); |
| | | run14.setText("单位"); |
| | | |
| | | XWPFParagraph paragraph15 = table1.getRow(0).getCell(3).getParagraphArray(0); |
| | | paragraph15.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run15 = paragraph15.createRun(); |
| | | run15.setText("标准要求"); |
| | | |
| | | XWPFParagraph paragraph16 = table1.getRow(0).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph16.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run16 = paragraph16.createRun(); |
| | | run16.setText("检验结论"); |
| | | |
| | | XWPFParagraph paragraph17 = table1.getRow(0).getCell(4).getParagraphArray(0); |
| | | paragraph17.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run17 = paragraph17.createRun(); |
| | | run17.setText("检验结果"); |
| | | |
| | | XWPFParagraph paragraph18 = table1.getRow(1).getCell(0).getParagraphArray(0); |
| | | XWPFRun run18 = paragraph18.createRun(); |
| | | run18.setText("频段: " + result1 + "MHz " + "下倾角" + result); |
| | | run18.setText("下倾角" + result); |
| | | |
| | | |
| | | List<String> collect = Arrays.stream(split).collect(Collectors.toList()); |
| | | |
| | | int size1 = 0; |
| | | collect.sort((o1, o21) -> Integer.parseInt(o1.substring((o1.length() - 1))) - Integer.parseInt(o21.substring(o21.length() - 1))); |
| | | |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | |
| | |
| | | aggregatedMap.get(key).add(item); |
| | | } |
| | | } |
| | | |
| | | |
| | | // 初始化行数 |
| | | int rowNum = 2; |
| | | for (String s2 : aggregatedMap.keySet()) { |
| | | if (s2.equals("端口") || s2.equals("测试频率(MHZ)")) { |
| | | continue; |
| | | } |
| | | List<Map<String, Object>> mapList = aggregatedMap.get(s2); |
| | | // 创建一个表格 |
| | | |
| | | XWPFTable table = document.createTable(row, cell); |
| | | table.setWidth("100%"); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /* // 合并单元格 |
| | | mergeCellsHorizontally(table, 0, 0, 7);*/ |
| | | |
| | | |
| | | int checkItemRowNum = row; |
| | | for (int i = 0; i < checkItemRowNum; i++) { |
| | | // 创建新行 并设置居中 |
| | | XWPFTableRow tableRow = table1.createRow(); |
| | | for (XWPFTableCell tableCell : tableRow.getTableCells()) { |
| | | // 设置单元格内容居中对齐 |
| | | for (XWPFParagraph paragraph : tableCell.getParagraphs()) { |
| | | paragraph.setAlignment(ParagraphAlignment.CENTER); |
| | | } |
| | | } |
| | | } |
| | | // XWPFTable table = document.createTable(row, cell); |
| | | //垂直 |
| | | mergeCellsVertically(table, 0, 0, row - 1); |
| | | mergeCellsVertically(table, 1, 0, row - 1); |
| | | mergeCellsVertically(table, 2, 0, row - 1); |
| | | mergeCellsVertically(table, 3, 0, row - 1); |
| | | mergeCellsVertically(table, 4, 0, 1); |
| | | mergeCellsVertically(table, cell - 1, 0, 1); |
| | | mergeCellsVertically(table, cell - 1, 2, row - 2); |
| | | mergeCellsVertically(table1, 0, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 1, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 2, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 3, rowNum, rowNum + checkItemRowNum - 1); |
| | | mergeCellsVertically(table1, 4, rowNum, rowNum+1); |
| | | mergeCellsVertically(table1, cell - 1, rowNum, rowNum+1); |
| | | mergeCellsVertically(table1, cell - 1, rowNum+2, rowNum + checkItemRowNum - 1); |
| | | //水平 |
| | | mergeCellsHorizontally(table, 0, 5, cell - 2); |
| | | mergeCellsHorizontally(table, row - 1, 5, cell - 2); |
| | | mergeCellsHorizontally(table1, rowNum, 5, cell - 2); |
| | | mergeCellsHorizontally(table1, rowNum + checkItemRowNum - 1, 5, cell - 2); |
| | | |
| | | // 设置单元格文本并居中 |
| | | XWPFParagraph paragraph = table.getRow(0).getCell(0).getParagraphArray(0); |
| | | XWPFParagraph paragraph = table1.getRow(rowNum).getCell(0).getParagraphArray(0); |
| | | XWPFRun run = paragraph.createRun(); |
| | | run.setText(String.valueOf(size)); |
| | | |
| | | |
| | | XWPFParagraph paragraph1 = table.getRow(0).getCell(1).getParagraphArray(0); |
| | | XWPFParagraph paragraph1 = table1.getRow(rowNum).getCell(1).getParagraphArray(0); |
| | | XWPFRun run1 = paragraph1.createRun(); |
| | | run1.setText(s2); |
| | | |
| | | // 调用方法提取第一个括号内的内容 |
| | | String firstContent = extractFirstContentFromBrackets(s2); |
| | | if (firstContent != null) { |
| | | XWPFParagraph paragraph2 = table.getRow(0).getCell(2).getParagraphArray(0); |
| | | XWPFRun run2 = paragraph2.createRun(); |
| | | run2.setText(firstContent); |
| | | // 单位 |
| | | XWPFParagraph paragraph2 = table1.getRow(rowNum).getCell(2).getParagraphArray(0); |
| | | XWPFRun run2 = paragraph2.createRun(); |
| | | if (s2.contains("增益")) { |
| | | run2.setText("dBi"); |
| | | } else if (s2.contains("波瓣宽度") || s2.contains("波束宽度") || s2.contains("下倾角")) { |
| | | run2.setText("°"); |
| | | } else if (s2.contains("前后比") || s2.contains("交叉极化") || s2.contains("旁瓣抑制") || s2.contains("下降") || s2.contains("零点填充") || s2.contains("副瓣电平")) { |
| | | run2.setText("dB"); |
| | | } else if (s2.contains("效率") || s2.contains("扇区占比")) { |
| | | run2.setText("%"); |
| | | } else { |
| | | System.out.println("没有找到括号内的内容。"); |
| | | run2.setText(""); |
| | | } |
| | | |
| | | |
| | | XWPFParagraph paragraph3 = table.getRow(0).getCell(3).getParagraphArray(0); |
| | | // 定义改检查项标准值 |
| | | String checkItemStandardStr = ""; |
| | | XWPFParagraph paragraph3 = table1.getRow(rowNum).getCell(3).getParagraphArray(0); |
| | | XWPFRun run3 = paragraph3.createRun(); |
| | | run3.setText(bz.get(s2).toString()); |
| | | if (bz.get(s2) != null) { |
| | | run3.setText(bz.get(s2).toString()); |
| | | checkItemStandardStr = bz.get(s2).toString(); |
| | | } else run3.setText(""); |
| | | |
| | | XWPFParagraph paragraph4 = table.getRow(0).getCell(4).getParagraphArray(0); |
| | | |
| | | XWPFParagraph paragraph4 = table1.getRow(rowNum).getCell(4).getParagraphArray(0); |
| | | paragraph4.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run4 = paragraph4.createRun(); |
| | | run4.setText("频率(MHz)"); |
| | | |
| | | XWPFParagraph paragraph5 = table.getRow(0).getCell(5).getParagraphArray(0); |
| | | XWPFParagraph paragraph5 = table1.getRow(rowNum).getCell(5).getParagraphArray(0); |
| | | paragraph5.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run5 = paragraph5.createRun(); |
| | | run5.setText("端口"); |
| | | |
| | | XWPFParagraph paragraph6 = table.getRow(0).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFParagraph paragraph6 = table1.getRow(rowNum).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph6.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run6 = paragraph6.createRun(); |
| | | run6.setText("/"); |
| | | run6.setText("判定"); |
| | | |
| | | XWPFParagraph paragraph7 = table.getRow(1).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFParagraph paragraph7 = table1.getRow(rowNum+1).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph7.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run7 = paragraph7.createRun(); |
| | | run7.setText("合格"); |
| | | |
| | | |
| | | XWPFParagraph paragraph8 = table.getRow(row - 1).getCell(4).getParagraphArray(0); |
| | | XWPFParagraph paragraph8 = table1.getRow(rowNum+checkItemRowNum - 1).getCell(4).getParagraphArray(0); |
| | | paragraph8.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run8 = paragraph8.createRun(); |
| | | run8.setText("平均值"); |
| | | |
| | | XWPFParagraph paragraph9 = table.getRow(row - 1).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFParagraph paragraph9 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(cell - 1).getParagraphArray(0); |
| | | paragraph9.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run9 = paragraph9.createRun(); |
| | | run9.setText("/"); |
| | | run9.setText(""); |
| | | |
| | | for (int i = 0; i < collect.size(); i++) { |
| | | for (int i = 0; i < collect.size() - 1; i++) { |
| | | String s3 = collect.get(i); |
| | | if (s3.contains("端口") || s3.contains("P")) { |
| | | XWPFParagraph paragraph10 = table.getRow(1).getCell(5 + i).getParagraphArray(0); |
| | | XWPFParagraph paragraph10 = table1.getRow(rowNum+1).getCell(5 + i).getParagraphArray(0); |
| | | paragraph10.setAlignment(ParagraphAlignment.CENTER); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | run10.setText(s3); |
| | | } |
| | | } |
| | | |
| | | Map<Integer, List<Map<String, Object>>> group = mapList.stream() |
| | | .collect(Collectors.groupingBy(item -> Integer.parseInt(item.get("测试频率(MHZ)").toString()))); |
| | | Map<BigDecimal, List<Map<String, Object>>> group = mapList.stream() |
| | | .collect(Collectors.groupingBy(item -> { |
| | | BigDecimal value = new BigDecimal(String.valueOf(item.get("测试频率(MHZ)"))); |
| | | if (value.scale() <= 0 || value.stripTrailingZeros().scale() <= 0) { |
| | | // 没有小数部分,返回整数字符串 |
| | | return new BigDecimal(value.intValue()); |
| | | } else { |
| | | // 有小数部分,返回原始值的字符串形式 |
| | | return value; |
| | | } |
| | | })); |
| | | |
| | | |
| | | int hang = 2; |
| | | Double count = 0.0; |
| | | for (Integer aDouble : group.keySet()) { |
| | | // 定义 是否合格标记 |
| | | boolean passFlag = true; |
| | | // 解析判定条件并解析比较标准值 0 无需判定 1 区间判定 2 小于等于 3 大于等于 |
| | | int checkType = 0; |
| | | double firstParam = 0.0; |
| | | double secondParam = 0.0 ; |
| | | checkItemStandardStr = checkItemStandardStr.trim(); |
| | | if(checkItemStandardStr.contains("~") ){ |
| | | checkType = 1; |
| | | String[] params = checkItemStandardStr.split("~"); |
| | | if(null != params && params.length == 2){ |
| | | firstParam = Double.valueOf(params[0]); |
| | | secondParam = Double.valueOf(params[1]); |
| | | } |
| | | } else if(checkItemStandardStr.contains("-") && !(checkItemStandardStr.contains("≤") || checkItemStandardStr.contains("≥") || checkItemStandardStr.contains(">") || checkItemStandardStr.contains("<"))){ |
| | | checkType = 1; |
| | | String[] params = checkItemStandardStr.split("-"); |
| | | if(null != params && params.length == 2){ |
| | | firstParam = Double.valueOf(params[0]); |
| | | secondParam = Double.valueOf(params[1]); |
| | | } |
| | | } else if (checkItemStandardStr.contains("≤")) { |
| | | checkType = 2; |
| | | String[] params = checkItemStandardStr.split("≤"); |
| | | if(null != params && params.length == 1){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | }else if(checkItemStandardStr.contains("≥")){ |
| | | checkType = 3; |
| | | String[] params = checkItemStandardStr.split("≥"); |
| | | if(null != params && params.length == 2){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | }else if(checkItemStandardStr.contains(">")){ |
| | | checkType = 4; |
| | | String[] params = checkItemStandardStr.split(">"); |
| | | if(null != params && params.length == 2){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | }else if(checkItemStandardStr.contains("<")){ |
| | | checkType = 5; |
| | | String[] params = checkItemStandardStr.split("<"); |
| | | if(null != params && params.length == 2){ |
| | | if(params[1].contains("%")){ |
| | | firstParam = Double.valueOf(params[1].substring(0,params[1].length()-1))/100; |
| | | }else{ |
| | | firstParam = Double.valueOf(params[1]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (BigDecimal aDouble : group.keySet()) { |
| | | List<Map<String, Object>> mapList1 = group.get(aDouble); |
| | | for (Map<String, Object> stringObjectMap : mapList1) { |
| | | String port = stringObjectMap.get("端口").toString(); |
| | | for (int i = 5; i < cell - 1; i++) { |
| | | String text = table.getRow(1).getCell(i).getText(); |
| | | String text = table1.getRow(rowNum+1).getCell(i).getText(); |
| | | if (text.equals(port)) { |
| | | XWPFParagraph paragraph10 = table.getRow(hang).getCell(i).getParagraphArray(0); |
| | | XWPFParagraph paragraph10 = table1.getRow(hang+rowNum).getCell(i).getParagraphArray(0); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | count = Double.parseDouble(stringObjectMap.get(s2).toString()) + count; |
| | | String project = stringObjectMap.get(s2).toString(); |
| | | run10.setText(project); |
| | | double value = Double.parseDouble(stringObjectMap.get(s2).toString()); |
| | | count = value + count; |
| | | // 数据判断 |
| | | if(checkType == 1){ |
| | | if(!(value >= firstParam && value <= secondParam)){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 2){ |
| | | if(value >= firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 3){ |
| | | if(value <= firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 4){ |
| | | if(value < firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | }else if(checkType == 5){ |
| | | if(value > firstParam ){ |
| | | passFlag = false; |
| | | } |
| | | } |
| | | run10.setText(String.format("%.2f",value)); |
| | | } |
| | | } |
| | | } |
| | | XWPFParagraph paragraph10 = table.getRow(hang).getCell(4).getParagraphArray(0); |
| | | XWPFParagraph paragraph10 = table1.getRow(hang+rowNum).getCell(4).getParagraphArray(0); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | run10.setText(String.valueOf(aDouble)); |
| | | |
| | | |
| | | hang++; |
| | | } |
| | | // 汇总结果 |
| | | if(checkType != 0){ |
| | | XWPFParagraph paragraph10 = table1.getRow(rowNum+2).getCell(cell - 1).getParagraphArray(0); |
| | | XWPFRun run10 = paragraph10.createRun(); |
| | | if(passFlag){ |
| | | run10.setText("合格"); |
| | | }else { |
| | | run10.setText("不合格"); |
| | | } |
| | | } |
| | | |
| | | XWPFParagraph paragraph11 = table.getRow(row - 1).getCell(5).getParagraphArray(0); |
| | | XWPFParagraph paragraph11 = table1.getRow(rowNum + checkItemRowNum - 1).getCell(5).getParagraphArray(0); |
| | | XWPFRun run11 = paragraph11.createRun(); |
| | | double v = count / (Double.parseDouble(s1.toString()) * Double.parseDouble(i1.toString())); |
| | | run11.setText(o2.get(s2).toString()); |
| | | |
| | | run11.setText(String.format("%.2f",(double)o2.get(s2))); |
| | | rowNum += checkItemRowNum; |
| | | size++; |
| | | } |
| | | } |
| | | |
| | | |
| | | // 输出到文件 |
| | | try { |
| | | InsSample insSample = insSampleMapper.selectById(insOrderFile.getInsSampleId()); |
| | | String[] split = insOrderFile.getFileName().split("\\."); |
| | | String name = insOrderFile.getFileName().replace("#", "&").substring(0, (insOrderFile.getFileName().length() - split[split.length - 1].length())); |
| | | FileOutputStream out = new FileOutputStream(wordUrl + "/" + UUID.randomUUID() + "_" + insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | document.write(out); |
| | | out.close(); |
| | | document.close(); |
| | | InsOrderFile orderFile = new InsOrderFile(); |
| | | orderFile.setInsOrderId(insOrderFile.getInsOrderId()); |
| | | orderFile.setInsSampleId(insOrderFile.getInsSampleId()); |
| | | orderFile.setFileUrl(UUID.randomUUID() + "_" + insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | orderFile.setType(2); |
| | | orderFile.setFileName(insSample.getSampleCode() + "&" + sonLaboratory + name + "解析的辐射站点报告.docx"); |
| | | orderFile.setSonLaboratory(sonLaboratory); |
| | | insOrderFileMapper.insert(orderFile); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 提取第一个括号内的内容 |
| | | public static String extractFirstContentFromBrackets(String str) { |
| | | // 定义正则表达式,匹配括号内的内容,同时支持中文和英文括号 |
| | | Pattern pattern = Pattern.compile("\\((.*?)\\)|\\((.*?)\\)"); |
| | | Matcher matcher = pattern.matcher(str); |
| | | |
| | | // 查找第一个匹配的内容 |
| | | if (matcher.find()) { |
| | | // 获取括号内的内容,判断是中文括号还是英文括号 |
| | | return matcher.group(1) != null ? matcher.group(1) : matcher.group(2); |
| | | } |
| | | return null; // 如果没有找到匹配项,则返回null |
| | | } |
| | | |
| | | } |