diff --git a/pom.xml b/pom.xml index 226a4e7..2cdf8dd 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ - 11 + 1.8 5.8.36 5.17.0 3.0.2 diff --git a/src/main/java/com/dpkj/modules/print/controller/MS439Controller.java b/src/main/java/com/dpkj/modules/print/controller/MS439Controller.java index 2173a5f..e289436 100644 --- a/src/main/java/com/dpkj/modules/print/controller/MS439Controller.java +++ b/src/main/java/com/dpkj/modules/print/controller/MS439Controller.java @@ -1,5 +1,6 @@ package com.dpkj.modules.print.controller; +import com.alibaba.fastjson.JSONObject; import com.dpkj.common.dto.LexMarkResultDTO; import com.dpkj.common.vo.Result; import com.dpkj.modules.print.request.MS439Request; @@ -33,18 +34,19 @@ public class MS439Controller { /** * 检验报告打印 - * - * @return */ @PostMapping("/printJY") - public Result> printJY() { - MS439Request ms439Request = new MS439Request(); + public Result> printJY(@RequestBody JSONObject jsonObject) { + JSONObject params = jsonObject.getJSONObject("reportResult"); // 获取检验报告PDF - String path = ms439PrintService.getJYPDFPath(); - ms439Request.setPagesource("A5"); + String path = ms439PrintService.getJYPDFPath(params); + MS439Request ms439Request = new MS439Request(); + ms439Request.setPagesource("A4"); ms439Request.setFileDir(path); -// LexMarkResultDTO result = ms439PrintService.printImage(ms439Request); - return Result.ok(null); + LexMarkResultDTO result = ms439PrintService.printImage(ms439Request); + // 打印完成后删除临时PDF文件 + ms439PrintService.deleteSysFileByPath(path); + return Result.ok(result); } @PostMapping("/getStatus") diff --git a/src/main/java/com/dpkj/modules/print/service/MS439PrintService.java b/src/main/java/com/dpkj/modules/print/service/MS439PrintService.java index df8d5d3..9052b2d 100644 --- a/src/main/java/com/dpkj/modules/print/service/MS439PrintService.java +++ b/src/main/java/com/dpkj/modules/print/service/MS439PrintService.java @@ -1,5 +1,6 @@ package com.dpkj.modules.print.service; +import com.alibaba.fastjson.JSONObject; import com.dpkj.common.dto.LexMarkResultDTO; import com.dpkj.modules.print.request.MS439Request; import com.dpkj.modules.print.vo.PrinterStatus; @@ -10,5 +11,7 @@ public interface MS439PrintService { LexMarkResultDTO getStatus(String papersource); - String getJYPDFPath(); + String getJYPDFPath(JSONObject params); + + void deleteSysFileByPath(String path); } diff --git a/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java b/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java index 690e8de..54bd260 100644 --- a/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java +++ b/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java @@ -1,5 +1,6 @@ package com.dpkj.modules.print.service.impl; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dpkj.common.config.PrinterConfig; import com.dpkj.common.dto.LexMarkDTO; @@ -44,7 +45,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -215,19 +215,19 @@ public class MS439PrintServiceImpl implements MS439PrintService { } @Override - public String getJYPDFPath() { + public String getJYPDFPath(JSONObject params) { // 1. 准备输出路径 String dirPath = "D:/TempJYPDF/"; File dir = new File(dirPath);// 确保目录存在 if (!dir.exists()) { dir.mkdirs(); } - String fileName = "report_jy_" + System.currentTimeMillis() + ".pdf"; + String fileName = "jiancha_" + params.getString("reportId") + "_" + System.currentTimeMillis() + ".pdf"; String pdfPath = dirPath + fileName; try { // 2. 准备模板数据 - Map data = prepareReportData(); + Map data = prepareReportData(params); // 3. 渲染Thymeleaf模板 String htmlContent = renderThymeleafTemplate(data); // 4. 生成PDF文件 @@ -240,6 +240,26 @@ public class MS439PrintServiceImpl implements MS439PrintService { } } + @Override + public void deleteSysFileByPath(String path) { + if (path == null || path.isEmpty()) { + return; + } + try { + File file = new File(path); + if (file.exists() && file.isFile()) { + boolean deleted = file.delete(); + if (!deleted) { + System.err.println("文件删除失败: " + path); + } + } else { + System.err.println("文件不存在: " + path); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + private void createPdfFromHtml(String html, String outputPath) throws IOException, DocumentException { @@ -290,41 +310,59 @@ public class MS439PrintServiceImpl implements MS439PrintService { } // 报告数据准备(根据实际业务实现) - private Map prepareReportData() { + private Map prepareReportData(JSONObject params) { Map data = new HashMap<>(); - // 患者信息 - Map patient = new HashMap<>(); - patient.put("name", "余文财"); - patient.put("gender", "男"); - patient.put("age", "25岁"); - patient.put("medicalRecord", "20240624001"); - patient.put("department", "内科"); - patient.put("bedNumber", "A301"); - data.put("patient", patient); + // 基本信息 + Map baseInfo = new HashMap<>(); + baseInfo.put("reportId", params.getString("reportId"));// 报告id(标本编号) + baseInfo.put("lspcmName", params.getString("lspcmName"));// 标本名称 + JSONObject patInfo = params.getJSONObject("pat_info"); + baseInfo.put("patName", patInfo.getString("pat_name"));// 姓名 + baseInfo.put("patSex", patInfo.getString("pat_sex"));// 性别 + baseInfo.put("patAge", patInfo.getString("pat_age"));// 年龄 + baseInfo.put("patHomePhno", patInfo.getString("pat_home_phno"));// 电话 + JSONObject pv1Info = params.getJSONObject("pv1_info"); + baseInfo.put("deptName", pv1Info.getString("dept_name"));// 科室 + baseInfo.put("inpBedNo", pv1Info.getString("inp_bed_no"));// 床号 + JSONObject applyInfoFirst = params.getJSONArray("apply_info").getJSONObject(0); + baseInfo.put("placerName", applyInfoFirst.getString("placer_name"));// 申请医生 + baseInfo.put("spcmClctor", applyInfoFirst.getString("spcm_clctor"));// 标本采集人 + baseInfo.put("citemContent", params.getString("citemContent"));// 申请项目 + data.put("baseInfo", baseInfo); // 检验项目数据 List> items = new ArrayList<>(); - addItem(items, "白细胞计数", "7.26", "3.5-9.5", "10^9/L", false); - addItem(items, "血红蛋白", "165", "115-150", "g/L", true); - // ...其他检验项 - data.put("items", items); + JSONArray rptInfoList = params.getJSONArray("rpt_info"); - // 系统信息 - data.put("reportTime", new Date()); - data.put("doctor", "李医师"); - data.put("reviewer", "王主任"); + for (int i = 0; i < rptInfoList.size(); i++) { + JSONObject obj = rptInfoList.getJSONObject(i); + // 项目名称:loitem_cname, + // 结果:order_rpt_result, + // 参考区间:loitem_rv, + // 单位:loitem_unit, + // 测试方法:inspection_method, + // 结果异常标志:oaflag + addItem(items, obj.getString("loitem_cname"), + obj.getString("order_rpt_result"), + obj.getString("loitem_rv"), + obj.getString("loitem_unit"), + obj.getString("inspection_method"), + obj.getString("oaflag")); + } + data.put("items", items); return data; } private void addItem(List> items, String name, - String value, String range, String unit, boolean abnormal) { + String value, String range, String unit, String method, String oaflag) { Map item = new HashMap<>(); - item.put("name", name); - item.put("result", value); - item.put("referenceRange", range); - item.put("unit", unit); - item.put("isAbnormal", abnormal); + item.put("loitemCname", name);// 项目名称 + item.put("orderRptResult", value);// 结果 + item.put("loitemRv", range);// 参考区间 + item.put("loitemUnit", unit);// 单位 + item.put("inspectionMethod", method);// 测试方法 + item.put("oaflag", oaflag);// 结果异常标志|-1-不计算改指标的参考、1-正常、2-偏低、3-偏高、4-阳性(异常)、5-警戒下限、6-警戒上限、7-复查下限、8-复查上限、9-线性异常 items.add(item); } } diff --git a/src/main/java/com/dpkj/modules/print/utils/FontLoader.java b/src/main/java/com/dpkj/modules/print/utils/FontLoader.java index cd04578..3bd2339 100644 --- a/src/main/java/com/dpkj/modules/print/utils/FontLoader.java +++ b/src/main/java/com/dpkj/modules/print/utils/FontLoader.java @@ -2,6 +2,8 @@ package com.dpkj.modules.print.utils; import com.itextpdf.text.pdf.BaseFont; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; /** @@ -15,17 +17,27 @@ public class FontLoader { if (fontStream == null) { throw new IllegalArgumentException("字体文件未找到: " + resourcePath); } - // 创建支持中文的 BaseFont + byte[] fontBytes = toByteArray(fontStream); return BaseFont.createFont( resourcePath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, false, - fontStream.readAllBytes(), + fontBytes, null ); } catch (Exception e) { throw new RuntimeException("字体加载失败: " + resourcePath, e); } } + + private static byte[] toByteArray(InputStream input) throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[4096]; + while ((nRead = input.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + return buffer.toByteArray(); + } } diff --git a/src/main/resources/templates/department.html b/src/main/resources/templates/department.html index 802229e..c710c1b 100644 --- a/src/main/resources/templates/department.html +++ b/src/main/resources/templates/department.html @@ -74,7 +74,7 @@
打印时间:
- 温馨提示:请取走缴费凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询! + 温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询。
diff --git a/src/main/resources/templates/hospitalPayment.html b/src/main/resources/templates/hospitalPayment.html index 3891118..3c74e0d 100644 --- a/src/main/resources/templates/hospitalPayment.html +++ b/src/main/resources/templates/hospitalPayment.html @@ -31,7 +31,7 @@
终端编号:
打印时间:
- 温馨提示:请取走缴费凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询! + 温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询。
diff --git a/src/main/resources/templates/outpatientPayment.html b/src/main/resources/templates/outpatientPayment.html index 541e350..85f592b 100644 --- a/src/main/resources/templates/outpatientPayment.html +++ b/src/main/resources/templates/outpatientPayment.html @@ -29,7 +29,7 @@
终端编号:
打印时间:
- 温馨提示:请取走缴费凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询! + 温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询。
diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index 8a4f54f..980cddd 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -39,7 +39,7 @@
终端编号:
打印时间:
- 温馨提示:请取走挂号凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询! + 温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询。
diff --git a/src/main/resources/templates/reportJY.html b/src/main/resources/templates/reportJY.html index 0698c98..4d538d1 100644 --- a/src/main/resources/templates/reportJY.html +++ b/src/main/resources/templates/reportJY.html @@ -9,7 +9,7 @@
- 澜沧拉祜族自治县中医医院粪便常规检验报告单 + 澜沧拉祜族自治县中医医院报告单
@@ -20,13 +20,13 @@ 姓名: - 张某某 + 标本编号: - FS20230615008 + @@ -34,15 +34,15 @@ 性别: - + 科室: - 消化内科 + 标本类型: - 粪便 + @@ -50,15 +50,15 @@ 年龄: - 42岁 + 床号: - 15 + 标本形态: - 新鲜 + @@ -66,15 +66,15 @@ 患者电话: - 138****5678 + 申请医生: - 李医生 + 采样者: - 护士A + @@ -82,15 +82,15 @@ 申请项目: - 粪便常规 + 临床诊断: - 腹痛待查 + 采样人: - 检验科 + @@ -98,7 +98,7 @@ 仪器: - 科瑞杰粪便分析仪 + @@ -113,151 +113,28 @@ 项目名称 结果 - 单位 - 参考区间 + 单位 + 参考区间 测试方法 - - 颜色 - 黄褐色 - - 黄褐色 - 目测法 + + + + + + + - - 性状 - 软便 - - 软便 - 目测法 - - - 红细胞 - 未见 - /HP - 未见 - 镜检法 - - - 白细胞 - 0-2 - /HP - 0-3 - 镜检法 - - - 吞噬细胞 - 未见 - - 未见 - 镜检法 - - - 寄生虫卵 - 未找到 - - 未找到 - 镜检法 - - - 脂肪球 - 少量 - - 未见 - 苏丹III染色 - - - 颜色 - 黄褐色 - - 黄褐色 - 目测法 - - - 性状 - 软便 - - 软便 - 目测法 - - - 红细胞 - 未见 - /HP - 未见 - 镜检法 - - - 白细胞 - 0-2 - /HP - 0-3 - 镜检法 - - - 吞噬细胞 - 未见 - - 未见 - 镜检法 - - - 寄生虫卵 - 未找到 - - 未找到 - 镜检法 - - - 脂肪球 - 少量 - - 未见 - 苏丹III染色 - - - 颜色 - 黄褐色 - - 黄褐色 - 目测法 - - - 性状 - 软便 - - 软便 - 目测法 - - - 红细胞 - 未见 - /HP - 未见 - 镜检法 - - - 白细胞 - 0-2 - /HP - 0-3 - 镜检法 - - - 吞噬细胞 - 未见 - - 未见 - 镜检法 - - - 寄生虫卵 - 未找到 - - 未找到 - 镜检法 + + +   +   +   +   +   @@ -265,10 +142,7 @@
- 建议与解释:您的粪便检查结果显示存在轻度脂肪滴和少量未消化食物残渣。建议: - 1)注意饮食结构调整,避免高脂、高蛋白饮食; - 2)可补充消化酶类药物; - 3)一周后复查。如有持续腹痛或腹泻症状,请及时复诊。 + 建议与解释: