zjh
2024-03-06 b814abb328d65253e1ecf0a2ed1055d09506c414
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java
@@ -77,6 +77,8 @@
    private ITjReportTemplateService reportTemplateService;
    @Value("${path.filePath}")
    private String value;
    @Value("${path.reportServer}")
    private String urlValue;
    @Resource
    private ISysUserService userService;
    @Resource
@@ -91,14 +93,17 @@
    @Resource
    private ITbTransitionService transitionService;
    @Autowired
    private ITjBigPositiveService tjBigPositiveService;
    @GetMapping("/savePdf")
    @ApiOperation(value = "从本地存储模板到数据库")
    public AjaxResult savePdf() {
        //从文件地址读入PDF文件  仅存储一次
        String base64String = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\体检模板4.pdf");
        String base64String = PDFBinaryUtil.getPDFBinary("D:\\Tjreport\\体检模板5.pdf");
        TjReportTemplate tem = new TjReportTemplate();
        tem.setName("体检报告模板4");
        tem.setRemark("体检报告模板4");
        tem.setName("体检报告模板5");
        tem.setRemark("体检报告模板5");
        tem.setTemplate(base64String);
        tem.setFlag("1");
        tem.setOpen("0");
@@ -294,11 +299,10 @@
                tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0);
                reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2);
            }
            String template = reportTemplate.getTemplate();
            String userId = SecurityUtils.getLoginUser().getUsername();
            PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + "\\" + userId + "体检报告封面模板.pdf");
            // --------以上-------  根据数据库中的模板二进制文件  转pdf  创建文件夹  将pdf放进本地文件夹
            //判断表中有没有该体检报告  不能重复生成
            LambdaQueryWrapper<TjReport> wqa = new LambdaQueryWrapper<>();
@@ -312,6 +316,35 @@
            Integer checkStatus = tjOrder.getCheckStatus();
            if (checkStatus == 1) {
                //判断报告生成 保存类型 2024/2/29
                if ("报表".equals(reportTemplate.getPrint())){
                    TjReport tjReport = new TjReport();
                    tjReport.setTjNumber(String.valueOf(tjNumber));
                    tjReport.setPath(reportTemplate.getUrl()+"?tjNum="+tjNumber);
                    tjReport.setType("体检报告");
                    tjReport.setPrint("报表");
                    tjReportService.save(tjReport);
                    //修改order表中的打印报告时间为当前时间
                    LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>();
                    updateWrapper.eq(TjOrder::getTjNumber, tjNumber);
                    updateWrapper.set(TjOrder::getReportTime, new Date());
                    updateWrapper.set(TjOrder::getPrintLastTime, new Date());
                    updateWrapper.set(TjOrder::getDownloadLastTime, new Date());
                    updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
                    tjOrderService.update(updateWrapper);
                    return AjaxResult.success("已生成报告!可直接点击预览!");
                }
                String template = reportTemplate.getTemplate();
                String userId = SecurityUtils.getLoginUser().getUsername();
                if (template!=null){
                    PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + "\\" + userId + "体检报告封面模板.pdf");
                }
                // --------以上-------  根据数据库中的模板二进制文件  转pdf  创建文件夹  将pdf放进本地文件夹
                LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>();
                wq1.eq(TjCustomer::getCusId, tjOrder.getUserId());
                TjCustomer tjCustomer = tjCustomerService.getOne(wq1);
@@ -409,8 +442,33 @@
//                            "【5】γ-⾕氨酰转移酶增⾼;天⻔冬氨酸氨基转移酶增⾼;丙氨酸氨基转移酶增⾼\n" +
//                            "【6】轻⾄中度脂肪肝");
                    //拼接重大阳性结果
                    StringBuffer str=new StringBuffer();
                    str.append("【重大阳性项目】\n");
                    LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper=new LambdaQueryWrapper<>();
                    bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber,tjNumber);
                    final List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper);
                    if(list1!=null&&list1.size()>0){
                        for (int i = 0; i < list1.size(); i++) {
                            str.append((i+1)+"、"+list1.get(i).getProName()+";\n");
                        }
                    }else {
                        str.append("    无;\n");
                    }
                    //拼接异常项目
                    str.append("【异常情况项目】\n");
                    if(list.size()>0){
                        for (int i = 0; i < list.size(); i++) {
                            if (list.get(i).getExceptionDesc()==1){
                                str.append((i+1)+"、"+projectService.getById(list.get(i).getProId()).getProName()+";\n");
                            }
                        }
                    }else {
                        str.append("    无;\n");
                    }
                    //异常项目
                    data.put("yichang", "");
                    data.put("yichang", str.toString());
                    // 遍历data 给pdf表单表格赋值
                    for (String key : data.keySet()) {
@@ -441,17 +499,20 @@
                    Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkObjectMap = addTable(tjNumber);
                    Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkListMap = addHuaYanTable(tjNumber);
                    tjOrderRemarkObjectMap.putAll(tjOrderRemarkListMap);
                    for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : tjOrderRemarkObjectMap.entrySet()) {
                        List<TjPdfVO> value = entry.getValue();
                        LambdaQueryWrapper<TjProject> wqqq = new LambdaQueryWrapper<>();
                        wqqq.eq(TjProject::getProId, entry.getKey().getProId());
                        TjProject one11 = projectService.getOne(wqqq);
                        //判断该项目是否需要打印报告
                        if ("N".equals(one11.getNeedReport())){
                        if (null !=one11 && "N".equals(one11.getNeedReport())){
                            continue;
                        }
                        if ("1".equals(one11.getResultType())) {
                            String titleName = one11.getProName();
                        String titleName =null;
                        if (null !=one11 && "1".equals(one11.getResultType())) {
                             titleName =one11.getProName();
                            // 设置标题字体样式
                            Font titleFonts = PdfUtils.setFont(9);
                            Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
@@ -515,7 +576,12 @@
                            LineSeparator objectName = new LineSeparator();
                            document.add(objectName);
                        } else {
                            String titleName = one11.getProName();
                            if(null !=one11){
                                titleName = one11.getProName();
                            }else {
                                titleName = entry.getKey().getProName();
                            }
                            // 设置标题字体样式
                            Font titleFonts = PdfUtils.setFont(9);
                            Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
@@ -593,7 +659,7 @@
                    LambdaQueryWrapper<TjReport> rtwq = new LambdaQueryWrapper<>();
                    rtwq.eq(TjReport::getType, "心电图");
//                    rtwq.eq(TjReport::getTjNumber, tjNumber);
                    rtwq.eq(TjReport::getTjNumber, tjNumber);
                    TjReport one1111 = tjReportService.getOne(rtwq);
                    if(null !=one1111){
                        String report = one1111.getReport();
@@ -602,7 +668,7 @@
                    LambdaQueryWrapper<TjReport> rtwq12 = new LambdaQueryWrapper<>();
                    rtwq12.eq(TjReport::getType, "附件");
//                    rtwq12.eq(TjReport::getTjNumber, tjNumber);
                    rtwq12.eq(TjReport::getTjNumber, tjNumber);
                    TjReport one111112 = tjReportService.getOne(rtwq12);
                    if(null !=one111112){
                        String report12 = one111112.getReport();
@@ -638,10 +704,11 @@
                    TjReport tjReport = new TjReport();
                    tjReport.setTjNumber(String.valueOf(tjNumber));
                    tjReport.setPath(outputPath1 + outputFileName1);
                    tjReport.setPath(urlValue + outputFileName1);
                    String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
                    tjReport.setReport(pdfBinary);
                    tjReport.setType("体检报告");
                    tjReport.setPrint("pdf");
                    tjReportService.save(tjReport);
                    //FileUtil.del(value + "\\" + tjNumber + "体检报告.pdf");
@@ -672,7 +739,7 @@
        }
        return AjaxResult.success("该用户体检未完成,不能打印报告!!!");
    }
    //非化验项目报告
    public Map<TjOrderRemark, List<TjPdfVO>> addTable(String tjNumber) {
        //创建map 键为父项目  值为子项目集合
        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
@@ -682,11 +749,15 @@
        wq1.eq(TjOrder::getTjNumber, tjNumber);
        TjOrder one = tjOrderService.getOne(wq1);
/*
        //拿到体检记录的orderid,查出项目详细信息
        LambdaQueryWrapper<TjOrderDetail> wq = new LambdaQueryWrapper<>();
        wq.eq(TjOrderDetail::getOrderId, one.getOrderId());
        //20230323判断项目已检
        wq.ne(TjOrderDetail::getTjStatus, 0);
        wq.ne(TjOrderDetail::getProId,projectService.getHuaYanProId());
        wq.eq(TjOrderDetail::getProId,projectService.getNotCcCtXdtProId());
//        wq.notIn(TjOrderDetail::getProId,projectService.getNneedReprotProId());
        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.list(wq);
        //遍历体检记录 将项目的具体信息
@@ -697,27 +768,106 @@
                tjOrderDetail.setProject(tjProject);
            }
        }
*/
        LambdaQueryWrapper<TjCustomer> wq22 = new LambdaQueryWrapper<>();
        wq22.eq(TjCustomer::getCusId, one.getUserId());
        TjCustomer customer = tjCustomerService.getOne(wq22);
        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","251","271");
        wqq.notIn(TjOrderRemark::getProId,projectService.getNneedReprotProId());
        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
        for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
            printReport.put(tjOrderRemark, null);
            printReport.put(tjOrderRemark,null);
        }
        extracted(printReport,one, customer);
        return printReport;
    }
    //化验项目报告
    public Map<TjOrderRemark, List<TjPdfVO>> addHuaYanTable(String tjNumber) {
        //创建map 键为父项目  值为子项目集合
        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
        //查到该客户的体检记录
//        LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
//        wq1.eq(TjOrder::getTjNumber, tjNumber);
//        TjOrder one = tjOrderService.getOne(wq1);
        //拿到体检记录的orderid,查出项目详细信息
//        LambdaQueryWrapper<TjOrderDetail> wq = new LambdaQueryWrapper<>();
//        wq.eq(TjOrderDetail::getOrderId, one.getOrderId());
//        //20230323判断项目已检
//        wq.ne(TjOrderDetail::getTjStatus, 0);
//        wq.eq(TjOrderDetail::getProId,projectService.getHuaYanProId());
//        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.list(wq);
        List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.addHuaYanTable(tjNumber);
        //遍历体检记录 将项目的具体信息
        //遍历客户所选的项目(包含子项父项)
//        for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
//            TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
//            if (null != tjProject) {
//                tjOrderDetail.setProject(tjProject);
//            }
//        }
//        LambdaQueryWrapper<TjCustomer> wq22 = new LambdaQueryWrapper<>();
//        wq22.eq(TjCustomer::getCusId, one.getUserId());
//        TjCustomer customer = tjCustomerService.getOne(wq22);
//        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
//        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
//        wqq.eq(TjOrderRemark::getDeptId,"241");
//        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.addHuaYanTable(tjNumber);
        for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
            printReport.put(tjOrderRemark,null);
        }
        List<Object> toRemoveKeys = new ArrayList<>();
        for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
            List<TjPdfVO> tjPdfVOS = new ArrayList<>();
            for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
                    if(entry.getKey().getProId().equals(tjOrderDetail.getProId())){
                        TjPdfVO tjPdfVO = new TjPdfVO();
                        tjPdfVO.setProName(tjOrderDetail.getProName());
                        if(null !=tjOrderDetail.getYcbz() && !tjOrderDetail.getYcbz().equals("")){
                            tjPdfVO.setProResult(tjOrderDetail.getProResult()+" ["+tjOrderDetail.getYcbz()+"]");
                        }else {
                            tjPdfVO.setProResult(tjOrderDetail.getProResult());
                        }
                        tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
                        tjPdfVO.setStandardValue(tjOrderDetail.getStanId());
                        tjPdfVO.setCompany(tjOrderDetail.getProAdvice());
                        tjPdfVOS.add(tjPdfVO);
                    }
            }
            printReport.put(entry.getKey(), tjPdfVOS);
            if(tjPdfVOS.size()==0)
            {toRemoveKeys.add(entry.getKey());}
        }
        toRemoveKeys.forEach(printReport::remove);
        return printReport;
    }
    private void extracted(Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
        for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
            List<TjPdfVO> tjPdfVOS = new ArrayList<>();
//            TjOrder one = tjOrderService.getOrderByTjNum(entry.getKey().getTjNumber());
            List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(),entry.getKey().getProId());
            for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
                TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
                if (null != tjProject) {
                    tjOrderDetail.setProject(tjProject);
                }
                if (null == tjOrderDetail.getProject()) {
                    System.out.println("'''''''''''''''''''''''''''''''''''" + tjOrderDetail.getOrderDetailId());
                }
                if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId())) {
                    LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>();
                    wq6.eq(TjStandard::getProId, tjOrderDetail.getProId());
                    List<TjStandard> list2 = tjStandardService.list(wq6);
@@ -772,8 +922,33 @@
            }
            printReport.put(entry.getKey(), tjPdfVOS);
        }
        return printReport;
    }
    @GetMapping("/isPdfOrJimu")
    @ApiOperation(value = "判断报告打开类型")
    public AjaxResult isPdfOrJimu(String tjNumber) {
        Map<String,String> res=new HashMap<>();
        LambdaQueryWrapper<TjReport> we = new LambdaQueryWrapper<>();
        we.eq(TjReport::getTjNumber, tjNumber);
        we.eq(TjReport::getType, "体检报告");
        TjReport one = tjReportService.getOne(we);
        if (one==null){
            return AjaxResult.error("暂无体检报告");
        }
        if ("pdf".equals(one.getPrint())){
            res.put("flag","0");
            return AjaxResult.success(res);
        }else if ("报表".equals(one.getPrint())){
            res.put("flag","1");
            res.put("url",one.getPath());
            return AjaxResult.success(res);
        }else {
            return AjaxResult.error("暂无体检报告");
        }
    }
    @GetMapping("/preview/{flag}/{TjNumber}")
@@ -805,6 +980,7 @@
        if (one == null) {
            return;
        }
        String userId = SecurityUtils.getLoginUser().getUsername();
        PDFBinaryUtil.base64StringToPDF(one.getReport(), FileUtil.mkdir(value).getPath() + "\\" + userId + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf");
        //String filePath = one.getPath();