| | |
| | | return tjReportMapper.deleteTjReportByReId(reId); |
| | | } |
| | | |
| | | @Value("${path.filePath}") |
| | | // @Value("${path.filePath}") |
| | | private String value; |
| | | |
| | | @Override |
| | | public AjaxResult getTjReport(String tjNumber) { |
| | | //根据体检号 |
| | | //在order里查询体检状态 判断体检是否完成 |
| | | LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); |
| | | wq.eq(TjOrder::getTjNumber, tjNumber); |
| | | TjOrder tjOrder = tjOrderService.getOne(wq); |
| | | if (null != tjOrder) { |
| | | Integer checkStatus = tjOrder.getCheckStatus(); |
| | | if (checkStatus == 1) { |
| | | //查出客户个人信息 通过user_id |
| | | LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>(); |
| | | wq1.eq(TjCustomer::getCusId, tjOrder.getUserId()); |
| | | TjCustomer tjCustomer = tjCustomerService.getOne(wq1); |
| | | |
| | | //根据order表的单位id查出单位名称 |
| | | LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>(); |
| | | wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId()); |
| | | DictComp dictComp = dictCompService.getOne(wq111); |
| | | |
| | | //查出记录详情 通过order_id |
| | | LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>(); |
| | | wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId()); |
| | | List<TjOrderDetail> list = tjOrderDetailService.list(wq2); |
| | | |
| | | //遍历客户所选的项目(包含子项父项) |
| | | for (TjOrderDetail tjOrderDetail : list) { |
| | | //查出单个项目对象 赋值给对象属性 |
| | | TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); |
| | | tjOrderDetail.setProject(tjProject); |
| | | } |
| | | /* |
| | | * ====================第一部分 填充体检报告封面模板 |
| | | * */ |
| | | //根据数据库中的模板二进制文件 转pdf 创建文件夹 将pdf放进文件夹 |
| | | LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | TjReportTemplate one1 = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); |
| | | String template = one1.getTemplate(); //拿到二进制 |
| | | |
| | | //本地创建临时文件夹 |
| | | //String userId ="10000"; |
| | | //当前登录的人工号 |
| | | String userId = SecurityUtils.getLoginUser().getUsername(); |
| | | //二进制转pdf 存储在临时文件夹中 |
| | | PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + File.separator + userId + "体检报告封面模板.pdf"); |
| | | |
| | | // 模板文件路径 |
| | | String inputFileName = value + File.separator + userId + "体检报告封面模板.pdf"; |
| | | // 生成的文件路径 |
| | | String outputFileName = value + File.separator + userId + "体检报告封面页.pdf"; |
| | | OutputStream os = null; |
| | | PdfStamper ps = null; |
| | | PdfReader reader = null; |
| | | File file = new File(outputFileName); |
| | | try { |
| | | os = Files.newOutputStream(file.toPath()); |
| | | // 读入pdf表单 |
| | | reader = new PdfReader(inputFileName); |
| | | // 根据表单生成一个新的pdf |
| | | ps = new PdfStamper(reader, os); |
| | | // 获取pdf表单 |
| | | AcroFields form = ps.getAcroFields(); |
| | | // 给表单添加中文字体 |
| | | //String prefixFont = "C:Windows\\Fonts" + File.separator + "STFANGSO.TTF"; |
| | | //该字体造成类型不均匀,但是pdf转图片不乱码 |
| | | //BaseFont bf = BaseFont.createFont("C:Windows\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); |
| | | BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); |
| | | form.addSubstitutionFont(bf); |
| | | |
| | | // 填充数据给表格 |
| | | Map<String, Object> data = new HashMap<>(); |
| | | data.put("name", tjCustomer.getCusName()); |
| | | //填充性别:判断男女 |
| | | Long cusSex = tjCustomer.getCusSex(); |
| | | String sex; |
| | | if (cusSex == 0) { |
| | | sex = "男"; |
| | | } else { |
| | | sex = "女"; |
| | | } |
| | | data.put("sex", sex); |
| | | data.put("age", DateUtil.ageOfNow(tjCustomer.getCusBrithday())); |
| | | data.put("tjnumber", tjNumber); |
| | | data.put("tjdate", DateUtils.parseDateToStr("yyyy/MM/dd", tjOrder.getCreateTime())); |
| | | data.put("phone", tjCustomer.getCusPhone()); |
| | | if (dictComp == null) { |
| | | data.put("work", "无"); |
| | | } else { |
| | | data.put("work", dictComp.getCnName()); |
| | | } |
| | | |
| | | data.put("remark", "示例:身高体重" + |
| | | "\n1、合理控制饮食,少吃点" + |
| | | "\n心电图" + |
| | | "\n请注意保持!!!这里放建议/异常啥的。。。。或总检建议" + tjOrder.getCheckAdvice()); |
| | | // 遍历data 给pdf表单表格赋值 |
| | | for (String key : data.keySet()) { |
| | | form.setField(key, data.get(key).toString()); |
| | | } |
| | | //设置为无法编辑 |
| | | ps.setFormFlattening(true); |
| | | |
| | | ps.close(); |
| | | os.close(); |
| | | reader.close(); |
| | | /* |
| | | * ==========================第二部分 生成项目详情 |
| | | */ |
| | | //文档对象 实现A4纸页面 |
| | | Document document = new Document(PageSize.A4); |
| | | //document.setMarginMirroring(true); |
| | | //设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距 |
| | | document.setMargins(70, 70, 40, 40); |
| | | //这个是生成pdf的位置以及名称 |
| | | String fileName = value + File.separator + userId + "体检报告项目详情页.pdf"; |
| | | OutputStream outputStream = Files.newOutputStream(Paths.get(fileName)); |
| | | PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream); |
| | | |
| | | // 添加页眉/页脚/水印 |
| | | pdfWriter.setPageEvent((PdfPageEvent) new MyHeaderFooter());// 页眉页脚(需要时设置) |
| | | |
| | | //打开文档 |
| | | document.open(); |
| | | |
| | | // 获取数据 |
| | | Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkObjectMap = addTable(tjNumber); |
| | | 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); |
| | | |
| | | String titleName = one11.getProName(); |
| | | // 设置标题字体样式 |
| | | Font titleFonts = PdfUtils.setFont(9); |
| | | Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName); |
| | | |
| | | // 设置表格 |
| | | // 定义列名 |
| | | String[] titles = {"体检项目", "体检结果", "单位", "参考范围"}; |
| | | // 获取列表数据 |
| | | //设置表头字体样式 |
| | | Font headFont = PdfUtils.setFont(9); |
| | | // 设置正文字体样式:12号 |
| | | Font textFont = PdfUtils.setFont(9); |
| | | //创建表格 将表头字体和正文字体放进去 |
| | | PdfPTable table = setTable(headFont, textFont, titles, value); |
| | | |
| | | // 填充表格内容 |
| | | document.add(paragraph); |
| | | document.add(table); |
| | | |
| | | //判断备注是否为空 空不能显示null |
| | | if (entry.getKey().getRemark() == null) { |
| | | entry.getKey().setRemark(""); |
| | | } |
| | | |
| | | //备注 |
| | | String remark = "备注:" + entry.getKey().getRemark(); |
| | | Font remarkFonts = PdfUtils.setFont(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark); |
| | | document.add(pp); |
| | | |
| | | //主检医师 |
| | | String doctorName = "主检医师:" + entry.getKey().getDoctorName(); |
| | | Font doctorFonts = PdfUtils.setFont(9); |
| | | Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); |
| | | df.setAlignment(Element.ALIGN_RIGHT); |
| | | document.add(df); |
| | | |
| | | //分割线 |
| | | LineSeparator objectName = new LineSeparator(); |
| | | document.add(objectName); |
| | | } |
| | | /* |
| | | * document关闭的其实是文件的监听状态,writer关闭的是io流,writer创建在document之后 |
| | | * */ |
| | | document.close(); |
| | | pdfWriter.close(); |
| | | outputStream.close(); |
| | | |
| | | //=============================== 第三部分 合并体检报告封面页和体检报告项目详情页 |
| | | String[] files1 = {value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + "体检报告项目详情页.pdf"}; |
| | | String outputPath1 = value + File.separator; |
| | | String outputFileName1 = tjNumber + "体检报告.pdf"; |
| | | |
| | | File file1 = new File(outputPath1 + outputFileName1); |
| | | List<File> f = new ArrayList<>(); |
| | | for (String s : files1) { |
| | | f.add(new File(s)); |
| | | } |
| | | MergePdf.mergeFileToPDF(f, file1); |
| | | |
| | | //============================= 第四部分 将pdf路径存储数据库 文件转二进制存储和和路径存储 |
| | | TjReport tjReport = new TjReport(); |
| | | tjReport.setTjNumber(String.valueOf(tjNumber)); |
| | | tjReport.setPath(outputPath1 + outputFileName1); |
| | | String pdfBinary = getPDFBinary(outputPath1 + outputFileName1); |
| | | tjReport.setReport(pdfBinary); |
| | | tjReportService.save(tjReport); |
| | | |
| | | //将临时文件夹中的四个文件删除 |
| | | //FileUtil.del(value+"\\"+tjNumber + "体检报告.pdf"); |
| | | FileUtil.del(value + File.separator + userId + "体检报告封面模板.pdf"); |
| | | FileUtil.del(value + File.separator + userId + "体检报告项目详情页.pdf"); |
| | | FileUtil.del(value + File.separator + userId + "体检报告封面页.pdf"); |
| | | |
| | | //修改order表中的打印报告时间为当前时间 |
| | | LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | updateWrapper.eq(TjOrder::getTjNumber, tjNumber); |
| | | updateWrapper.set(TjOrder::getReportTime, new Date()); |
| | | tjOrderService.update(updateWrapper); |
| | | |
| | | |
| | | return AjaxResult.success("已生成报告!可直接点击预览!"); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return AjaxResult.error("PDF导出失败"); |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | // @Override |
| | | // public AjaxResult getTjReport(String tjNumber) { |
| | | // //根据体检号 |
| | | // //在order里查询体检状态 判断体检是否完成 |
| | | // LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); |
| | | // wq.eq(TjOrder::getTjNumber, tjNumber); |
| | | // TjOrder tjOrder = tjOrderService.getOne(wq); |
| | | // if (null != tjOrder) { |
| | | // Integer checkStatus = tjOrder.getCheckStatus(); |
| | | // if (checkStatus == 1) { |
| | | // //查出客户个人信息 通过user_id |
| | | // LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>(); |
| | | // wq1.eq(TjCustomer::getCusId, tjOrder.getUserId()); |
| | | // TjCustomer tjCustomer = tjCustomerService.getOne(wq1); |
| | | // |
| | | // //根据order表的单位id查出单位名称 |
| | | // LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>(); |
| | | // wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId()); |
| | | // DictComp dictComp = dictCompService.getOne(wq111); |
| | | // |
| | | // //查出记录详情 通过order_id |
| | | // LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>(); |
| | | // wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId()); |
| | | // List<TjOrderDetail> list = tjOrderDetailService.list(wq2); |
| | | // |
| | | // //遍历客户所选的项目(包含子项父项) |
| | | // for (TjOrderDetail tjOrderDetail : list) { |
| | | // //查出单个项目对象 赋值给对象属性 |
| | | // TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); |
| | | // tjOrderDetail.setProject(tjProject); |
| | | // } |
| | | // /* |
| | | // * ====================第一部分 填充体检报告封面模板 |
| | | // * */ |
| | | // //根据数据库中的模板二进制文件 转pdf 创建文件夹 将pdf放进文件夹 |
| | | // LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | // tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | // TjReportTemplate one1 = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); |
| | | // String template = one1.getTemplate(); //拿到二进制 |
| | | // |
| | | // //本地创建临时文件夹 |
| | | // //String userId ="10000"; |
| | | // //当前登录的人工号 |
| | | // String userId = SecurityUtils.getLoginUser().getUsername(); |
| | | // //二进制转pdf 存储在临时文件夹中 |
| | | // PDFBinaryUtil.base64StringToPDF(template, FileUtil.mkdir(value).getPath() + File.separator + userId + "体检报告封面模板.pdf"); |
| | | // |
| | | // // 模板文件路径 |
| | | // String inputFileName = value + File.separator + userId + "体检报告封面模板.pdf"; |
| | | // // 生成的文件路径 |
| | | // String outputFileName = value + File.separator + userId + "体检报告封面页.pdf"; |
| | | // OutputStream os = null; |
| | | // PdfStamper ps = null; |
| | | // PdfReader reader = null; |
| | | // File file = new File(outputFileName); |
| | | // try { |
| | | // os = Files.newOutputStream(file.toPath()); |
| | | // // 读入pdf表单 |
| | | // reader = new PdfReader(inputFileName); |
| | | // // 根据表单生成一个新的pdf |
| | | // ps = new PdfStamper(reader, os); |
| | | // // 获取pdf表单 |
| | | // AcroFields form = ps.getAcroFields(); |
| | | // // 给表单添加中文字体 |
| | | // //String prefixFont = "C:Windows\\Fonts" + File.separator + "STFANGSO.TTF"; |
| | | // //该字体造成类型不均匀,但是pdf转图片不乱码 |
| | | // //BaseFont bf = BaseFont.createFont("C:Windows\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); |
| | | // BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); |
| | | // form.addSubstitutionFont(bf); |
| | | // |
| | | // // 填充数据给表格 |
| | | // Map<String, Object> data = new HashMap<>(); |
| | | // data.put("name", tjCustomer.getCusName()); |
| | | // //填充性别:判断男女 |
| | | // Long cusSex = tjCustomer.getCusSex(); |
| | | // String sex; |
| | | // if (cusSex == 0) { |
| | | // sex = "男"; |
| | | // } else { |
| | | // sex = "女"; |
| | | // } |
| | | // data.put("sex", sex); |
| | | // data.put("age", DateUtil.ageOfNow(tjCustomer.getCusBrithday())); |
| | | // data.put("tjnumber", tjNumber); |
| | | // data.put("tjdate", DateUtils.parseDateToStr("yyyy/MM/dd", tjOrder.getCreateTime())); |
| | | // data.put("phone", tjCustomer.getCusPhone()); |
| | | // if (dictComp == null) { |
| | | // data.put("work", "无"); |
| | | // } else { |
| | | // data.put("work", dictComp.getCnName()); |
| | | // } |
| | | // |
| | | // data.put("remark", "示例:身高体重" + |
| | | // "\n1、合理控制饮食,少吃点" + |
| | | // "\n心电图" + |
| | | // "\n请注意保持!!!这里放建议/异常啥的。。。。或总检建议" + tjOrder.getCheckAdvice()); |
| | | // // 遍历data 给pdf表单表格赋值 |
| | | // for (String key : data.keySet()) { |
| | | // form.setField(key, data.get(key).toString()); |
| | | // } |
| | | // //设置为无法编辑 |
| | | // ps.setFormFlattening(true); |
| | | // |
| | | // ps.close(); |
| | | // os.close(); |
| | | // reader.close(); |
| | | // /* |
| | | // * ==========================第二部分 生成项目详情 |
| | | // */ |
| | | // //文档对象 实现A4纸页面 |
| | | // Document document = new Document(PageSize.A4); |
| | | // //document.setMarginMirroring(true); |
| | | // //设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距 |
| | | // document.setMargins(70, 70, 40, 40); |
| | | // //这个是生成pdf的位置以及名称 |
| | | // String fileName = value + File.separator + userId + "体检报告项目详情页.pdf"; |
| | | // OutputStream outputStream = Files.newOutputStream(Paths.get(fileName)); |
| | | // PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream); |
| | | // |
| | | // // 添加页眉/页脚/水印 |
| | | // pdfWriter.setPageEvent((PdfPageEvent) new MyHeaderFooter());// 页眉页脚(需要时设置) |
| | | // |
| | | // //打开文档 |
| | | // document.open(); |
| | | // |
| | | // // 获取数据 |
| | | // Map<TjOrderRemark, List<TjPdfVO>> tjOrderRemarkObjectMap = addTable(tjNumber); |
| | | // 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); |
| | | // |
| | | // String titleName = one11.getProName(); |
| | | // // 设置标题字体样式 |
| | | // Font titleFonts = PdfUtils.setFont(9); |
| | | // Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName); |
| | | // |
| | | // // 设置表格 |
| | | // // 定义列名 |
| | | // String[] titles = {"体检项目", "体检结果", "单位", "参考范围"}; |
| | | // // 获取列表数据 |
| | | // //设置表头字体样式 |
| | | // Font headFont = PdfUtils.setFont(9); |
| | | // // 设置正文字体样式:12号 |
| | | // Font textFont = PdfUtils.setFont(9); |
| | | // //创建表格 将表头字体和正文字体放进去 |
| | | // PdfPTable table = setTable(headFont, textFont, titles, value); |
| | | // |
| | | // // 填充表格内容 |
| | | // document.add(paragraph); |
| | | // document.add(table); |
| | | // |
| | | // //判断备注是否为空 空不能显示null |
| | | // if (entry.getKey().getRemark() == null) { |
| | | // entry.getKey().setRemark(""); |
| | | // } |
| | | // |
| | | // //备注 |
| | | // String remark = "备注:" + entry.getKey().getRemark(); |
| | | // Font remarkFonts = PdfUtils.setFont(9); |
| | | // Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark); |
| | | // document.add(pp); |
| | | // |
| | | // //主检医师 |
| | | // String doctorName = "主检医师:" + entry.getKey().getDoctorName(); |
| | | // Font doctorFonts = PdfUtils.setFont(9); |
| | | // Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); |
| | | // df.setAlignment(Element.ALIGN_RIGHT); |
| | | // document.add(df); |
| | | // |
| | | // //分割线 |
| | | // LineSeparator objectName = new LineSeparator(); |
| | | // document.add(objectName); |
| | | // } |
| | | // /* |
| | | // * document关闭的其实是文件的监听状态,writer关闭的是io流,writer创建在document之后 |
| | | // * */ |
| | | // document.close(); |
| | | // pdfWriter.close(); |
| | | // outputStream.close(); |
| | | // |
| | | // //=============================== 第三部分 合并体检报告封面页和体检报告项目详情页 |
| | | // String[] files1 = {value + File.separator + userId + "体检报告封面页.pdf", value + File.separator + userId + "体检报告项目详情页.pdf"}; |
| | | // String outputPath1 = value + File.separator; |
| | | // String outputFileName1 = tjNumber + "体检报告.pdf"; |
| | | // |
| | | // File file1 = new File(outputPath1 + outputFileName1); |
| | | // List<File> f = new ArrayList<>(); |
| | | // for (String s : files1) { |
| | | // f.add(new File(s)); |
| | | // } |
| | | // MergePdf.mergeFileToPDF(f, file1); |
| | | // |
| | | // //============================= 第四部分 将pdf路径存储数据库 文件转二进制存储和和路径存储 |
| | | // TjReport tjReport = new TjReport(); |
| | | // tjReport.setTjNumber(String.valueOf(tjNumber)); |
| | | // tjReport.setPath(outputPath1 + outputFileName1); |
| | | // String pdfBinary = getPDFBinary(outputPath1 + outputFileName1); |
| | | // tjReport.setReport(pdfBinary); |
| | | // tjReportService.save(tjReport); |
| | | // |
| | | // //将临时文件夹中的四个文件删除 |
| | | // //FileUtil.del(value+"\\"+tjNumber + "体检报告.pdf"); |
| | | // FileUtil.del(value + File.separator + userId + "体检报告封面模板.pdf"); |
| | | // FileUtil.del(value + File.separator + userId + "体检报告项目详情页.pdf"); |
| | | // FileUtil.del(value + File.separator + userId + "体检报告封面页.pdf"); |
| | | // |
| | | // //修改order表中的打印报告时间为当前时间 |
| | | // LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | // updateWrapper.eq(TjOrder::getTjNumber, tjNumber); |
| | | // updateWrapper.set(TjOrder::getReportTime, new Date()); |
| | | // tjOrderService.update(updateWrapper); |
| | | // |
| | | // |
| | | // return AjaxResult.success("已生成报告!可直接点击预览!"); |
| | | // |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // return AjaxResult.error("PDF导出失败"); |
| | | // } |
| | | // } |
| | | // } |
| | | // return null; |
| | | // } |
| | | |
| | | @Override |
| | | public Integer getSelectCount(Wrapper<TjReport> queryWrapper) { |