zjh
2025-03-07 5d26355c3c630ffc26be575f5ed52b1b2cae46e4
ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
@@ -46,6 +46,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.Collator;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
@@ -141,7 +142,7 @@
        return data;
    }
    public void putData(JSONObject jsonObject, AjaxResult result, String key) {
/*    public void putData(JSONObject jsonObject, AjaxResult result, String key) {
        if (Integer.parseInt(result.get("code").toString()) == 200) {
            List<Map<String, Object>> data = (List<Map<String, Object>>) result.get("data");
            jsonObject.putOpt(key, data);
@@ -859,7 +860,7 @@
        String outputFileName1 = customer.getCusId() + tjOrder.getTjNumber() + customer.getCusName() + "_报告.pdf";
        savePDFFile(outputFileName1, tjOrder, customer, finalOutput);
        return AjaxResult.success();
    }
    }*/
    public AjaxResult hisPDFNew2(TjOrder tjOrder, TjCustomer customer, TjReportTemplate tjReportTemplate, TjReportTemplate zongJianYiShiQianMing) throws Exception {
        String s1 = sysConfigService.selectConfigByKey("tjreport_font_size_second_page_info");
@@ -920,7 +921,23 @@
        for (String head : titles) {
            table.addCell(PdfUtils.createCell(head, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
        }
        Map<String, List<CsProVo>> listMap = list.stream().collect(Collectors.groupingBy(i -> i.getDeptId() + "_" + i.getDeptName()));
//        Map<String, List<CsProVo>> listMap = list.stream()
//                .collect(Collectors.groupingBy(i -> i.getDeptId() + "_" + i.getDeptName()));
        Map<String, List<CsProVo>> listMap = list.stream()
                .collect(Collectors.groupingBy(
                        i -> i.getDeptId() + "_" + i.getDeptName(),
                        TreeMap::new, // 按键排序
                        Collectors.mapping(
                                i -> i,
                                Collectors.collectingAndThen(
                                        Collectors.toList(),
                                        l -> l.stream()
                                                .sorted(Comparator.comparing(CsProVo::getDeptId)) // 对 List 排序
                                                .collect(Collectors.toList())
                                )
                        )
                ));
//        List<CsProVo> sortedList = list.stream()
//                .sorted(Comparator.comparingLong(CsProVo::getProId))
//                .collect(Collectors.toList());
@@ -977,117 +994,249 @@
//        List<Map<String, Object>> jiancha = new ArrayList<>();
        paragraph = PdfUtils.setParagraph(defaultTitleFont, "检查综述:");
        paragraph.setSpacingBefore(3f);
        paragraph.setSpacingAfter(2f);
        document2.add(paragraph);
        int xmXh = 1;
        Map<Long, List<TjOrderDetail>> collect = orderDetails.stream().collect(Collectors.groupingBy(TjOrderDetail::getProId));
        for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
            List<CsProVo> proVos = deptEntry.getValue();
            if (proVos.size() > 1) {
                proVos = proVos.stream()
                        .sorted(Comparator.comparingLong(CsProVo::getProId))
                        .collect(Collectors.toList());
            }
            // 已经遍历过的
            ArrayList<String> jianYanYiDa = new ArrayList<>();
            for (CsProVo proVo : proVos) {
        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
        wq.eq(TjOrderYcxm::getTjh, tjOrder.getTjNumber());
        List<TjOrderYcxm> ycxms = ycxmService.list(wq);
        boolean isBr = false;
        if (null != ycxms && !ycxms.isEmpty()) {
                // 检查
                for (Map.Entry<Long, List<TjOrderDetail>> entry : collect.entrySet()) {
                    if (!entry.getKey().equals(proVo.getProId())) continue;
                    List<TjOrderDetail> details = entry.getValue();
                    String xmmc = details.get(0).getProName();
                    boolean isXmWrite = false;
                    for (TjOrderDetail detail : details) {
                        if (!isXmWrite) {
                            paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
                            paragraph.setAlignment(Element.ALIGN_LEFT);
                            document2.add(paragraph);
                            isXmWrite = true;
                        }
                        String result = detail.getProResult();
                        if (StrUtil.isNotBlank(result)) {
                            int index = 1;
                            result = result.replaceAll("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "");
//                            result = result.replaceAll("", "");
                            String[] split = result.split("\n");
                            StringBuilder builder = new StringBuilder();
                            for (String s : split) {
                                if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
                                builder.append("    (").append(index).append(")").append(s).append("\n");
                                index++;
                            }
                            result = builder.toString();
                        }
                        paragraph = new Paragraph(result, defaultFont);
            paragraph = PdfUtils.setParagraph(defaultTitleFont, "检查综述:");
            paragraph.setSpacingBefore(3f);
            paragraph.setSpacingAfter(2f);
            document2.add(paragraph);
            isBr = true;
            Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName));
            for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
                List<TjOrderYcxm> details = entry.getValue();
                String xmmc = entry.getKey();
//                    String xmmc = details.get(0).getProName();
                boolean isXmWrite = false;
                int index = 1;
                for (TjOrderYcxm detail : details) {
//                        if (!entry.getKey().equals(detail.getProId())) continue;
                    if (!isXmWrite) {
                        paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
                        paragraph.setAlignment(Element.ALIGN_LEFT);
                        document2.add(paragraph);
                        isXmWrite = true;
                    }
                    if (isXmWrite) {
                        paragraph = PdfUtils.setParagraph(defaultFont, "");
                        paragraph.setLeading(0f);
                        paragraph.setSpacingBefore(0f);
                        paragraph.setSpacingAfter(5f);
                        document2.add(paragraph);
                        xmXh++;
                    }
                }
                    String result = detail.getJcjg();
                    if (StrUtil.isNotBlank(result)) {
                        result = result.replaceAll("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "");
                        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");
                        index++;
                // 检验
                for (Map.Entry<String, Object> item : map.entrySet()) {
                    String xmmc = item.getKey();
                    HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
                    ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
                    boolean isXmWrite = false;
                    int index = 1;
                    for (List<String> i : lists) {
                        if (!i.get(6).contains(String.valueOf(proVo.getProId()))) continue;
                        if (i.contains("↓") || i.contains("↑")) {
                            if (jianYanYiDa.contains(i.get(5))) continue;
                            jianYanYiDa.add(i.get(5));
                        result = builder.toString();
                    }
                    paragraph = new Paragraph(result, defaultFont);
                    paragraph.setAlignment(Element.ALIGN_LEFT);
                    document2.add(paragraph);
                }
                if (isXmWrite) {
                    paragraph = PdfUtils.setParagraph(defaultFont, "");
                    paragraph.setLeading(0f);
                    paragraph.setSpacingBefore(0f);
                    paragraph.setSpacingAfter(5f);
                    document2.add(paragraph);
                    xmXh++;
                }
            }
        }
        /*else {
            if (!collect.isEmpty() || !map.isEmpty()){
                paragraph = PdfUtils.setParagraph(defaultTitleFont, "检查综述:");
                paragraph.setSpacingBefore(3f);
                paragraph.setSpacingAfter(2f);
                document2.add(paragraph);
                isBr = true;
            }
            for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
                List<CsProVo> proVos = deptEntry.getValue();
                if (proVos.size() > 1) {
                    proVos = proVos.stream()
                            .sorted(Comparator.comparingLong(CsProVo::getProId))
                            .collect(Collectors.toList());
                }
                // 已经遍历过的
                ArrayList<String> jianYanYiDa = new ArrayList<>();
                for (CsProVo proVo : proVos) {
                    // 检查
                    for (Map.Entry<Long, List<TjOrderDetail>> entry : collect.entrySet()) {
                        if (!entry.getKey().equals(proVo.getProId())) continue;
                        List<TjOrderDetail> details = entry.getValue();
                        String xmmc = proVo.getProName();
//                    String xmmc = details.get(0).getProName();
                        boolean isXmWrite = false;
                        int index = 1;
                        for (TjOrderDetail detail : details) {
//                        if (!entry.getKey().equals(detail.getProId())) continue;
                            if (!isXmWrite) {
                                paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                document2.add(paragraph);
                                isXmWrite = true;
                            }
                            String content = "    (" + index + ") " + i.get(0) + ":" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "      " + i.get(2);
                            paragraph = new Paragraph(content, defaultFont);
                            String result = detail.getProResult();
                            if (StrUtil.isNotBlank(result)) {
                                result = result.replaceAll("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "");
                                StringBuilder builder = new StringBuilder();
                                if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
                                builder.append("    (").append(index).append(")").append(detail.getProName()).append(": ").append(result).append("\n");
                                index++;
                                result = builder.toString();
                            }
                            paragraph = new Paragraph(result, defaultFont);
                            paragraph.setAlignment(Element.ALIGN_LEFT);
                            document2.add(paragraph);
                            index++;
                        }
                        if (isXmWrite) {
                            paragraph = PdfUtils.setParagraph(defaultFont, "");
                            paragraph.setLeading(0f);
                            paragraph.setSpacingBefore(0f);
                            paragraph.setSpacingAfter(5f);
                            document2.add(paragraph);
                            xmXh++;
                        }
                    }
                    if (isXmWrite) {
                        paragraph = PdfUtils.setParagraph(defaultFont, "");
                        paragraph.setSpacingBefore(0f);
                        paragraph.setSpacingAfter(5f);
                        document2.add(paragraph);
                        xmXh++;
                    // 检验
                    for (Map.Entry<String, Object> item : map.entrySet()) {
                        String xmmc = item.getKey();
                        HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
                        ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
                        boolean isXmWrite = false;
                        int index = 1;
                        for (List<String> i : lists) {
                            if (!i.get(6).contains(String.valueOf(proVo.getProId()))) continue;
                            if (i.contains("↓") || i.contains("↑")) {
                                if (jianYanYiDa.contains(i.get(5))) continue;
                                jianYanYiDa.add(i.get(5));
                                if (!isXmWrite) {
                                    paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
                                    paragraph.setAlignment(Element.ALIGN_LEFT);
                                    document2.add(paragraph);
                                    isXmWrite = true;
                                }
                                String content = "    (" + index + ") " + i.get(0) + ":" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "      " + i.get(2);
                                paragraph = new Paragraph(content, defaultFont);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                document2.add(paragraph);
                                index++;
                            }
                        }
                        if (isXmWrite) {
                            paragraph = PdfUtils.setParagraph(defaultFont, "");
                            paragraph.setSpacingBefore(0f);
                            paragraph.setSpacingAfter(5f);
                            document2.add(paragraph);
                            xmXh++;
                        }
                    }
                }
            }
        }*/
        if(isBr) {
            paragraph = PdfUtils.setParagraph(defaultFont, "");
            paragraph.setLeading(0f);
            paragraph.setSpacingBefore(10f);
            paragraph.setSpacingAfter(10f);
            document2.add(paragraph);
        }
        paragraph = PdfUtils.setParagraph(defaultFont, "");
        paragraph.setLeading(0f);
        paragraph.setSpacingBefore(10f);
        paragraph.setSpacingAfter(10f);
        document2.add(paragraph);
        paragraph = PdfUtils.setParagraph(defaultTitleFont, "医生建议:");
        paragraph.setSpacingBefore(3f);
        paragraph.setSpacingAfter(2f);
        document2.add(paragraph);
        xmXh = 0;
        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
        wq.eq(TjOrderYcxm::getTjh, tjOrder.getTjNumber());
        List<TjOrderYcxm> ycxms = ycxmService.list(wq);
//        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
//        wq.eq(TjOrderYcxm::getTjh, tjOrder.getTjNumber());
//        List<TjOrderYcxm> ycxms = ycxmService.list(wq);
        if (null != ycxms && !ycxms.isEmpty()) {
            for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
            paragraph = PdfUtils.setParagraph(defaultTitleFont, "医生建议:");
            paragraph.setSpacingBefore(3f);
            paragraph.setSpacingAfter(2f);
            document2.add(paragraph);
            Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName));
            for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
                List<TjOrderYcxm> details = entry.getValue();
                if(null !=details && !details.isEmpty()){
                    details= details.stream()
                            .sorted(Comparator.comparing(TjOrderYcxm::getJcxm))
                            .collect(Collectors.toList());
                    boolean isXmWrite = false;
                    int index = 1;
                    int index1 = 1;
                    for (TjOrderYcxm detail : details) {
                        String xmmc = entry.getKey().toString();
                        if (!isXmWrite) {
                            xmXh++;
                            paragraph = new Paragraph("【" + xmXh + "." + xmmc + "】", defaultFont);
                            paragraph.setAlignment(Element.ALIGN_LEFT);
                            document2.add(paragraph);
                            isXmWrite = true;
                        }
                        String result = detail.getJcjg();
                        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");
                            index1++;
                            result = builder.toString();
                        }
                        if (StrUtil.isNotBlank(result)) {
                            paragraph = new Paragraph(result, defaultFont);
                            paragraph.setAlignment(Element.ALIGN_LEFT);
                            document2.add(paragraph);
                        } else {
                            paragraph = new Paragraph("建议定期复查", defaultFont);
                            paragraph.setAlignment(Element.ALIGN_LEFT);
                            document2.add(paragraph);
                        }
                        String str = "     ";
                        List<Map<String, Object>> maps = new ArrayList<>();
                            String jynr = detail.getJynr();
                            JSONArray array = JSONUtil.parseArray(jynr);
                            for (Object object : array) {
                                Map<String,Object> objectMap=new HashMap<>();
                                JSONObject jsonObject = (JSONObject) object;
                                String bt = jsonObject.getStr("bt");
                                String nr = jsonObject.getStr("nr");
                                objectMap.put("bt",bt);
                                objectMap.put("nr",nr);
                                if(null !=bt || null !=nr) maps.add(objectMap);
                            }
                            List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList());
                            for (Map<String, Object> objectMap : collect1) {
                                String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString();
                                if (StrUtil.isBlank(content)) content = "     ";
                                paragraph = new Paragraph(content, defaultFont);
                                paragraph.setAlignment(Element.ALIGN_LEFT);
                                document2.add(paragraph);
                            }
                        index++;
                        paragraph = PdfUtils.setParagraph(defaultFont, "");
                        paragraph.setLeading(0f);
                        paragraph.setSpacingBefore(0f);
                        paragraph.setSpacingAfter(5f);
                        document2.add(paragraph);
                    }
                }
            }
            /*for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
                List<CsProVo> proVos = deptEntry.getValue();
                if (proVos.size() > 1) {
                    proVos = proVos.stream()
@@ -1101,11 +1250,15 @@
                        if (!entry.getKey().equals(proVo.getProId())) continue;
                        List<TjOrderDetail> details = entry.getValue();
                        if(null !=details && !details.isEmpty()){
                             details= details.stream()
                                     .sorted(Comparator.comparing(TjOrderDetail::getProName))
                                    .collect(Collectors.toList());
                            boolean isXmWrite = false;
                            int index = 1;
                            int index1 = 1;
                            for (TjOrderDetail detail : details) {
                                String xmmc = detail.getProName();
                                String xmmc = proVo.getProName();
//                                String xmmc = detail.getProName();
                                if (!isXmWrite) {
                                    xmXh++;
                                    paragraph = new Paragraph("【" + xmXh + "." + xmmc + "】", defaultFont);
@@ -1115,13 +1268,18 @@
                                }
                                String result = detail.getProResult();
                                if (StrUtil.isNotBlank(result)) {
                                    String[] split = result.split("\n");
                                    StringBuilder builder = new StringBuilder();
                                    for (String s : split) {
                                        if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
                                        builder.append("    (").append(index1).append(")").append(s).append("\n");
//                                    String[] split = result.split("\n");
//                                    for (String s : split) {
//                                        if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
//                                        builder.append("    (").append(index1).append(")").append(s).append("\n");
//                                        index1++;
//                                    }
                                        if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
                                        builder.append("    (").append(index1).append(")").append(detail.getProName()).append(": ").append(result).append("\n");
                                        index1++;
                                    }
                                    result = builder.toString();
                                }
                                if (StrUtil.isNotBlank(result)) {
@@ -1138,7 +1296,7 @@
                                LambdaQueryWrapper<TjOrderYcxm> ycwq=new LambdaQueryWrapper<>();
                                ycwq.eq(TjOrderYcxm::getTjh,tjOrder.getTjNumber());
                                ycwq.eq(TjOrderYcxm::getJcxm,xmmc);
                                ycwq.eq(TjOrderYcxm::getJcxm,detail.getProName());
                                TjOrderYcxm ycxm = ycxmService.getOne(ycwq);
                                if(null !=ycxm){
                                    String jynr = ycxm.getJynr();
@@ -1230,8 +1388,17 @@
                        }
                    }
                }
            }*/
        }
        /** else {
            if (!collect.isEmpty() || !map.isEmpty()){
                paragraph = PdfUtils.setParagraph(defaultTitleFont, "医生建议:");
                paragraph.setSpacingBefore(3f);
                paragraph.setSpacingAfter(2f);
                document2.add(paragraph);
            }
        } else {
            for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
                List<CsProVo> proVos = deptEntry.getValue();
                if (proVos.size() > 1) {
@@ -1410,6 +1577,7 @@
                }
            }
        }
        */
        for (int i = 0; i < 1; i++) {
            paragraph = PdfUtils.setParagraph(defaultFont, "");
@@ -2054,7 +2222,7 @@
//                    document1.add(table);
//                    if (dictHosp.getHospName().equals("澄合矿务局中心医院") && !value.isEmpty()){
                    if (true && !value.isEmpty()) {
                    if (!value.isEmpty()) {
                        if (value.size() > 1) {
                            if (value.get(0).getPid().equals("1862852701533012001")) {
                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
@@ -2175,7 +2343,7 @@
                        entry.getKey().setRemark("");
                    }
//                    if (!dictHosp.getHospName().equals("澄合矿务局中心医院")){
                    if (!true) {
                    if (false) {
                        String remark = "备注:" + entry.getKey().getRemark();
                        if (entry.getKey().getRemark().length() > 50) {
                            int j = 0;
@@ -2202,42 +2370,34 @@
                    zhuJianYiShi(document1, entry, orderRemark.getCreateTime(), dictHosp);
                    //分割线
//                    if (!dictHosp.getHospName().equals("澄合矿务局中心医院")) {
                    if (!true) {
                    if (false) {
                        LineSeparator objectName = new LineSeparator();
                        document1.add(objectName);
                    }
                } else {
                    if (null != one11) {
                        if (entry.getValue().get(0).getProName().contains(";"))
                            titleName = entry.getValue().get(0).getProName();
                        else titleName = one11.getProName();
                    } else {
                        titleName = entry.getKey().getProName();
                    }
                    if (entry.getValue().get(0).getProName().contains(";"))
                        titleName = entry.getValue().get(0).getProName();
                    else titleName = one11.getProName();
                    // 设置标题字体样式
                    Font titleFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
                    Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
//                    if (dictHosp.getHospName().equals("澄合矿务局中心医院")) {
                    if (true) {
                        if (StrUtil.isBlank(value.get(0).getProResult()) && (StrUtil.isBlank(value.get(0).getTs()) && StrUtil.isBlank(value.get(0).getSj()))) {
                            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);
                    } else {
                        document1.add(paragraph);
                    if (StrUtil.isBlank(value.get(0).getProResult()) && (StrUtil.isBlank(value.get(0).getTs()) && StrUtil.isBlank(value.get(0).getSj()))) {
                        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);
//                    String[] titles = {"体检项目", "体检结果", "单位"};
//                    Font headFont = PdfUtils.setFont(9);
@@ -2246,7 +2406,7 @@
//                    document1.add(table);
//                    if (dictHosp.getHospName().equals("澄合矿务局中心医院") && !value.isEmpty()){
                    if (true && !value.isEmpty()) {
                    if (!value.isEmpty()) {
                        if (value.size() > 1) {
                            if (value.get(0).getPid().equals("1862852701533012001")) {
                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
@@ -2493,78 +2653,87 @@
            LambdaQueryWrapper<LtkjHybgd> ltkjHybgdLambdaQueryWrapper = new LambdaQueryWrapper<>();
            ltkjHybgdLambdaQueryWrapper.eq(LtkjHybgd::getTmh, hysqd.getTmh());
            List<LtkjHybgd> hybgds = ltkjHybgdService.list(ltkjHybgdLambdaQueryWrapper);
            // 大类项目名称
            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 = "";
            if(null !=hybgds && !hybgds.isEmpty()){
//                hybgds=hybgds.stream().sorted(Comparator.comparing(LtkjHybgd::getJcxm, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
//                hybgds = hybgds.stream()
//                        .sorted(Comparator.comparingInt(
//                                a -> a.getJcxm().length() // 根据名字的长度排序
//                        ))
//                        .collect(Collectors.toList());
                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 小于范围最小值,添加下箭头
                // 大类项目名称
                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 = "";
                    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);
                    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);
                }
                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];
                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);
                }
                map.put("shsj", shsj);
                data.put(xmmc, map);
            }
        }
        return data;
@@ -2757,16 +2926,9 @@
        for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
            List<TjPdfVO> tjPdfVOS = new ArrayList<>();
            List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(), entry.getKey().getProId());
//            tjOrderDetails = new ArrayList<>(tjOrderDetails.stream()
//                    .filter(i -> StrUtil.isNotBlank(i.getProResult()))
//                    .collect(Collectors.toMap(
//                            TjOrderDetail::getProId,
//                            i -> i,
//                            (existing, replacement) -> existing
//                    ))
//                    .values());
            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());
            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")) {
@@ -2784,18 +2946,20 @@
                        }
                        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()));
//                        LtkjExamJcbgd jcbgd = jcbgdService.getOne(wrapper);
//                        if (jcbgd != null){
//                            tjPdfVO.setTs(jcbgd.getYxbx());
//                            tjPdfVO.setSj(jcbgd.getBgNr());
//                            tjPdfVO.setShys(jcbgd.getShysxm());
//                        }
//                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
//                        wrapper.eq(LtkjExamJcbgd::getTjh, tjNumber);
//                        wrapper.eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()));
                        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());
            }
            printReport.put(entry.getKey(), tjPdfVOS);
        }
@@ -2825,6 +2989,8 @@
                    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());
@@ -2835,10 +3001,17 @@
                            tjPdfVO.setCompany("/");
                        }
                        tjPdfVO.setProId(String.valueOf(tjOrderDetail.getProject().getProId()));
//                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
//                        wrapper.eq(LtkjExamJcbgd::getTjh, one.getCardId());
//                        wrapper.like(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()))
//                                .or().eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjProjectq.getHisXmbm()));
//                        wrapper.orderByDesc(LtkjExamJcbgd::getZdsj);
                        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);
@@ -2854,6 +3027,14 @@
                    }
                }
            }
//            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);
        }
    }