| | |
| | | |
| | | import java.io.*; |
| | | import java.net.URL; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Paths; |
| | | import java.text.NumberFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | |
| | | import com.itextpdf.text.*; |
| | | import com.itextpdf.text.pdf.*; |
| | | import com.itextpdf.text.pdf.draw.LineSeparator; |
| | | import com.ltkj.common.annotation.Log; |
| | | import com.ltkj.common.core.domain.entity.SysDictData; |
| | | import com.ltkj.common.utils.DateUtils; |
| | | import com.ltkj.common.utils.PDFDocumentUtil; |
| | | import com.ltkj.common.utils.SecurityUtils; |
| | | import com.ltkj.common.utils.StringUtils; |
| | | import com.ltkj.framework.config.MatchUtils; |
| | | import com.ltkj.hosp.domain.*; |
| | | import com.ltkj.hosp.service.*; |
| | | import com.ltkj.hosp.vodomain.UpdateOrderRemarkVo; |
| | | import com.ltkj.mall.mallOrderUtils.TjConstants; |
| | | import com.ltkj.system.service.ISysConfigService; |
| | | import com.ltkj.system.service.ISysDictDataService; |
| | |
| | | import com.ltkj.web.config.pdfutils.MyHeaderFooter; |
| | | import com.ltkj.web.config.pdfutils.PDFBinaryUtil; |
| | | import com.ltkj.web.config.pdfutils.PdfUtils; |
| | | import com.ltkj.web.controller.his.HisPDFUtil; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import com.ltkj.common.core.controller.BaseController; |
| | | import com.ltkj.common.core.domain.AjaxResult; |
| | |
| | | private ITjReportTemplateService reportTemplateService; |
| | | @Value("${path.filePath}") |
| | | private String value; |
| | | @Value("${path.reportServer}") |
| | | private String urlValue; |
| | | @Resource |
| | | private ISysUserService userService; |
| | | @Resource |
| | |
| | | |
| | | @Autowired |
| | | private ITjBigPositiveService tjBigPositiveService; |
| | | @Autowired |
| | | private HisPDFUtil hisPDFUtil; |
| | | |
| | | @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"); |
| | | final boolean save = reportTemplateService.save(tem); |
| | | if(save){ |
| | | if (save) { |
| | | return AjaxResult.success("保存成功"); |
| | | } |
| | | return AjaxResult.success("保存失败"); |
| | |
| | | // return toAjax(tjReportService.deleteTjReportByReIds(reIds)); |
| | | // }*/ |
| | | |
| | | @Autowired |
| | | private TjCheckController tjCheckController; |
| | | |
| | | @GetMapping("/toPdf/{TjNumber}") |
| | | @ApiOperation(value = "打印体检报告为pdf") |
| | | @Transactional |
| | | public AjaxResult toPdf(@PathVariable("TjNumber") @ApiParam(value = "体检号") String tjNumber) { |
| | | AjaxResult error = null; |
| | | // 之前的代码 优化速度 |
| | | // System.out.println("----------------------------------oldFun开始-------------------------------------------------------"); |
| | | // error = oldFun(tjNumber); |
| | | // System.out.println("--------------------------------------结束---------------------------------------------------"); |
| | | // 撤销操作 |
| | | // revocationReport(tjNumber); |
| | | // 根据某人tj号以及ProId进行打印前的请求 |
| | | // tjCheckController.getTjdetailList(tjNumber,null,1); |
| | | // List<UpdateOrderRemarkVo> updateOrderRemarkVos = new ArrayList<>(); |
| | | // UpdateOrderRemarkVo remarkVo = new UpdateOrderRemarkVo(); |
| | | // remarkVo.setRemarks("未见异常"); |
| | | // remarkVo.setTjNumber("02132240308102232"); |
| | | // remarkVo.setProId("1633660948860522555"); |
| | | // updateOrderRemarkVos.add(remarkVo); |
| | | // tjCheckController.checkUpdateOrderRemark(updateOrderRemarkVos); |
| | | // System.out.println("---------------------------------------newFun开始--------------------------------------------------"); |
| | | // 以前测试pdf方法 |
| | | // error = newFun(tjNumber); |
| | | // System.out.println("-------------------------------------------结束----------------------------------------------"); |
| | | // 撤销 |
| | | // revocationReport(tjNumber); |
| | | // if (error != null) { |
| | | // return error; |
| | | // } |
| | | // return AjaxResult.success("该用户体检未完成,不能打印报告!!!"); |
| | | int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber); |
| | | if (num > 0) { |
| | | return AjaxResult.error("有延期项目暂不能生成报告!!!"); |
| | | } |
| | | //判断表中有没有该体检报告 不能重复生成 |
| | | LambdaQueryWrapper<TjReport> wqa = new LambdaQueryWrapper<>(); |
| | | wqa.eq(TjReport::getTjNumber, tjNumber); |
| | | wqa.eq(TjReport::getType, "体检报告"); |
| | | Integer count = tjReportService.getSelectCount(wqa); |
| | | if (count != 0) { |
| | | return AjaxResult.error("该客户报告已生成!不能重复生成!可直接预览或打印!"); |
| | | } |
| | | String configByKey = configService.selectConfigByKey("sfkqdyhis"); |
| | | if (configByKey.equals("Y")) { |
| | | LambdaQueryWrapper<TjOrder> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(TjOrder::getTjNumber, tjNumber); |
| | | TjOrder tjOrder = tjOrderService.getOne(queryWrapper); |
| | | if (null != tjOrder) { |
| | | LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | TjReportTemplate reportTemplate = null; |
| | | if (tjOrder.getTjCategory() != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq = new LambdaQueryWrapper<>(); |
| | | wqq.eq(SysDictData::getDictType, "dict_tjtype"); |
| | | wqq.eq(SysDictData::getDictValue, tjOrder.getTjCategory()); |
| | | SysDictData one = dictDataService.getOne(wqq); |
| | | if (one != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq1 = new LambdaQueryWrapper<>(); |
| | | wqq1.eq(SysDictData::getDictType, "report_template_type"); |
| | | wqq1.eq(SysDictData::getDictLabel, one.getDictLabel()); |
| | | SysDictData one1 = dictDataService.getOne(wqq1); |
| | | if (one1 != null) { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue()); |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2); |
| | | } |
| | | Integer checkStatus = tjOrder.getCheckStatus(); |
| | | if (checkStatus == 1) { |
| | | String hisRegistrationId = tjOrder.getCardId(); |
| | | Date createTime = tjOrder.getCreateTime(); |
| | | Date finishTime = tjOrder.getFinishTime(); |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String ksrq = dateFormat.format(createTime); |
| | | String jsrq = dateFormat.format(finishTime); |
| | | HashMap<String, Object> params = new HashMap<>(); |
| | | params.put("his_registration_id", hisRegistrationId); |
| | | params.put("ksbm", ""); |
| | | params.put("pationid", ""); |
| | | params.put("ksrq", ksrq); |
| | | params.put("jsrq", jsrq); |
| | | params.put("pagecount", 100); |
| | | params.put("page", 1); |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | return hisPDFUtil.execHisRequest(map, params, tjOrder, reportTemplate); |
| | | } else { |
| | | return AjaxResult.error("请先总检"); |
| | | } |
| | | } |
| | | } |
| | | return AjaxResult.error(); |
| | | } |
| | | |
| | | private AjaxResult newFun(String tjNumber) { |
| | | long startTime = System.currentTimeMillis(); |
| | | int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber); |
| | | if (num > 0) { |
| | | return AjaxResult.error("有延期项目暂不能生成报告!!!"); |
| | | } |
| | | LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); |
| | | wq.eq(TjOrder::getTjNumber, tjNumber); |
| | | TjOrder tjOrder = tjOrderService.getOne(wq); |
| | | if (null != tjOrder) { |
| | | LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | TjReportTemplate reportTemplate = null; |
| | | if (tjOrder.getTjCategory() != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq = new LambdaQueryWrapper<>(); |
| | | wqq.eq(SysDictData::getDictType, "dict_tjtype"); |
| | | wqq.eq(SysDictData::getDictValue, tjOrder.getTjCategory()); |
| | | SysDictData one = dictDataService.getOne(wqq); |
| | | if (one != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq1 = new LambdaQueryWrapper<>(); |
| | | wqq1.eq(SysDictData::getDictType, "report_template_type"); |
| | | wqq1.eq(SysDictData::getDictLabel, one.getDictLabel()); |
| | | SysDictData one1 = dictDataService.getOne(wqq1); |
| | | if (one1 != null) { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue()); |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2); |
| | | } |
| | | //判断表中有没有该体检报告 不能重复生成 |
| | | LambdaQueryWrapper<TjReport> wqa = new LambdaQueryWrapper<>(); |
| | | wqa.eq(TjReport::getTjNumber, tjNumber); |
| | | wqa.eq(TjReport::getType, "体检报告"); |
| | | Integer count = tjReportService.getSelectCount(wqa); |
| | | if (count != 0) { |
| | | return AjaxResult.error("该客户报告已生成!不能重复生成!可直接预览或打印!"); |
| | | } |
| | | 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) { |
| | | return AjaxResult.error("没有该模板"); |
| | | } |
| | | // --------以上------- 根据数据库中的模板二进制文件 转pdf 创建文件夹 将pdf放进本地文件夹 |
| | | LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>(); |
| | | wq1.eq(TjCustomer::getCusId, tjOrder.getUserId()); |
| | | TjCustomer tjCustomer = tjCustomerService.getOne(wq1); |
| | | LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>(); |
| | | wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId()); |
| | | DictComp dictComp = dictCompService.getOne(wq111); |
| | | LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>(); |
| | | wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId()); |
| | | //20230306判断该项目是否退费/缴费 |
| | | wq2.isNotNull(TjOrderDetail::getFlowingWaterId); |
| | | //20230323判断该项目是否弃检/未检 |
| | | // wq2.eq(TjOrderDetail::getTjStatus,1); |
| | | List<TjOrderDetail> list = tjOrderDetailService.list(wq2); |
| | | for (TjOrderDetail tjOrderDetail : list) { |
| | | TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); |
| | | tjOrderDetail.setProject(tjProject); |
| | | } |
| | | // 共计耗时5695毫秒 以下代码耗时3528 |
| | | // TODO PDF创建优化 |
| | | long pdfMkStart = System.currentTimeMillis(); |
| | | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
| | | PdfStamper ps = null; |
| | | PdfReader reader = null; |
| | | try { |
| | | // 读入pdf表单 |
| | | reader = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template))); |
| | | // 根据表单生成一个新的pdf |
| | | ps = new PdfStamper(reader, byteArrayOutputStream); |
| | | // 获取pdf表单 |
| | | AcroFields form = ps.getAcroFields(); |
| | | //该字体造成类型不均匀,但是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<>(); |
| | | // 设置用户信息 |
| | | setUserInfo(tjNumber, tjOrder, tjCustomer, dictComp, list, data); |
| | | //封面页下面的总检建议显示 |
| | | if (tjOrder.getCheckAdvice() == null) { |
| | | data.put("remark", "无"); |
| | | } else { |
| | | data.put("remark", tjOrder.getCheckAdvice()); |
| | | } |
| | | //封面页下面的总检建议显示 |
| | | if (tjOrder.getCheckDoctor() == null) { |
| | | data.put("docname", "无"); |
| | | } else { |
| | | data.put("docname", tjOrder.getCheckDoctor()); |
| | | } |
| | | //异常项目 |
| | | // data.put("yichang", "【1】屈光不正\n" + |
| | | // "【2】扁桃体肥⼤\n" + |
| | | // "【3】体重指数增⾼\n" + |
| | | // "【4】⾎脂异常(总胆固醇增⾼;⽢油三酯增⾼)\n" + |
| | | // "【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).append("、").append(list1.get(i).getProName()).append(";\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).append("、").append(projectService.getById(list.get(i).getProId()).getProName()).append(";\n"); |
| | | // } |
| | | // } |
| | | int[] index = {0}; |
| | | List<TjOrderDetail> collect = list.stream() |
| | | .filter(item -> item.getExceptionDesc() == 1).collect(Collectors.toList()); |
| | | if (collect.isEmpty()) { |
| | | str.append(" 无;\n"); |
| | | } else { |
| | | collect.forEach(item -> str.append(index[0]++ + 1).append("、").append(projectService.getById(item.getProId()).getProName()).append(";\n")); |
| | | } |
| | | } else { |
| | | str.append(" 无;\n"); |
| | | } |
| | | //异常项目 |
| | | data.put("yichang", str.toString()); |
| | | // 遍历data 给pdf表单表格赋值 |
| | | for (String key : data.keySet()) { |
| | | form.setField(key, data.get(key).toString()); |
| | | } |
| | | System.out.println("pdf填充表单数据耗时:"+(System.currentTimeMillis() - pdfMkStart)); |
| | | //设置为无法编辑 |
| | | ps.setFormFlattening(true); |
| | | ps.close(); |
| | | reader.close(); |
| | | // 将修改后的PDF内容写入 |
| | | byte[] bytes = byteArrayOutputStream.toByteArray(); |
| | | // 创建新的PDF文档 |
| | | Document document = new Document(PageSize.A4); |
| | | ByteArrayOutputStream finalOutPut = new ByteArrayOutputStream(); |
| | | PdfCopy copy = new PdfCopy(document, finalOutPut); |
| | | document.open(); |
| | | reader = new PdfReader(bytes); |
| | | int numberOfPages = reader.getNumberOfPages(); |
| | | for (int i = 1; i <= numberOfPages; i++) { |
| | | PdfImportedPage page = copy.getImportedPage(reader, i); |
| | | copy.addPage(page); |
| | | } |
| | | // 添加详情页 |
| | | document.newPage(); |
| | | reader.close(); |
| | | ByteArrayOutputStream infoByteArrayOutputStream = setInfoPage(userId, tjNumber); |
| | | reader = new PdfReader(infoByteArrayOutputStream.toByteArray()); |
| | | int numberOfPages1 = reader.getNumberOfPages(); |
| | | for (int i = 1; i <= numberOfPages1; i++) { |
| | | PdfImportedPage page = copy.getImportedPage(reader, i); |
| | | copy.addPage(page); |
| | | } |
| | | infoByteArrayOutputStream.close(); |
| | | // 心电图以及附件 |
| | | // 因数据库表存放base64导致查询缓慢 这里执行缓慢 |
| | | // 在这里增加一条查询count 对于没有追加附件的 提升速度 |
| | | long fujianStart = System.currentTimeMillis(); |
| | | LambdaQueryWrapper<TjReport> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(TjReport::getTjNumber, tjNumber) |
| | | .and(item -> item.eq(TjReport::getType, "附件").or().eq(TjReport::getType, "心电图")); |
| | | Integer selectCount = tjReportService.getSelectCount(queryWrapper); |
| | | if (selectCount > 0) { |
| | | String base64XinDianTu = null; |
| | | String base64FuJian = null; |
| | | List<TjReport> reportList = tjReportService.list(queryWrapper); |
| | | TjReport xinDianTu = null; |
| | | TjReport fuJian = null; |
| | | if (!reportList.isEmpty()) { |
| | | for (TjReport tjReport : reportList) { |
| | | if ("附件".equals(tjReport.getType())) { |
| | | fuJian = tjReport; |
| | | base64FuJian = fuJian.getReport(); |
| | | } else { |
| | | xinDianTu = tjReport; |
| | | base64XinDianTu = xinDianTu.getReport(); |
| | | } |
| | | } |
| | | } |
| | | if (xinDianTu != null) { |
| | | if (fuJian != null) { |
| | | addPageByPDFBase64(copy, base64FuJian); |
| | | document.newPage(); |
| | | addPageByPDFBase64(copy, base64XinDianTu); |
| | | } else { |
| | | addPageByPDFBase64(copy, base64XinDianTu); |
| | | } |
| | | } else { |
| | | if (fuJian != null) { |
| | | addPageByPDFBase64(copy, base64FuJian); |
| | | } |
| | | } |
| | | } |
| | | long fujianEnd = System.currentTimeMillis(); |
| | | System.out.println("附件查询耗时:"+(fujianEnd - fujianStart)); |
| | | System.out.println("文件保存前耗时:"+(fujianEnd - pdfMkStart)); |
| | | // 保存pdf文件 |
| | | copy.close(); |
| | | String outputPath1 = value + "\\"; |
| | | String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "new_体检报告.pdf"; |
| | | File file = new File(outputPath1 + outputFileName1); |
| | | BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file)); |
| | | outputStream.write(finalOutPut.toByteArray()); |
| | | outputStream.flush(); |
| | | outputStream.close(); |
| | | document.close(); |
| | | finalOutPut.close(); |
| | | reader.close(); |
| | | // 保存数据 |
| | | TjReport tjReport = new TjReport(); |
| | | tjReport.setTjNumber(String.valueOf(tjNumber)); |
| | | tjReport.setPath(urlValue + outputFileName1); |
| | | String pdfBinary = getPDFBinary(outputPath1 + outputFileName1); |
| | | tjReport.setReport(pdfBinary); |
| | | tjReport.setType("体检报告"); |
| | | tjReport.setPrint("pdf"); |
| | | 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); |
| | | long entTime = System.currentTimeMillis(); |
| | | System.out.println("PDF开始创建到结束耗时:" + (entTime - pdfMkStart)); |
| | | System.out.println("总耗时:" + (entTime - startTime) + "ms"); |
| | | return AjaxResult.success("已生成报告!可直接点击预览!"); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return AjaxResult.success("PDF导出失败"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | private void setUserInfo(String tjNumber, TjOrder tjOrder, TjCustomer tjCustomer, DictComp dictComp, List<TjOrderDetail> list, Map<String, Object> data) { |
| | | //填充性别:判断男女 |
| | | Long cusSex = tjCustomer.getCusSex(); |
| | | String sex; |
| | | String name1; |
| | | String tjtype; |
| | | if (cusSex == 0) { |
| | | sex = "男"; |
| | | name1 = tjCustomer.getCusName() + "先生"; |
| | | } else { |
| | | sex = "女"; |
| | | name1 = tjCustomer.getCusName() + "女士"; |
| | | } |
| | | data.put("name", tjCustomer.getCusName()); |
| | | data.put("cusId", tjCustomer.getCusId()); |
| | | data.put("name1", name1); |
| | | if ("1".equals(tjOrder.getTjType())) { |
| | | tjtype = "团队"; |
| | | data.put("tjtype", tjtype); |
| | | } else { |
| | | tjtype = "个人"; |
| | | data.put("tjtype", tjtype); |
| | | } |
| | | data.put("dstype", "统一"); |
| | | 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()); |
| | | data.put("idcard", MatchUtils.hideIdCardNum(tjCustomer.getCusIdcard())); |
| | | data.put("num1", list.size()); |
| | | data.put("num2", 0); |
| | | data.put("num3", 4); |
| | | if (dictComp == null) { |
| | | data.put("work", "无"); |
| | | } else { |
| | | data.put("work", dictComp.getCnName()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据base64的PDF文件添加一页 |
| | | * |
| | | * @param copy pdf复制对象 |
| | | * @param base64XinDianTu base64 pdf文件 |
| | | * @throws IOException |
| | | * @throws BadPdfFormatException |
| | | */ |
| | | private void addPageByPDFBase64(PdfCopy copy, String base64XinDianTu) throws IOException, BadPdfFormatException { |
| | | byte[] pdfBytes = Base64.getDecoder().decode(base64XinDianTu); |
| | | PdfReader pdfReader = new PdfReader(pdfBytes); |
| | | int number = pdfReader.getNumberOfPages(); |
| | | for (int i = 1; i <= number; i++) { |
| | | PdfImportedPage importedPage = copy.getImportedPage(pdfReader, i); |
| | | copy.addPage(importedPage); |
| | | } |
| | | } |
| | | |
| | | |
| | | private ByteArrayOutputStream setInfoPage(String userId, String tjNumber) throws IOException, DocumentException { |
| | | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
| | | //文档对象 实现A4纸页面 |
| | | Document document = new Document(PageSize.A4); |
| | | PdfWriter pdfWriter = PdfWriter.getInstance(document, byteArrayOutputStream); |
| | | //document.setMarginMirroring(true); |
| | | //设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距 |
| | | document.setMargins(70, 70, 40, 40); |
| | | //pdfWriter.setPageEvent(new MyHeaderFooter());// 页眉页脚 |
| | | document.open(); |
| | | document.add(new Header("健康体检结果", "健康体检结果")); |
| | | 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 (null != one11 && "N".equals(one11.getNeedReport())) { |
| | | continue; |
| | | } |
| | | String titleName = null; |
| | | if (null != one11 && "1".equals(one11.getResultType())) { |
| | | 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 = PdfUtils.setTable1(headFont, textFont, titles, value); |
| | | document.add(paragraph); |
| | | document.add(table); |
| | | //判断备注是否为空 空不能显示null |
| | | if (entry.getKey().getRemark() == null) { |
| | | entry.getKey().setRemark(""); |
| | | } |
| | | 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(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring); |
| | | document.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(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring); |
| | | document.add(pp); |
| | | } |
| | | } else { |
| | | Font remarkFonts = PdfUtils.setFont(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark); |
| | | document.add(pp); |
| | | } |
| | | //判断主检医师是否为空 空不能显示null |
| | | if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { |
| | | //主检医师 |
| | | String doctorName = "主检医师:" + userService.getById(entry.getKey().getDoctorName()).getNickName(); |
| | | Font doctorFonts = PdfUtils.setFont(9); |
| | | Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); |
| | | df.setAlignment(Element.ALIGN_RIGHT); |
| | | document.add(df); |
| | | } else { |
| | | String doctorName = "主检医师:" + "无"; |
| | | 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); |
| | | } else { |
| | | if (null != one11) { |
| | | titleName = one11.getProName(); |
| | | } else { |
| | | titleName = entry.getKey().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 = PdfUtils.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(); |
| | | 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(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring); |
| | | document.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(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring); |
| | | document.add(pp); |
| | | } |
| | | } else { |
| | | Font remarkFonts = PdfUtils.setFont(9); |
| | | Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark); |
| | | document.add(pp); |
| | | } |
| | | //判断主检医师是否为空 空不能显示null |
| | | if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { |
| | | //主检医师 |
| | | String doctorName = "主检医师:" + userService.getById(entry.getKey().getDoctorName()).getNickName(); |
| | | Font doctorFonts = PdfUtils.setFont(9); |
| | | Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); |
| | | df.setAlignment(Element.ALIGN_RIGHT); |
| | | document.add(df); |
| | | } else { |
| | | String doctorName = "主检医师:" + "无"; |
| | | 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.close(); |
| | | pdfWriter.close(); |
| | | return byteArrayOutputStream; |
| | | } |
| | | |
| | | private AjaxResult oldFun(String tjNumber) { |
| | | long startTime = System.currentTimeMillis(); |
| | | int num = tjOrderRemarkService.getTjYqOrderRemarkByTjNum(tjNumber); |
| | | if (num > 0) return AjaxResult.error("有延期项目暂不能生成报告!!!"); |
| | | LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); |
| | |
| | | |
| | | if (null != tjOrder) { |
| | | LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | TjReportTemplate reportTemplate =null; |
| | | if (tjOrder.getTjCategory()!=null){ |
| | | TjReportTemplate reportTemplate = null; |
| | | if (tjOrder.getTjCategory() != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq = new LambdaQueryWrapper<>(); |
| | | wqq.eq(SysDictData::getDictType, "dict_tjtype"); |
| | | wqq.eq(SysDictData::getDictValue, tjOrder.getTjCategory()); |
| | | SysDictData one = dictDataService.getOne(wqq); |
| | | if (one!=null){ |
| | | if (one != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq1 = new LambdaQueryWrapper<>(); |
| | | wqq1.eq(SysDictData::getDictType, "report_template_type"); |
| | | wqq1.eq(SysDictData::getDictLabel, one.getDictLabel()); |
| | | SysDictData one1 = dictDataService.getOne(wqq1); |
| | | if (one1!=null){ |
| | | if (one1 != null) { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue()); |
| | | }else { |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | }else { |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); |
| | | }else { |
| | | } else { |
| | | 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<>(); |
| | |
| | | |
| | | 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); |
| | |
| | | // "【6】轻⾄中度脂肪肝"); |
| | | |
| | | //拼接重大阳性结果 |
| | | StringBuffer str=new StringBuffer(); |
| | | StringBuffer str = new StringBuffer(); |
| | | str.append("【重大阳性项目】\n"); |
| | | LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper=new LambdaQueryWrapper<>(); |
| | | bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber,tjNumber); |
| | | LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber); |
| | | final List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper); |
| | | if(list1!=null&&list1.size()>0){ |
| | | if (list1 != null && list1.size() > 0) { |
| | | for (int i = 0; i < list1.size(); i++) { |
| | | str.append((i+1)+"、"+list1.get(i).getProName()+";\n"); |
| | | str.append((i + 1) + "、" + list1.get(i).getProName() + ";\n"); |
| | | } |
| | | }else { |
| | | } else { |
| | | str.append(" 无;\n"); |
| | | } |
| | | //拼接异常项目 |
| | | str.append("【异常情况项目】\n"); |
| | | if(list.size()>0){ |
| | | 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"); |
| | | if (list.get(i).getExceptionDesc() == 1) { |
| | | str.append((i + 1) + "、" + projectService.getById(list.get(i).getProId()).getProName() + ";\n"); |
| | | } |
| | | } |
| | | }else { |
| | | } else { |
| | | str.append(" 无;\n"); |
| | | } |
| | | |
| | |
| | | //设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距 |
| | | document.setMargins(70, 70, 40, 40); |
| | | //生成pdf的位置以及名称 |
| | | String fileName = value + "\\" + userId +tjNumber+ "体检报告项目详情页.pdf"; |
| | | String fileName = value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf"; |
| | | OutputStream outputStream = Files.newOutputStream(Paths.get(fileName)); |
| | | PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream); |
| | | |
| | |
| | | |
| | | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | rtwq.eq(TjReport::getType, "心电图"); |
| | | rtwq.eq(TjReport::getTjNumber, tjNumber); |
| | | TjReport one1111 = tjReportService.getOne(rtwq); |
| | | if(null !=one1111){ |
| | | if (null != one1111) { |
| | | String report = one1111.getReport(); |
| | | PDFBinaryUtil.base64StringToPDF(report, FileUtil.mkdir(value).getPath() + "\\" +tjNumber+ userId + "心电图.pdf"); |
| | | PDFBinaryUtil.base64StringToPDF(report, FileUtil.mkdir(value).getPath() + "\\" + tjNumber + userId + "心电图.pdf"); |
| | | } |
| | | |
| | | LambdaQueryWrapper<TjReport> rtwq12 = new LambdaQueryWrapper<>(); |
| | | rtwq12.eq(TjReport::getType, "附件"); |
| | | rtwq12.eq(TjReport::getTjNumber, tjNumber); |
| | | TjReport one111112 = tjReportService.getOne(rtwq12); |
| | | if(null !=one111112){ |
| | | if (null != one111112) { |
| | | String report12 = one111112.getReport(); |
| | | PDFBinaryUtil.base64StringToPDF(report12, FileUtil.mkdir(value).getPath() + "\\" +tjNumber+ userId + "附件.pdf"); |
| | | PDFBinaryUtil.base64StringToPDF(report12, FileUtil.mkdir(value).getPath() + "\\" + tjNumber + userId + "附件.pdf"); |
| | | } |
| | | |
| | | //合并 |
| | | String[] files1=null; |
| | | if (one1111!=null ){ |
| | | if (one111112!=null){ |
| | | files1 = new String[ ]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "附件.pdf", value + "\\" + tjNumber + userId + "心电图.pdf"}; |
| | | }else { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf",value + "\\" + tjNumber + userId + "心电图.pdf"}; |
| | | String[] files1 = null; |
| | | if (one1111 != null) { |
| | | if (one111112 != null) { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "附件.pdf", value + "\\" + tjNumber + userId + "心电图.pdf"}; |
| | | } else { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "心电图.pdf"}; |
| | | } |
| | | }else { |
| | | if (one111112!=null){ |
| | | } else { |
| | | if (one111112 != null) { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf", value + "\\" + tjNumber + userId + "附件.pdf"}; |
| | | }else { |
| | | } else { |
| | | files1 = new String[]{value + "\\" + userId + "体检报告封面页.pdf", value + "\\" + userId + tjNumber + "体检报告项目详情页.pdf"}; |
| | | } |
| | | } |
| | |
| | | |
| | | 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"); |
| | |
| | | updateWrapper.set(TjOrder::getDownloadLastTime, new Date()); |
| | | updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END); |
| | | tjOrderService.update(updateWrapper); |
| | | |
| | | long entTime = System.currentTimeMillis(); |
| | | System.out.println(entTime - startTime + "ms"); |
| | | return AjaxResult.success("已生成报告!可直接点击预览!"); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return AjaxResult.success("PDF导出失败"); |
| | | }finally { |
| | | transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(),tjOrder.getCardId()); |
| | | } finally { |
| | | transitionService.deletedTbTransitionListByCusIdAndTjNum(tjCustomer.getCusIdcard(), tjOrder.getCardId()); |
| | | } |
| | | } |
| | | } |
| | | return AjaxResult.success("该用户体检未完成,不能打印报告!!!"); |
| | | return null; |
| | | } |
| | | |
| | | |
| | | //非化验项目报告 |
| | | public Map<TjOrderRemark, List<TjPdfVO>> addTable(String tjNumber) { |
| | | //创建map 键为父项目 值为子项目集合 |
| | | // 不使用linked |
| | | 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.ne(TjOrderDetail::getProId,projectService.getHuaYanProId()); |
| | | wq.eq(TjOrderDetail::getProId,projectService.getNotCcCtXdtProId()); |
| | | // wq.notIn(TjOrderDetail::getProId,projectService.getNneedReprotProId()); |
| | | List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.list(wq); |
| | | |
| | | //遍历体检记录 将项目的具体信息 |
| | |
| | | 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); |
| | | } |
| | | // extracted(printReport, one, customer); |
| | | extractedNew(printReport, one, customer); |
| | | return printReport; |
| | | } |
| | | |
| | | |
| | | //化验项目报告 |
| | | public Map<TjOrderRemark, List<TjPdfVO>> addHuaYanTable(String tjNumber) { |
| | | //创建map 键为父项目 值为子项目集合 |
| | | Map<TjOrderRemark, List<TjPdfVO>> printReport = new LinkedHashMap<>(); |
| | | //查到该客户的体检记录 |
| | | // 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()); |
| | | System.out.println(one.getOrderId() + " " + entry.getKey().getProId()); |
| | | List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(), entry.getKey().getProId()); |
| | | System.out.println("tjOrderDetails = " + tjOrderDetails); |
| | | 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); |
| | |
| | | } |
| | | printReport.put(entry.getKey(), tjPdfVOS); |
| | | } |
| | | return printReport; |
| | | } |
| | | |
| | | private void extractedNew(Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) { |
| | | List<Long> collect = printReport.entrySet().stream().map(item -> item.getKey().getProId()).collect(Collectors.toList()); |
| | | List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParIds(one.getOrderId(), collect); |
| | | Set<String> strings = tjOrderDetails.stream().map(item -> item.getUpdateBy().split(",")[1]).collect(Collectors.toSet()); |
| | | HashMap<Long, List<TjPdfVO>> hashMap = new HashMap<>(); |
| | | strings.forEach(item -> { |
| | | hashMap.put(Long.parseLong(item), new ArrayList<TjPdfVO>()); |
| | | }); |
| | | List<Long> proIds = tjOrderDetails.stream().map(TjOrderDetail::getProId).collect(Collectors.toList()); |
| | | LambdaQueryWrapper<TjProject> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.in(TjProject::getProId,proIds); |
| | | List<TjProject> projectList = projectService.list(queryWrapper); |
| | | for (TjOrderDetail tjOrderDetail : tjOrderDetails) { |
| | | TjProject tjProject = projectList.stream().filter(item -> item.getProId().equals(tjOrderDetail.getProId())).collect(Collectors.toList()).get(0); |
| | | if (null != tjProject) { |
| | | tjOrderDetail.setProject(tjProject); |
| | | } |
| | | if (null == tjOrderDetail.getProject()) { |
| | | System.out.println("'''''''''''''''''''''''''''''''''''" + tjOrderDetail.getOrderDetailId()); |
| | | } |
| | | // 判断在collect中是否存在 |
| | | if (collect.contains(tjOrderDetail.getProject().getProParentId())){ |
| | | LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>(); |
| | | wq6.eq(TjStandard::getProId, tjOrderDetail.getProId()); |
| | | List<TjStandard> list2 = tjStandardService.list(wq6); |
| | | if (list2.size() == 0) { |
| | | TjStandard s = new TjStandard(); |
| | | s.setCompany(" "); |
| | | s.setTjStandardLtValue(" "); |
| | | s.setTjStandardGtValue(" "); |
| | | tjOrderDetail.setStandard(s); |
| | | } else if (list2.size() == 1) { |
| | | tjOrderDetail.setStandard(list2.get(0)); |
| | | } else { |
| | | Long cusSex = customer.getCusSex(); |
| | | Date cusBrithday = customer.getCusBrithday(); |
| | | int age = DateUtil.ageOfNow(cusBrithday); |
| | | for (TjStandard tjStandard : list2) { |
| | | LambdaQueryWrapper<TjStandard> wq8 = new LambdaQueryWrapper<>(); |
| | | if (tjStandard.getTjSex() != null) { |
| | | wq8.eq(TjStandard::getTjSex, cusSex); |
| | | } |
| | | if (tjStandard.getTjType() != null) { |
| | | wq8.eq(TjStandard::getTjType, StringUtils.getAgeType(age)); |
| | | } |
| | | TjStandard standard = tjStandardService.getOne(wq8); |
| | | tjOrderDetail.setStandard(standard); |
| | | } |
| | | } |
| | | TjPdfVO tjPdfVO = new TjPdfVO(); |
| | | tjPdfVO.setProName(tjOrderDetail.getProject().getProName()); |
| | | tjPdfVO.setProResult(tjOrderDetail.getProResult()); |
| | | tjPdfVO.setExc(tjOrderDetail.getExceptionDesc()); |
| | | if (tjOrderDetail.getStandard() != null) { |
| | | //单位 |
| | | if (tjOrderDetail.getStandard().getCompany() == null) { |
| | | tjPdfVO.setCompany(" "); |
| | | } else { |
| | | tjPdfVO.setCompany(tjOrderDetail.getStandard().getCompany()); |
| | | } |
| | | //最大值和最小值 |
| | | String tjStandardGtValue = tjOrderDetail.getStandard().getTjStandardGtValue(); |
| | | String tjStandardLtValue = tjOrderDetail.getStandard().getTjStandardLtValue(); |
| | | if (tjStandardGtValue == null) { |
| | | tjStandardGtValue = " "; |
| | | } |
| | | if (tjStandardLtValue == null) { |
| | | tjStandardLtValue = " "; |
| | | } |
| | | tjPdfVO.setStandardValue(tjStandardLtValue + "-" + tjStandardGtValue); |
| | | } |
| | | List<TjPdfVO> tjPdfVOS = hashMap.get(Long.parseLong(tjOrderDetail.getUpdateBy().split(",")[1])); |
| | | tjPdfVOS.add(tjPdfVO); |
| | | } |
| | | } |
| | | printReport.entrySet().stream().forEach(item->{ |
| | | List<TjPdfVO> pdfVOS = hashMap.get(item.getKey().getProId()); |
| | | printReport.put(item.getKey(),pdfVOS); |
| | | }); |
| | | } |
| | | |
| | | @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("暂无体检报告"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | |
| | | @PostMapping("/preview/batch") |
| | | @ApiOperation(value = "批量体检报告") |
| | | @Transactional |
| | | public AjaxResult preview(@RequestBody String data){ |
| | | String is_batch_report_use_sql = configService.selectConfigByKey("is_batch_report_use_sql"); |
| | | List<String> tjNumbers = Arrays.stream(data.split(",")).collect(Collectors.toList()); |
| | | if ("true".equals(is_batch_report_use_sql)) { |
| | | return tjReportService.makeBatchReport(tjNumbers); |
| | | }else { |
| | | return makeReport(tjNumbers); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 通过sql 重整数据模板 全部重新生成 |
| | | * @param tjNumbers |
| | | * @return |
| | | */ |
| | | private AjaxResult makeReport(List<String > tjNumbers) { |
| | | ArrayList<String> base64Pdfs = new ArrayList<>(); |
| | | for (String tjNumber : tjNumbers) { |
| | | LambdaQueryWrapper<TjOrder> wq = new LambdaQueryWrapper<>(); |
| | | wq.eq(TjOrder::getTjNumber, tjNumber); |
| | | TjOrder tjOrder = tjOrderService.getOne(wq); |
| | | if (null != tjOrder) { |
| | | LambdaQueryWrapper<TjReportTemplate> tjReportTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | TjReportTemplate reportTemplate = null; |
| | | if (tjOrder.getTjCategory() != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq = new LambdaQueryWrapper<>(); |
| | | wqq.eq(SysDictData::getDictType, "dict_tjtype"); |
| | | wqq.eq(SysDictData::getDictValue, tjOrder.getTjCategory()); |
| | | SysDictData one = dictDataService.getOne(wqq); |
| | | if (one != null) { |
| | | //查询字典 |
| | | LambdaQueryWrapper<SysDictData> wqq1 = new LambdaQueryWrapper<>(); |
| | | wqq1.eq(SysDictData::getDictType, "report_template_type"); |
| | | wqq1.eq(SysDictData::getDictLabel, one.getDictLabel()); |
| | | SysDictData one1 = dictDataService.getOne(wqq1); |
| | | if (one1 != null) { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, one1.getDictValue()); |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getFlag, 1); |
| | | } |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.getOne(tjReportTemplateLambdaQueryWrapper); |
| | | } else { |
| | | tjReportTemplateLambdaQueryWrapper.eq(TjReportTemplate::getOpen, 0); |
| | | reportTemplate = reportTemplateService.list(tjReportTemplateLambdaQueryWrapper).get(2); |
| | | } |
| | | |
| | | String template = reportTemplate.getTemplate(); |
| | | String userId = null; |
| | | if (template == null) { |
| | | // 没有该模板 |
| | | continue; |
| | | } |
| | | // --------以上------- 根据数据库中的模板二进制文件 转pdf 创建文件夹 将pdf放进本地文件夹 |
| | | LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>(); |
| | | wq1.eq(TjCustomer::getCusId, tjOrder.getUserId()); |
| | | TjCustomer tjCustomer = tjCustomerService.getOne(wq1); |
| | | LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>(); |
| | | wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId()); |
| | | DictComp dictComp = dictCompService.getOne(wq111); |
| | | LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>(); |
| | | wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId()); |
| | | wq2.isNotNull(TjOrderDetail::getFlowingWaterId); |
| | | List<TjOrderDetail> list = tjOrderDetailService.list(wq2); |
| | | for (TjOrderDetail tjOrderDetail : list) { |
| | | TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId()); |
| | | tjOrderDetail.setProject(tjProject); |
| | | } |
| | | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
| | | PdfStamper ps = null; |
| | | PdfReader reader = null; |
| | | try { |
| | | // 读入pdf表单 |
| | | reader = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template))); |
| | | // 根据表单生成一个新的pdf |
| | | ps = new PdfStamper(reader, byteArrayOutputStream); |
| | | // 获取pdf表单 |
| | | AcroFields form = ps.getAcroFields(); |
| | | //该字体造成类型不均匀,但是pdf转图片不乱码 |
| | | BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); |
| | | form.addSubstitutionFont(bf); |
| | | // 填充数据给表格 |
| | | Map<String, Object> data = new HashMap<>(); |
| | | // 设置用户信息 |
| | | setUserInfo(tjNumber, tjOrder, tjCustomer, dictComp, list, data); |
| | | //封面页下面的总检建议显示 |
| | | if (tjOrder.getCheckAdvice() == null) { |
| | | data.put("remark", "无"); |
| | | } else { |
| | | data.put("remark", tjOrder.getCheckAdvice()); |
| | | } |
| | | //封面页下面的总检建议显示 |
| | | if (tjOrder.getCheckDoctor() == null) { |
| | | data.put("docname", "无"); |
| | | } else { |
| | | data.put("docname", tjOrder.getCheckDoctor()); |
| | | } |
| | | //异常项目 |
| | | //拼接重大阳性结果 |
| | | 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).append("、").append(list1.get(i).getProName()).append(";\n"); |
| | | } |
| | | } else { |
| | | str.append(" 无;\n"); |
| | | } |
| | | //拼接异常项目 |
| | | str.append("【异常情况项目】\n"); |
| | | if (list.size() > 0) { |
| | | int[] index = {0}; |
| | | List<TjOrderDetail> collect = list.stream() |
| | | .filter(item -> item.getExceptionDesc() == 1).collect(Collectors.toList()); |
| | | if (collect.isEmpty()) { |
| | | str.append(" 无;\n"); |
| | | } else { |
| | | collect.forEach(item -> str.append(index[0]++ + 1).append("、").append(projectService.getById(item.getProId()).getProName()).append(";\n")); |
| | | } |
| | | } else { |
| | | str.append(" 无;\n"); |
| | | } |
| | | //异常项目 |
| | | data.put("yichang", str.toString()); |
| | | // 遍历data 给pdf表单表格赋值 |
| | | for (String key : data.keySet()) { |
| | | form.setField(key, data.get(key).toString()); |
| | | } |
| | | //设置为无法编辑 |
| | | ps.setFormFlattening(true); |
| | | ps.close(); |
| | | reader.close(); |
| | | // 将修改后的PDF内容写入 |
| | | byte[] bytes = byteArrayOutputStream.toByteArray(); |
| | | // 创建新的PDF文档 |
| | | Document document = new Document(PageSize.A4); |
| | | ByteArrayOutputStream finalOutPut = new ByteArrayOutputStream(); |
| | | PdfCopy copy = new PdfCopy(document, finalOutPut); |
| | | document.open(); |
| | | reader = new PdfReader(bytes); |
| | | int numberOfPages = reader.getNumberOfPages(); |
| | | for (int i = 1; i <= numberOfPages; i++) { |
| | | PdfImportedPage page = copy.getImportedPage(reader, i); |
| | | copy.addPage(page); |
| | | } |
| | | // 添加详情页 |
| | | document.newPage(); |
| | | reader.close(); |
| | | ByteArrayOutputStream infoByteArrayOutputStream = setInfoPage(userId, tjNumber); |
| | | reader = new PdfReader(infoByteArrayOutputStream.toByteArray()); |
| | | int numberOfPages1 = reader.getNumberOfPages(); |
| | | for (int i = 1; i <= numberOfPages1; i++) { |
| | | PdfImportedPage page = copy.getImportedPage(reader, i); |
| | | copy.addPage(page); |
| | | } |
| | | infoByteArrayOutputStream.close(); |
| | | // 心电图以及附件 |
| | | // 因数据库表存放base64导致查询缓慢 这里执行缓慢 |
| | | // 在这里增加一条查询count 对于没有追加附件的 提升速度 |
| | | LambdaQueryWrapper<TjReport> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(TjReport::getTjNumber, tjNumber) |
| | | .and(item -> item.eq(TjReport::getType, "附件").or().eq(TjReport::getType, "心电图")); |
| | | Integer selectCount = tjReportService.getSelectCount(queryWrapper); |
| | | if (selectCount > 0) { |
| | | String base64XinDianTu = null; |
| | | String base64FuJian = null; |
| | | List<TjReport> reportList = tjReportService.list(queryWrapper); |
| | | TjReport xinDianTu = null; |
| | | TjReport fuJian = null; |
| | | if (!reportList.isEmpty()) { |
| | | for (TjReport tjReport : reportList) { |
| | | if ("附件".equals(tjReport.getType())) { |
| | | fuJian = tjReport; |
| | | base64FuJian = fuJian.getReport(); |
| | | } else { |
| | | xinDianTu = tjReport; |
| | | base64XinDianTu = xinDianTu.getReport(); |
| | | } |
| | | } |
| | | } |
| | | if (xinDianTu != null) { |
| | | if (fuJian != null) { |
| | | addPageByPDFBase64(copy, base64FuJian); |
| | | document.newPage(); |
| | | addPageByPDFBase64(copy, base64XinDianTu); |
| | | } else { |
| | | addPageByPDFBase64(copy, base64XinDianTu); |
| | | } |
| | | } else { |
| | | if (fuJian != null) { |
| | | addPageByPDFBase64(copy, base64FuJian); |
| | | } |
| | | } |
| | | } |
| | | copy.close(); |
| | | base64Pdfs.add(Base64.getEncoder().encodeToString(finalOutPut.toByteArray())); |
| | | document.close(); |
| | | finalOutPut.close(); |
| | | reader.close(); |
| | | //修改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); |
| | | } catch (Exception e) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | try { |
| | | byte[] mergePDFs = PDFDocumentUtil.mergePDFs(base64Pdfs); |
| | | // 本地生成测试 |
| | | // String PDF_FILE = "d:\\Users\\w\\Desktop\\test.pdf"; |
| | | // BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(PDF_FILE)); |
| | | // outputStream.write(mergePDFs); |
| | | // outputStream.flush(); |
| | | // outputStream.close(); |
| | | String s = Base64.getEncoder().encodeToString(mergePDFs); |
| | | return AjaxResult.success().put("file",s); |
| | | } catch (DocumentException | IOException e) { |
| | | e.printStackTrace(); |
| | | return AjaxResult.error("批量生成失败"); |
| | | } |
| | | } |
| | | |
| | | @GetMapping("/revocationReport/{TjNumber}") |
| | | @ApiOperation(value = "撤销生成体检报告") |
| | | public AjaxResult revocationReport(@PathVariable("TjNumber") String tjNumber) { |
| | | //逻辑删除数据库里的报告 |
| | | QueryWrapper<TjReport> wq1 = new QueryWrapper<>(); |
| | | wq1.select("re_id"); |
| | | wq1.eq("tj_number", tjNumber); |
| | | wq1.eq("type", "体检报告"); |
| | | if (null != tjReportService.getOne(wq1)) { |
| | | if (!tjReportService.remove(wq1)) { |
| | | TjReport tjReport = tjReportService.getOne(wq1); |
| | | if (null != tjReport) { |
| | | // if (!tjReportService.remove(wq1)) { |
| | | // return AjaxResult.error("撤回失败!"); |
| | | // } |
| | | // 不在使用逻辑删除 逻辑删除导致打印报告生成 查询sql缓慢 |
| | | int i = tjReportService.deleteTjReportByReId(tjReport.getReId()); |
| | | if (i == 0) { |
| | | return AjaxResult.error("撤回失败!"); |
| | | } |
| | | } |
| | |
| | | @GetMapping("/reportHistory") |
| | | @ApiOperation(value = "历史报告") |
| | | public AjaxResult reportHistory(Long cusId) { |
| | | List<TjReport> res=new ArrayList<>(); |
| | | List<TjReport> res = new ArrayList<>(); |
| | | LambdaQueryWrapper<TjOrder> wqq = new LambdaQueryWrapper<>(); |
| | | wqq.like(TjOrder::getUserId, cusId); |
| | | List<TjOrder> orderList = tjOrderService.list(wqq); |
| | | if (orderList!=null && orderList.size()>0){ |
| | | if (orderList != null && orderList.size() > 0) { |
| | | for (TjOrder tjOrder : orderList) { |
| | | if (tjOrder!=null){ |
| | | if (tjOrder != null) { |
| | | LambdaQueryWrapper<TjReport> wq = new LambdaQueryWrapper<>(); |
| | | wq.eq(TjReport::getTjNumber, tjOrder.getTjNumber()); |
| | | wq.eq(TjReport::getType,"体检报告"); |
| | | wq.eq(TjReport::getType, "体检报告"); |
| | | TjReport one = tjReportService.getOne(wq); |
| | | if(null !=one){ |
| | | if (null != one) { |
| | | res.add(one); |
| | | } |
| | | } |