zhaowenxuan
5 天以前 2703b3a022bea433419cfcf264099527a7cff63c
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
@@ -49,6 +49,9 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.Collator;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -92,8 +95,8 @@
    private LtkjHysqdService ltkjHysqdService;
    @Autowired
    private LtkjGetexamreportinfoService ltkjGetexamreportinfoService;
    @Value("${path.filePath}")
    private String value;
//    @Value("${path.filePath}")
//    private String value;
    @Value("${path.reportServer}")
    private String urlValue;
    @Autowired
@@ -122,6 +125,8 @@
    private ITjProAdvicerulesService tjProAdvicerulesService;
    @Autowired
    private TjOrderYcxmService ycxmService;
    @Resource
    private TjXdtgmdjgService xdtgmdjgService;
    private Integer pdfPage = 0;
@@ -870,6 +875,7 @@
        String s2 = sysConfigService.selectConfigByKey("tjreport_font_size_second_page_title");
        String s3 = sysConfigService.selectConfigByKey("tjreport_font_size_result_title");
        String s4 = sysConfigService.selectConfigByKey("tjreport_font_size_zongjian");
        String value = sysConfigService.selectConfigByKey("path_filePath");
//        String hospName = sysDeptController.getdangqiandengluyuanqu().get("msg").toString();
        if (StrUtil.isNotBlank(s1) && Integer.parseInt(s1) > 10) DEFAULT_FONT_SIZE = Integer.parseInt(s1);
        else DEFAULT_FONT_SIZE = 10;
@@ -1032,7 +1038,8 @@
                        StringBuilder builder = new StringBuilder();
                        if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
                        builder.append("    (").append(index).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n");
                        builder.append("    (").append(index).append(")").append(detail.getJcxm()).append(": ")
                                .append(result.replaceAll("\n", "").trim()).append("\n");
                        index++;
                        result = builder.toString();
@@ -1192,7 +1199,8 @@
                        if (StrUtil.isNotBlank(result)) {
                            StringBuilder builder = new StringBuilder();
                            if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
                            builder.append("    (").append(index1).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n");
                            builder.append("    (").append(index1).append(")").append(detail.getJcxm()).append(": ")
                                    .append(result.replaceAll("\n", "").trim()).append("\n");
                            index1++;
                            result = builder.toString();
@@ -1714,6 +1722,7 @@
        document.setMargins(70, 70, 40, 40);
        document.open();
        //
        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
        notHuaYanData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
        try {
@@ -1735,6 +1744,46 @@
            log.error(String.valueOf(e));
            return AjaxResult.error();
        }
        LambdaQueryWrapper<TjXdtgmdjg> wqq=new LambdaQueryWrapper<>();
        wqq.eq(TjXdtgmdjg::getTjh,tjOrder.getTjNumber());
        wqq.isNotNull(TjXdtgmdjg::getUrl);
        List<TjXdtgmdjg> xdtgmdjgList = xdtgmdjgService.list(wqq);
        int index=1;
        for (TjXdtgmdjg xdtgmdjg : xdtgmdjgList) {
            document.newPage();
            cell = new PdfPCell();
            PdfPTable tablefj = new PdfPTable(new float[]{100f});
            tablefj.setTotalWidth(PageSize.A4.getWidth() - 100);
            tablefj.setLockedWidth(true);
            tablefj.setHorizontalAlignment(Element.ALIGN_LEFT);
            tablefj.getDefaultCell().setBorder(0);
            tablefj.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
            cell.setBorder(Rectangle.NO_BORDER);
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setPaddingTop(10);
            cell.setPaddingBottom(10);
            cell.setPhrase(new Phrase("附件"+index+": "+ xdtgmdjg.getProName(), zongJianFont));
            Path path = Paths.get(xdtgmdjg.getUrl());
            byte[] bytesfj = null;
            try {
                bytesfj = Files.readAllBytes(path);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            Image image = Image.getInstance(bytesfj);
            image.scaleToFit(500, 2500);
            tablefj.addCell(cell);
            cell = new PdfPCell();
            cell.addElement(image);
            tablefj.addCell(cell);
            document.add(tablefj);
            index++;
        }
        document.close();
@@ -1759,7 +1808,7 @@
        AcroFields acroFields = pdfStamper.getAcroFields();
        BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        acroFields.addSubstitutionFont(bf);
        HashMap<String, Object> data = new HashMap<>();
//        HashMap<String, Object> data = new HashMap<>();
        Long cusSex = customer.getCusSex();
        String tjtype;
        if (cusSex == 0) {
@@ -1779,10 +1828,6 @@
        if (StrUtil.isNotBlank(tjOrder.getFirmName())) {
            hashMap.put("work", tjOrder.getFirmName());
        } else {
//            LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>();
//            wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId());
//            DictComp dictComp = dictCompService.getOne(wq111);
            if (StrUtil.isBlank(tjOrder.getFirmName())) {
                hashMap.put("work", "无");
            } else {
@@ -1803,6 +1848,44 @@
            acroFields.setField(key, hashMap.get(key));
        }
        pdfStamper.setFormFlattening(true);
        String isOpenSfzImg = sysConfigService.selectConfigByKey("pdf_isOpenSfzImg");
        String pathSfzfilePath = sysConfigService.selectConfigByKey("path_sfzfilePath");
        if (StrUtil.isNotBlank(isOpenSfzImg) && isOpenSfzImg.equalsIgnoreCase("y")){
            if (StrUtil.isNotBlank(pathSfzfilePath)){
                String key = DataSourceContextHolder.getDataSourceKey();
                key = key.replace("ltkjpeis10_","");
                if (new File(pathSfzfilePath + File.separator + key + File.separator+customer.getCusId()+".png").exists()) {
                    String pdfSfzimgwidth = sysConfigService.selectConfigByKey("pdf_sfzimgwidth");
                    String pdfSfzimgheight = sysConfigService.selectConfigByKey("pdf_sfzimgheight");
                    String pdfSfzimgy = sysConfigService.selectConfigByKey("pdf_sfzimgy");
                    String pdfSfzimgx = sysConfigService.selectConfigByKey("pdf_sfzimgx");
                    int width = 100,height = 100,x = 90,y = 180;
                    if (StrUtil.isNotBlank(pdfSfzimgwidth)) {
                        width = Integer.parseInt(pdfSfzimgwidth);
                    }
                    if (StrUtil.isNotBlank(pdfSfzimgheight)) {
                        height = Integer.parseInt(pdfSfzimgheight);
                    }
                    if (StrUtil.isNotBlank(pdfSfzimgy)) {
                        y = Integer.parseInt(pdfSfzimgy);
                    }
                    if (StrUtil.isNotBlank(pdfSfzimgx)) {
                        x = Integer.parseInt(pdfSfzimgx);
                    }
                    Image image = Image.getInstance(pathSfzfilePath + File.separator + key + File.separator+customer.getCusId()+".png");
                    // 设置图片位置和大小
                    // image.setAbsolutePosition(90, 190); // 表单左边
                    // image.setAbsolutePosition(495, 742); // 右上角
                    // image.setAbsolutePosition(250, 50); // 中下
                    image.setAbsolutePosition(x, y);
                    image.scaleAbsolute(width, height); // 设置图片宽度和高度
                    PdfContentByte content = pdfStamper.getOverContent(1);
                    content.addImage(image);
                }
            }
        }
        pdfStamper.close();
        reader4.close();
        // 将修改后的PDF内容写入
@@ -1826,6 +1909,9 @@
            PdfImportedPage page = copy.getImportedPage(reader2, i);
            copy.addPage(page);
        }
        reader2.close();
        PdfReader reader1 = new PdfReader(byteArrayOutputStream.toByteArray());
@@ -2029,6 +2115,7 @@
     */
    private void savePDFFile(String outputFileName1, TjOrder tjOrder, TjCustomer customer, ByteArrayOutputStream finalOutPut) throws IOException, DocumentException, InterruptedException {
        // 第一步:生成文件并保存
        String value = sysConfigService.selectConfigByKey("path_filePath");
        String key = DataSourceContextHolder.getDataSourceKey();
        key = key.replace("ltkjpeis10_","");
        String outputPath1 = value + File.separator + key + File.separator;
@@ -2147,7 +2234,7 @@
            LambdaQueryWrapper<TjProject> wqqq = new LambdaQueryWrapper<>();
            wqqq.eq(TjProject::getProId, entry.getKey().getProId());
            TjProject one11 = projectService.getOne(wqqq);
            if (entry.getValue() == null || entry.getValue().isEmpty()) continue;
            if (entry.getValue() == null || entry.getValue().isEmpty() || entry.getValue().equals("null")) continue;
            //判断该项目是否需要打印报告
            if (null != one11 && "Y".equals(one11.getNeedReport())) {
                TjOrderRemark orderRemark = entry.getKey();
@@ -2222,7 +2309,7 @@
                                paragraph.setLeading(5f);
                                document1.add(ppp);
                                if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
                                    ppp = new Paragraph("结论:" + entry.getKey().getRemark(), remarkFonts);
                                    ppp = new Paragraph("结论:" + entry.getKey().getRemark().replaceAll("null",""), remarkFonts);
                                    paragraph.setAlignment(Element.ALIGN_LEFT);
                                    paragraph.setLeading(5f);
                                    document1.add(ppp);
@@ -2292,15 +2379,19 @@
                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                            if (isPacs) {
                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
                                document1.add(pp);
                                Paragraph ppp = new Paragraph(value.get(0).getSj(), remarkFonts);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                paragraph.setLeading(5f);
                                document1.add(ppp);
                                pp = PdfUtils.setParagraph(remarkFonts, "结论:");
                                document1.add(pp);
                                ppp = new Paragraph(value.get(0).getTs(), remarkFonts);
                                Paragraph pp;
                                Paragraph ppp;
                                if (StrUtil.isNotBlank(value.get(0).getSj())) {
                                    pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
                                    document1.add(pp);
                                    ppp = new Paragraph(value.get(0).getSj().replaceAll("\n",""), remarkFonts);
                                    paragraph.setAlignment(Element.ALIGN_LEFT);
                                    paragraph.setLeading(5f);
                                    document1.add(ppp);
                                }
//                                pp = PdfUtils.setParagraph(remarkFonts, "检查提示:"+value.get(0).getTs().replaceAll("\n",""));
//                                document1.add(pp);
                                ppp = new Paragraph("检查提示:"+value.get(0).getTs().replaceAll("\n",""), remarkFonts);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                paragraph.setLeading(5f);
                                document1.add(ppp);
@@ -2337,7 +2428,7 @@
                                    paragraph.setLeading(5f);
                                    document1.add(ppp);
                                    if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
                                        ppp = new Paragraph("结论:" + entry.getKey().getRemark(), remarkFonts);
                                        ppp = new Paragraph("结论:" + entry.getKey().getRemark().replaceAll("null",""), remarkFonts);
                                        paragraph.setAlignment(Element.ALIGN_LEFT);
                                        paragraph.setLeading(5f);
                                        document1.add(ppp);
@@ -2460,7 +2551,7 @@
                                paragraph.setLeading(5f);
                                document1.add(ppp);
                                if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
                                    ppp = new Paragraph("结论:" + entry.getKey().getRemark(), remarkFonts);
                                    ppp = new Paragraph("结论:" + entry.getKey().getRemark().replaceAll("null",""), remarkFonts);
                                    paragraph.setAlignment(Element.ALIGN_LEFT);
                                    paragraph.setLeading(5f);
                                    document1.add(ppp);
@@ -2477,18 +2568,42 @@
                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                            if (isPacs) {
                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
                                Paragraph pp;
                                Paragraph ppp;
                                String key = sysConfigService.selectConfigByKey("makepdfuseorderdetailproresult");
                                if (StrUtil.isNotBlank(key) && !key.equals("Y")){
                                    if (StrUtil.isNotBlank(value.get(0).getSj())) {
                                        pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
                                        document1.add(pp);
                                        ppp = new Paragraph(value.get(0).getSj().replaceAll("\n",""), remarkFonts);
                                        paragraph.setAlignment(Element.ALIGN_LEFT);
                                        paragraph.setLeading(5f);
                                        document1.add(ppp);
                                    }
                                }else{
                                    if (StrUtil.isNotBlank(value.get(0).getSj()) || StrUtil.isNotBlank(value.get(0).getProResult())) {
                                        pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
                                        document1.add(pp);
                                        ppp = new Paragraph(value.get(0).getSj() != null ? value.get(0).getSj().replaceAll("\n","")
                                                : value.get(0).getProResult().replaceAll("\n",""), remarkFonts);
                                        paragraph.setAlignment(Element.ALIGN_LEFT);
                                        paragraph.setLeading(5f);
                                        document1.add(ppp);
                                    }
                                }
//                                pp = PdfUtils.setParagraph(remarkFonts, "检查提示:"+ (value.get(0).getTs() != null ? value.get(0).getTs() : value.get(0).getProResult()));
//                                document1.add(pp);
                                pp = PdfUtils.setParagraph(remarkFonts, "检查提示:");
                                document1.add(pp);
                                Paragraph ppp = new Paragraph(value.get(0).getSj() != null ? value.get(0).getSj() : value.get(0).getProResult(), remarkFonts);
                                ppp = new Paragraph((value.get(0).getTs() != null ? value.get(0).getTs().replaceAll("\n","")
                                        : value.get(0).getProResult().replaceAll("\n","")), remarkFonts);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                paragraph.setLeading(5f);
                                document1.add(ppp);
                                pp = PdfUtils.setParagraph(remarkFonts, "结论:");
                                document1.add(pp);
                                ppp = new Paragraph(value.get(0).getTs() != null ? value.get(0).getTs() : value.get(0).getProResult(), remarkFonts);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                paragraph.setLeading(5f);
                                document1.add(ppp);
//                                ppp = new Paragraph(value.get(0).getTs() != null ? value.get(0).getTs() : value.get(0).getProResult(), remarkFonts);
//                                paragraph.setAlignment(Element.ALIGN_LEFT);
//                                paragraph.setLeading(5f);
//                                document1.add(ppp);
                            } else {
                                if (value.get(0).getPid().equals("1862852701533012001")) {
                                    remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
@@ -2522,7 +2637,7 @@
                                    paragraph.setLeading(5f);
                                    document1.add(ppp);
                                    if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
                                        ppp = new Paragraph("结论:" + entry.getKey().getRemark(), remarkFonts);
                                        ppp = new Paragraph("结论:" + entry.getKey().getRemark().replaceAll("null","").replaceAll("\n",""), remarkFonts);
                                        paragraph.setAlignment(Element.ALIGN_LEFT);
                                        paragraph.setLeading(5f);
                                        document1.add(ppp);
@@ -2584,6 +2699,142 @@
                    }
                }
            }
        }
    }
    private void pacsTable(Document document1, Map<TjOrderRemark, List<TjPdfVO>> printReport, DictHosp dictHosp, String colorStr, boolean isPacs)throws DocumentException{
        try {
            for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
                if (entry.getValue() == null || entry.getValue().isEmpty()) continue;
                //判断该项目是否需要打印报告
                TjOrderRemark orderRemark = entry.getKey();
                List<TjPdfVO> value = entry.getValue().stream().distinct().collect(Collectors.toList());
                if (StrUtil.isBlank(value.get(0).getProResult()) && (StrUtil.isBlank(value.get(0).getTs()) && StrUtil.isBlank(value.get(0).getSj()))) {
                    continue;
                }
                String titleName = null;
                if (entry.getValue().get(0).getProName().contains(";"))
                    titleName = entry.getValue().get(0).getProName();
                else titleName = orderRemark.getProName();
                // 设置标题字体样式
                Font titleFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
                if (StrUtil.isBlank(value.get(0).getProResult()) && (StrUtil.isBlank(value.get(0).getTs().replaceAll("\n",""))
                        && StrUtil.isBlank(value.get(0).getSj().replaceAll("\n","")))) {
                    continue;
                }
                Font titleFont = PdfUtils.setFont(DEFAULT_TITLE_FONT_SIZE);
                titleFont.setStyle(Font.BOLD);
                PdfPCell cellTitle = new PdfPCell(PdfUtils.setParagraph(titleFont, titleName));
                cellTitle.setBorder(Rectangle.NO_BORDER);
                Color color = Color.decode("#B4CDCD");
                cellTitle.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); // 设置背景颜色(十六进制 RGB)
                // 创建表格并添加单元格
                PdfPTable tableTitle = new PdfPTable(1);
                tableTitle.setWidthPercentage(100);
                tableTitle.addCell(cellTitle);
                // 将表格添加到文档中
                document1.add(tableTitle);
                if (!value.isEmpty()) {
                    if (value.size() > 1) {
                        Long pid = Long.valueOf(value.get(0).getPid());
                        String[] titles = {"体检项目", "体检结果", "单位"};
                        Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                        Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                        PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, isPacs, new float[]{240, 240, 240});
                        document1.add(table);
                    } else {
                        Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                        if (isPacs) {
                            Paragraph pp;
                            Paragraph ppp;
                            if (StrUtil.isNotBlank(value.get(0).getSj()) || StrUtil.isNotBlank(value.get(0).getProResult())) {
                                pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
                                document1.add(pp);
                                ppp = new Paragraph(value.get(0).getSj() != null ? value.get(0).getSj().replaceAll("\n","") : value.get(0).getProResult().replaceAll("\n",""), remarkFonts);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                paragraph.setLeading(5f);
                                document1.add(ppp);
                            }
                            pp = PdfUtils.setParagraph(remarkFonts, "检查提示:");
                            document1.add(pp);
                            ppp = new Paragraph((value.get(0).getTs() != null ? value.get(0).getTs().replaceAll("\n","") : value.get(0).getProResult().replaceAll("\n","")), remarkFonts);
                            paragraph.setAlignment(Element.ALIGN_LEFT);
                            paragraph.setLeading(5f);
                            document1.add(ppp);
                        } else {
                            Long pid = Long.valueOf(value.get(0).getPid());
                            String[] titles = {"体检项目", "体检结果"};
                            Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                            Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                            PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, false, new float[]{240, 300});
                            document1.add(table);
                        }
                    }
                } else {
                    String[] titles = {"体检项目", "体检结果", "单位"};
                    Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                    Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                    PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value, isPacs);
                    document1.add(table);
                }
                //判断备注是否为空  空不能显示null
                if (entry.getKey().getRemark() == null) {
                    entry.getKey().setRemark("");
                }
                //                    if (!dictHosp.getHospName().equals("澄合矿务局中心医院")){
                if (!true) {
                    String remark = "备注:" + entry.getKey().getRemark();
                    if (entry.getKey().getRemark().length() > 50) {
                        int j = 0;
                        for (int i = 0; i < remark.length() / 50; i++) {
                            String substring = remark.substring(j, j + 50);
                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
                            document1.add(pp);
                            j = j + 50;
                        }
                        if (remark.length() % 50 != 0) {
                            String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
                            document1.add(pp);
                        }
                    } else {
                        Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
                        document1.add(pp);
                    }
                }
                //判断主检医师是否为空  空不能显示null
                zhuJianYiShi(document1, entry, orderRemark.getCreateTime(), dictHosp);
                //                    if (!dictHosp.getHospName().equals("澄合矿务局中心医院")) {
                if (!true) {
                    //分割线
                    LineSeparator objectName = new LineSeparator();
                    document1.add(objectName);
                }
            }
        } catch (NumberFormatException e) {
            throw new RuntimeException(e);
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        }
    }
@@ -2681,6 +2932,20 @@
                        .values());
                Map<String, List<LtkjHybgd>> listMap = hybgds.stream().collect(Collectors.groupingBy(LtkjHybgd::getJyjg));
                boolean isGroupOnce = false;
                String groupOnceProResult = "";
                if (listMap.size()==1){
                    String firstKey = listMap.keySet().stream().findFirst().orElse(null);
                    LambdaQueryWrapper<SysDictData> wrapper = new LambdaQueryWrapper<>();
                    wrapper.eq(SysDictData::getDictType,"qj_type");
                    wrapper.eq(SysDictData::getDictLabel,firstKey);
                    List<SysDictData> dictList = sysDictDataService.list();
                    if (!dictList.isEmpty()) {
                        isGroupOnce = true;
                        groupOnceProResult = firstKey;
                    }
                }
//                hybgds=hybgds.stream().sorted(Comparator.comparing(LtkjHybgd::getJcxm, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
//                hybgds = hybgds.stream()
@@ -2689,53 +2954,106 @@
//                        ))
//                        .collect(Collectors.toList());
                // 大类项目名称
                String xmmc = hysqd.getXmmc();
                ArrayList<List<String>> lists = new ArrayList<>();
                HashSet<String> hashSet = new HashSet<>();
                String shsj = "";
                for (LtkjHybgd hybgd : hybgds) {
                    shsj = hybgd.getShsj();
                    // 检查项目
                    String jcxm = hybgd.getJcxm() != null ? hybgd.getJcxm().trim() : null;
                    // 检验结果
                    String jyjg = hybgd.getJyjg() != null ? hybgd.getJyjg().trim() : null;
                    // 结果单位
                    String jgdw = hybgd.getJgdw() != null ? hybgd.getJgdw().trim() : null;
                    // 范围值
                    String fwz = hybgd.getFwz() != null ? hybgd.getFwz().trim() : null;
                    // 检验医师
                if (!isGroupOnce){
                    // 大类项目名称
                    String xmmc = hysqd.getXmmc();
                    ArrayList<List<String>> lists = new ArrayList<>();
                    HashSet<String> hashSet = new HashSet<>();
                    String shsj = "";
                    for (LtkjHybgd hybgd : hybgds) {
                        shsj = hybgd.getShsj();
                        // 检查项目
                        String jcxm = hybgd.getJcxm() != null ? hybgd.getJcxm().trim() : null;
                        // 检验结果
                        String jyjg = hybgd.getJyjg() != null ? hybgd.getJyjg().trim() : null;
                        // 结果单位
                        String jgdw = hybgd.getJgdw() != null ? hybgd.getJgdw().trim() : null;
                        // 范围值
                        String fwz = hybgd.getFwz() != null ? hybgd.getFwz().trim() : null;
                        // 检验医师
//                String jyys = hybgd.getJyys();
                    //审核医生
                    String shysmc = hybgd.getShysmc() != null ? hybgd.getShysmc().trim() : null;
                    // 审核医师编码
                    String shys = hybgd.getShys() != null ? hybgd.getShys().trim() : null;
                    String ycbz = "";
                        //审核医生
                        String shysmc = hybgd.getShysmc() != null ? hybgd.getShysmc().trim() : null;
                        // 审核医师编码
                        String shys = hybgd.getShys() != null ? hybgd.getShys().trim() : null;
                        String ycbz = "";
                    if (jyjg != null && StrUtil.isNotBlank(jyjg) && fwz != null && StrUtil.isNotBlank(fwz)) {
                        try {
                            String[] fwzs = fwz.split("-");
                            BigDecimal min = new BigDecimal(fwzs[0]);
                            BigDecimal max = new BigDecimal(fwzs[1]);
                            BigDecimal jyjgval = new BigDecimal(jyjg);
                            // 比较检验结果和范围值
                            if (jyjgval.compareTo(min) < 0) {
                                // jyjg 小于范围最小值,添加下箭头
                        if (jyjg != null && StrUtil.isNotBlank(jyjg) && fwz != null && StrUtil.isNotBlank(fwz)) {
                            try {
                                String[] fwzs = fwz.split("-");
                                BigDecimal min = new BigDecimal(fwzs[0]);
                                BigDecimal max = new BigDecimal(fwzs[1]);
                                BigDecimal jyjgval = new BigDecimal(jyjg);
                                // 比较检验结果和范围值
                                if (jyjgval.compareTo(min) < 0) {
                                    // jyjg 小于范围最小值,添加下箭头
//                            jyjg = jyjg + "   ↓";
                                ycbz = "↓";
                            } else if (jyjgval.compareTo(max) > 0) {
                                // jyjg 大于范围最大值,添加上箭头
                                    ycbz = "↓";
                                } else if (jyjgval.compareTo(max) > 0) {
                                    // jyjg 大于范围最大值,添加上箭头
//                            jyjg = jyjg + "   ↑";
                                ycbz = "↑";
                                    ycbz = "↑";
                                }
                            } catch (Exception ignored) {
                            }
                        } catch (Exception ignored) {
                        }
                    }
//                LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
//                queryWrapper.eq(SysUser::getUserName,jyys);
//                List<SysUser> sysUsers = userService.list(queryWrapper);
//                if (!sysUsers.isEmpty())
//                    hashSet.add(sysUsers.get(0).getNickName());
                        String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm");
                        if (null != shys && null != shysmc && key.equals("Y")) {
                            hashSet.add(shysmc + "|" + shys);
                        } else {
                            if (null != shysmc) hashSet.add(shysmc);
                        }
                        ArrayList<String> strings = new ArrayList<>();
                        strings.add(jcxm);
                        strings.add(jyjg);
                        strings.add(ycbz);
                        strings.add(jgdw);
                        strings.add(fwz);
                        strings.add(hybgd.getJcxmid());
                        strings.add(hysqd.getXmid());
                        lists.add(strings);
                    }
                    if (!lists.isEmpty()) {
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("data", lists);
                        map.put("jyys", hashSet);
                        if (StrUtil.isNotBlank(shsj)) {
                            shsj = shsj.split(" ")[0];
                        }
                        map.put("shsj", shsj);
                        data.put(xmmc, map);
                    }
                }else {
                    String xmmc = hysqd.getXmmc();
                    ArrayList<List<String>> lists = new ArrayList<>();
                    HashSet<String> hashSet = new HashSet<>();
                    LtkjHybgd hybgd = hybgds.get(0);
                    String shsj = "";
                    shsj = hybgd.getShsj();
                    String jgdw = hybgd.getJgdw() != null ? hybgd.getJgdw().trim() : null;
                    String fwz = hybgd.getFwz() != null ? hybgd.getFwz().trim() : null;
                    String shysmc = hybgd.getShysmc() != null ? hybgd.getShysmc().trim() : null;
                    String shys = hybgd.getShys() != null ? hybgd.getShys().trim() : null;
                    String ycbz = "";
                    if (StrUtil.isNotBlank(groupOnceProResult) && fwz != null && StrUtil.isNotBlank(fwz)) {
                        try {
                            String[] fwzs = fwz.split("-");
                            BigDecimal min = new BigDecimal(fwzs[0]);
                            BigDecimal max = new BigDecimal(fwzs[1]);
                            BigDecimal jyjgval = new BigDecimal(groupOnceProResult);
                            if (jyjgval.compareTo(min) < 0) {
                                ycbz = "↓";
                            } else if (jyjgval.compareTo(max) > 0) {
                                ycbz = "↑";
                            }
                        } catch (Exception ignored) {
                        }
                    }
                    String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm");
                    if (null != shys && null != shysmc && key.equals("Y")) {
                        hashSet.add(shysmc + "|" + shys);
@@ -2743,16 +3061,14 @@
                        if (null != shysmc) hashSet.add(shysmc);
                    }
                    ArrayList<String> strings = new ArrayList<>();
                    strings.add(jcxm);
                    strings.add(jyjg);
                    strings.add(xmmc);
                    strings.add(groupOnceProResult);
                    strings.add(ycbz);
                    strings.add(jgdw);
                    strings.add(fwz);
                    strings.add(hybgd.getJcxmid());
                    strings.add(hysqd.getXmid());
                    lists.add(strings);
                }
                if (!lists.isEmpty()) {
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("data", lists);
                    map.put("jyys", hashSet);
@@ -2941,12 +3257,7 @@
     * @param customer
     */
    private void notHuaYanData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
//        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
//        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
//        wqq.ne(TjOrderRemark::getDeptId, "241");
//        wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257");
//        wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId());
//        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.notHuaYanData(tjNumber);
        for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
            printReport.put(tjOrderRemark, null);
@@ -2957,49 +3268,92 @@
            tjOrderDetails = tjOrderDetails.stream().filter(i -> StrUtil.isNotBlank(i.getProResult())).collect(Collectors.toList());
            tjOrderDetails = new ArrayList<>(tjOrderDetails.stream()
                    .collect(Collectors.toMap(TjOrderDetail::getProId, i -> i, (existing, replacement) -> existing)).values());
            for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
                TjProject tjProject = projectService.getById(String.valueOf(tjOrderDetail.getProId()));
                if (null != tjProject && tjProject.getNeedReport().equals("Y")) {
                    tjOrderDetail.setProject(tjProject);
                    if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId()) && entry.getKey().getType() == 1) {
                        TjPdfVO tjPdfVO = new TjPdfVO();
                        tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
                        tjPdfVO.setProResult(tjOrderDetail.getProResult());
                        tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
                        if (null != tjProject.getProMetering()) {
                            tjPdfVO.setCompany(tjProject.getProMetering());
                        } else {
                            tjPdfVO.setCompany("/");
                        }
                        tjPdfVO.setProId(String.valueOf(tjOrderDetail.getProject().getProId()));
                        tjPdfVO.setPid(String.valueOf(tjProject.getProParentId()));
//                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
//                        wrapper.eq(LtkjExamJcbgd::getTjh, tjNumber);
//                        wrapper.eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()));
                        tjPdfVOS.add(tjPdfVO);
            boolean isGroupOnce = false;
            String groupOnceProResult = "";
            if (tjOrderDetails.size() > 1) {
                Map<String, List<TjOrderDetail>> listMap = tjOrderDetails.stream().collect(Collectors.groupingBy(TjOrderDetail::getProResult));
                if (listMap.size() == 1){
                    String firstKey = listMap.keySet().stream().findFirst().orElse(null);
                    LambdaQueryWrapper<SysDictData> wrapper = new LambdaQueryWrapper<>();
                    wrapper.eq(SysDictData::getDictType,"qj_type");
                    wrapper.eq(SysDictData::getDictLabel,firstKey);
                    List<SysDictData> list = sysDictDataService.list();
                    if (!list.isEmpty()) {
                        isGroupOnce = true;
                        groupOnceProResult = firstKey;
                    }
                }
            }
            if (!isGroupOnce) {
                for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
                    TjProject tjProject = projectService.getById(String.valueOf(tjOrderDetail.getProId()));
                    if (null != tjProject && tjProject.getNeedReport().equals("Y")) {
                        tjOrderDetail.setProject(tjProject);
                        if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId()) && entry.getKey().getType() == 1) {
                            TjPdfVO tjPdfVO = new TjPdfVO();
                            tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
                            if(tjProject.getProDelivery()==1){
                                if(StringUtil.isNotBlank(tjOrderDetail.getConclusion())){
                                    tjPdfVO.setProResult(tjOrderDetail.getProResult()+"     "+tjOrderDetail.getConclusion());
                                }else {
                                    tjPdfVO.setProResult(tjOrderDetail.getProResult());
                                }
                            }else {
                                tjPdfVO.setProResult(tjOrderDetail.getProResult());
                            }
                            tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
                            if (null != tjProject.getProMetering()) {
                                tjPdfVO.setCompany(tjProject.getProMetering());
                            } else {
                                tjPdfVO.setCompany("/");
                            }
                            tjPdfVO.setProId(String.valueOf(tjOrderDetail.getProject().getProId()));
                            tjPdfVO.setPid(String.valueOf(tjProject.getProParentId()));
                            tjPdfVO.setXh(tjProject.getXh());
//                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
//                        wrapper.eq(LtkjExamJcbgd::getTjh, tjNumber);
//                        wrapper.eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()));
                            tjPdfVOS.add(tjPdfVO);
                        }
                    }
                }
            }else {
                TjOrderRemark orderRemark = entry.getKey();
                TjProject project = projectService.getById(orderRemark.getProId());
                if (null != project && project.getNeedReport().equals("Y") && orderRemark.getType() == 1) {
                    TjPdfVO tjPdfVO = new TjPdfVO();
                    tjPdfVO.setProName(project.getProName());
                    tjPdfVO.setProResult(groupOnceProResult);
                    tjPdfVO.setExc(0L);
                    tjPdfVO.setCompany("/");
                    tjPdfVO.setProId(String.valueOf(orderRemark.getProId()));
                    tjPdfVO.setPid(String.valueOf(orderRemark.getProId()));
                    tjPdfVO.setXh(1);
                    tjPdfVOS.add(tjPdfVO);
                }
            }
            if(!tjPdfVOS.isEmpty()){
                tjPdfVOS=tjPdfVOS.stream().sorted(Comparator.comparing(TjPdfVO::getProName, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
                tjPdfVOS = tjPdfVOS.stream()
                        .sorted(Comparator.comparingInt(
                                tjPdfVO -> tjPdfVO.getProName().length() // 根据名字的长度排序
                        ))
                        .collect(Collectors.toList());
//                tjPdfVOS=tjPdfVOS.stream().sorted(Comparator.comparing(TjPdfVO::getProName, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
//                tjPdfVOS = tjPdfVOS.stream()
//                        .sorted(Comparator.comparingInt(
//                                tjPdfVO -> tjPdfVO.getProName().length() // 根据名字的长度排序
//                        ))
//                        .collect(Collectors.toList());
                tjPdfVOS=tjPdfVOS.stream().sorted(Comparator.comparing(TjPdfVO::getXh)).collect(Collectors.toList());
            }
            printReport.put(entry.getKey(), tjPdfVOS);
        }
    }
    private void pacsJianChaData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
//        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
//        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
//        wqq.ne(TjOrderRemark::getDeptId, "241");
//        wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257");
//        wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId());
//        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.pacsJianChaData(tjNumber);
        for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
            printReport.put(tjOrderRemark, null);
@@ -3017,9 +3371,10 @@
                    if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId())
                            && entry.getKey().getType() == 1
                            && !ids.contains(String.valueOf(tjOrderDetail.getProject().getProParentId()))) {
                        TjProject tjProjectq = projectService.getById(tjOrderDetail.getProject().getProParentId());
                        TjPdfVO tjPdfVO = new TjPdfVO();
                        tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
                        tjPdfVO.setProResult(tjOrderDetail.getProResult());
                        tjPdfVO.setProResult(tjOrderDetail.getProResult()==null ? null : tjOrderDetail.getProResult().replaceAll("\n","").replaceAll(" ",""));
                        tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
                        if (null != tjProject.getProMetering()) {
                            tjPdfVO.setCompany(tjProject.getProMetering());
@@ -3028,15 +3383,24 @@
                        }
                        tjPdfVO.setProId(String.valueOf(tjOrderDetail.getProject().getProId()));
                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
                        wrapper.eq(LtkjExamJcbgd::getTjh, tjNumber);
                        wrapper.like(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()));
                        wrapper.orderByDesc(LtkjExamJcbgd::getZdsj);
                        wrapper.eq(LtkjExamJcbgd::getTjh, one.getCardId())
                                .and(w -> w.like(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()))
                                        .or()
                                        .eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjProjectq.getHisXmbm()))).orderByDesc(LtkjExamJcbgd::getZdsj);
                        List<LtkjExamJcbgd> list = jcbgdService.list(wrapper);
                        if (null != list && !list.isEmpty()) {
                            LtkjExamJcbgd jcbgd = list.get(0);
                            if (jcbgd != null) {
                                tjPdfVO.setTs(jcbgd.getYxbx());
                                tjPdfVO.setSj(jcbgd.getBgNr());
                                String yxbx = jcbgd.getYxbx();
                                String bgNr = jcbgd.getBgNr();
                                // 正则表达式:匹配数字后跟 '.' 或 '、'
                                String regex = "\\d+[\\.,、]";
                                // 使用正则替换,匹配的数字后添加换行符
                                if(StringUtil.isNotBlank(yxbx)) yxbx = yxbx.replaceAll(regex, "\n$0");
                                if(StringUtil.isBlank(bgNr)) bgNr = "";
                                if(StringUtil.isBlank(yxbx)) yxbx = "";
                                tjPdfVO.setTs(yxbx.replaceAll("\n","").replaceAll(" ",""));
                                tjPdfVO.setSj(bgNr.replaceAll("\n","").replaceAll(" ",""));
                                tjPdfVO.setShys(jcbgd.getShysxm());
                                tjPdfVO.setProName(jcbgd.getXmmc());
                                ids += "|" + jcbgd.getXmdm();
@@ -3046,18 +3410,41 @@
                    }
                }
            }
//            if(!tjPdfVOS.isEmpty()){
//                tjPdfVOS=tjPdfVOS.stream().sorted(Comparator.comparing(TjPdfVO::getProName, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
//                tjPdfVOS = tjPdfVOS.stream()
//                        .sorted(Comparator.comparingInt(
//                                tjPdfVO -> tjPdfVO.getProName().length() // 根据名字的长度排序
//                        ))
//                        .collect(Collectors.toList());
//            }
            printReport.put(entry.getKey(), tjPdfVOS);
        }
    }
    private void newpacsJianChaData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
        try {
            List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.newpacsJianChaData(tjNumber);
            for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
                List<TjPdfVO> tjPdfVOS = new ArrayList<>();
                TjPdfVO tjPdfVO = new TjPdfVO();
                tjPdfVO.setProResult(null);
                tjPdfVO.setExc(0L);
                tjPdfVO.setCompany("/");
                tjPdfVO.setProId(tjOrderRemark.getProsId());
                String yxbx = tjOrderRemark.getRemark();
                String bgNr = tjOrderRemark.getJgbx();
                // 正则表达式:匹配数字后跟 '.' 或 '、'
                String regex = "\\d+[\\.,、]";
                // 使用正则替换,匹配的数字后添加换行符
                if(StringUtil.isNotBlank(yxbx)) yxbx = yxbx.replaceAll(regex, "\n$0");
                if(StringUtil.isBlank(bgNr)) bgNr = "";
                if(StringUtil.isBlank(yxbx)) yxbx = "";
                tjPdfVO.setTs(yxbx);
                tjPdfVO.setSj(bgNr);
                tjPdfVO.setShys(tjOrderRemark.getDoctorName());
                tjPdfVO.setProName(tjOrderRemark.getProName());
                tjPdfVOS.add(tjPdfVO);
                printReport.put(tjOrderRemark, tjPdfVOS);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 设置用户信息
     *