diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/BackPaperMapper.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/BackPaperMapper.java new file mode 100644 index 0000000..de8fd98 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/BackPaperMapper.java @@ -0,0 +1,12 @@ +package com.czlis.interfaceCommon.mapper; + +import com.czlis.common.core.domain.entity.LabReqmain; +import com.czlis.interfaceCommon.pojo.entity.BackPaperDetail; +import com.czlis.interfaceCommon.pojo.entity.BackPaperParam; + +import java.util.List; + +public interface BackPaperMapper { + List selectBySqhs(List sqhs); + BackPaperParam selectReqmian(String sqh); +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/BackPaperDetail.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/BackPaperDetail.java new file mode 100644 index 0000000..b2e7163 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/BackPaperDetail.java @@ -0,0 +1,17 @@ +package com.czlis.interfaceCommon.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BackPaperDetail { + private String sqh; + private Integer xh; + private String bz1; + private String sqxmdh; + private String sqxmmc; + private String cp_msg; +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/BackPaperParam.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/BackPaperParam.java new file mode 100644 index 0000000..695ac44 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/BackPaperParam.java @@ -0,0 +1,36 @@ +package com.czlis.interfaceCommon.pojo.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BackPaperParam { + + private String ksdh; + private String sqys; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date sqsj; + private String jsys; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date jssj; + private String brly; + private String brdh; + private String brxm; + private String brxb; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date brsr; + private String txm; + private String bgddh; + private Integer nl; + private String nldw; + private String kh; + private String yljg; + +} + + diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CommonUtil.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CommonUtil.java index 7a5bb6b..87d97ed 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CommonUtil.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CommonUtil.java @@ -11,6 +11,8 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; @Component @@ -68,6 +70,24 @@ public class CommonUtil { public Date getCurrentTime(){return commonMapper.getCurrentTime();} public String getCurrentDate(){return DateFormatUtils.format(commonMapper.getCurrentTime(), "yyyy-MM-dd");} public String getCurrentDateTime(){return DateFormatUtils.format(commonMapper.getCurrentTime(), "yyyy-MM-dd HH:mm:ss");} + //字典查询单位名称 + public String getCompany(String yljg){ + if(yljg == null || yljg.equals(""))return getCompany(); + String zdmc=getComDictNameById("HOS",yljg); + if(zdmc == null || zdmc.equals("")){ + return yljg; + }else{ + return zdmc; + } + } + public String getCompany(){ + String zdmc=getComDictNameById("99","COMPANY"); + if(zdmc == null || zdmc.equals("")){ + return ""; + }else{ + return zdmc; + } + } //字典查询方法集合 public String getComDictNameById(String zdlb,String xxdh){ @@ -96,4 +116,5 @@ public class CommonUtil { } + } diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/JasperReportUtil.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/JasperReportUtil.java index 88635a3..066c17b 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/JasperReportUtil.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/JasperReportUtil.java @@ -1,5 +1,6 @@ package com.czlis.interfaceCommon.utils; +import com.czlis.common.config.RuoYiConfig; import lombok.extern.slf4j.Slf4j; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; @@ -10,12 +11,12 @@ import net.sf.jasperreports.engine.util.JRSaver; import net.sf.jasperreports.export.SimpleExporterInput; import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration; + import org.springframework.stereotype.Component; import java.io.File; -import java.io.InputStream; -import java.net.URISyntaxException; -import java.net.URL; +import java.io.FileInputStream; +import java.sql.Connection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,13 +37,11 @@ import javax.print.attribute.standard.OrientationRequested; @Component @Slf4j public class JasperReportUtil { - private static final String template="template"; - private static final String templatep="template/"; - private static final String TEMPLATE_PATH = JasperReportUtil.getTemplatePath(); + /** * 核心打印/导出方法 * @param printerName 打印机名称(可为null,null时使用默认打印机) - * @param templateName 模板名称(支持jrxml或jasper,放在resources/template目录下) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) * @param parameters 非循环字段集合(报表参数,如标题、日期等) * @param dataList 循环体数据(List集合,每条数据对应detail区域一行) * @param pdfType 打印方式(pdfType为true导出PDF) @@ -51,6 +50,7 @@ public class JasperReportUtil { * @param papersize 纸张尺寸(可为null,默认使用模板纸张) * @param Orientation 纸张方向(false直打,true横打) * @param showDialog 打印前是否预览(false直接打印,true预览) + * @param connection 数据源,推荐使用DataSource注入对象传递当前库连接对象 * @throws Exception Jasper相关异常 */ public static void printbase( @@ -63,14 +63,21 @@ public class JasperReportUtil { Integer printtimes, String papersize, boolean Orientation, - boolean showDialog + boolean showDialog, + Connection connection ) throws Exception { - // 1. 校验入参 - // validateParams(printType, exportPath, dataList); + // 1. 在 printbase 中获取配置路径并初始化目录 + String templateDir = getTemplateDir(); // 获取配置路径 + String templatePath = templateDir + File.separator; + initTemplateDir(templateDir); // 初始化目录(不存在则创建) + // 在 printbase 方法开头添加 + if (pdfType && (exportPath == null || exportPath.trim().isEmpty())) { + throw new IllegalArgumentException("导出PDF时,exportPath不能为空"); + } // 2. 加载并编译模板(支持jrxml和jasper) JasperReport jasperReport; try { - jasperReport = loadTemplate(templateName); + jasperReport = loadTemplate(templateName,templatePath); } catch (Exception e) { log.error("打印模板创建错误:{}",e); throw new RuntimeException(e); @@ -84,8 +91,12 @@ public class JasperReportUtil { } // 4. 填充报表(参数+循环数据) Map safeParams = parameters != null ? parameters : new HashMap<>(); - - JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, safeParams, dataSource); + JasperPrint jasperPrint=null; + if (connection != null) { + jasperPrint = JasperFillManager.fillReport(jasperReport, safeParams,connection); + }else { + jasperPrint = JasperFillManager.fillReport(jasperReport, safeParams, dataSource); + } // 5. 根据打印方式执行操作 if (pdfType==false) { // 5.1 直接打印到指定打印机 @@ -95,38 +106,47 @@ public class JasperReportUtil { exportToPdf(jasperPrint, exportPath); } } - /** - * 加载并编译模板(优先加载jasper,不存在则编译jrxml) - */ - private static JasperReport loadTemplate(String templateName) throws Exception { - // 模板路径:resources/templates/ - String templatePath = templatep + templateName; - compileAndSave(templateName); - InputStream jasperStream = JasperReportUtil.class.getClassLoader().getResourceAsStream(templatePath + ".jasper"); - if (jasperStream != null) { - // 存在已编译的jasper文件,直接加载 - return (JasperReport) JRLoader.loadObject(jasperStream); - } else { - // 不存在jasper,编译jrxml - InputStream jrxmlStream = JasperReportUtil.class.getClassLoader().getResourceAsStream(templatePath + ".jrxml"); - if (jrxmlStream == null) { - throw new JRException("模板不存在:" + templatePath + ".jrxml/.jasper"); + /** + * 加载并编译模板(从物理路径 D:\template 加载) + */ + private static JasperReport loadTemplate(String templateName,String templatePath) throws Exception { + // 物理路径模板文件(支持 jrxml 和 jasper) + String jrxmlPath = templatePath + templateName + ".jrxml"; + String jasperPath = templatePath + templateName + ".jasper"; + + compileAndSave(templateName,templatePath); + // 1. 优先加载已编译的 jasper 文件 + File jasperFile = new File(jasperPath); + if (jasperFile.exists() && jasperFile.isFile()) { + try (FileInputStream fis = new FileInputStream(jasperFile)) { + return (JasperReport) JRLoader.loadObject(fis); } - return JasperCompileManager.compileReport(jrxmlStream); + } + + // 2. 无 jasper 文件则编译 jrxml + File jrxmlFile = new File(jrxmlPath); + if (!jrxmlFile.exists() || !jrxmlFile.isFile()) { + throw new JRException("模板文件不存在:" + jrxmlPath); + } + try (FileInputStream fis = new FileInputStream(jrxmlFile)) { + return JasperCompileManager.compileReport(fis); } } + /** * 直接打印到指定打印机 */ - private static void printToPrinter(JasperPrint jasperPrint, String printerName,Integer printtimes,String papersize,boolean Orientation,boolean showDialog) throws JRException { + private static void printToPrinter(JasperPrint jasperPrint, String printerName,Integer printtimes,String papersize,boolean isLandscape,boolean showDialog) throws JRException { // 查找目标打印机 PrintService printService = findPrintService(printerName); if (printService == null) { throw new JRException("未找到指定打印机:" + (printerName == null ? "默认打印机" : printerName)); } - + if (printtimes != null && printtimes <= 0) { + throw new IllegalArgumentException("打印次数必须为正整数(printtimes=" + printtimes + ")"); + } // 配置打印参数(跳过打印对话框,直接打印) JRPrintServiceExporter exporter = new JRPrintServiceExporter(); SimplePrintServiceExporterConfiguration config = new SimplePrintServiceExporterConfiguration(); @@ -146,7 +166,7 @@ public class JasperReportUtil { } } // 可选:设置打印方向(横向) - if(Orientation)attributes.add(OrientationRequested.LANDSCAPE); + if(isLandscape)attributes.add(OrientationRequested.LANDSCAPE); config.setPrintRequestAttributeSet(attributes); // 执行打印 exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); @@ -158,6 +178,12 @@ public class JasperReportUtil { * 导出为PDF文件 */ private static void exportToPdf(JasperPrint jasperPrint, String exportPath) throws JRException { + // exportToPdf 方法中添加 + File exportFile = new File(exportPath); + File parentDir = exportFile.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); // 创建父目录 + } JRPdfExporter exporter = new JRPdfExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(exportPath)); @@ -171,7 +197,7 @@ public class JasperReportUtil { // 获取所有可用打印机 PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); if (printServices == null || printServices.length == 0) { - return null; + return PrintServiceLookup.lookupDefaultPrintService(); // 替代 return null } // 1. 打印机名称为null时,返回默认打印机 @@ -185,7 +211,8 @@ public class JasperReportUtil { return service; } } - return null; + // findPrintService 方法末尾修改 + return PrintServiceLookup.lookupDefaultPrintService(); // 替代 return null } // ------------------------------ 简化调用的重载方法(可选)------------------------------ @@ -198,13 +225,53 @@ public class JasperReportUtil { List dataList, String exportPath ) throws Exception { - printbase(null, templateName, parameters, dataList, true, exportPath,null,null,false,false); + printbase(null, templateName, parameters, dataList, true, exportPath,null,null,false,false,null); + } + public static void exportToPdf( + String templateName, + Map parameters, + Connection connection, + String exportPath + ) throws Exception { + printbase(null, templateName, parameters,null, true, exportPath,null,null,false,false,connection); + } + /** + * 重载:直接打印(简化参数) + * @param printerName 打印机名称(可为null,null时使用默认打印机) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) + * @param parameters 非循环字段集合(报表参数,如标题、日期等) + * @param dataList 循环体数据(List集合,每条数据对应detail区域一行) + * @param connection 数据源,推荐使用DataSource注入对象传递当前库连接对象 + */ + public static void print( + String printerName, + String templateName, + Map parameters, + List dataList, + Connection connection + ) throws Exception { + printbase(printerName, templateName, parameters, dataList, false, null,null,null,false,false,connection); + } + /** + * 重载:直接打印(简化参数) + * @param printerName 打印机名称(可为null,null时使用默认打印机) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) + * @param parameters 非循环字段集合(报表参数,如标题、日期等) + * @param connection 数据源,推荐使用DataSource注入对象传递当前库连接对象 + */ + public static void print( + String printerName, + String templateName, + Map parameters, + Connection connection + ) throws Exception { + printbase(printerName, templateName, parameters, null, false, null,null,null,false,false,connection); } /** * 重载:直接打印(简化参数) * @param printerName 打印机名称(可为null,null时使用默认打印机) - * @param templateName 模板名称(支持jrxml或jasper,放在resources/template目录下) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) * @param parameters 非循环字段集合(报表参数,如标题、日期等) * @param dataList 循环体数据(List集合,每条数据对应detail区域一行) */ @@ -214,12 +281,12 @@ public class JasperReportUtil { Map parameters, List dataList ) throws Exception { - printbase(printerName, templateName, parameters, dataList, false, null,null,null,false,false); + printbase(printerName, templateName, parameters, dataList, false, null,null,null,false,false,null); } /** * 重载:直接打印(简化参数) * @param printerName 打印机名称(可为null,null时使用默认打印机) - * @param templateName 模板名称(支持jrxml或jasper,放在resources/template目录下) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) * @param dataList 循环体数据(List集合,每条数据对应detail区域一行) */ public static void print( @@ -232,7 +299,20 @@ public class JasperReportUtil { /** * 重载:直接打印(简化参数) * @param printerName 打印机名称(可为null,null时使用默认打印机) - * @param templateName 模板名称(支持jrxml或jasper,放在resources/template目录下) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) + * @param connection 数据源,推荐使用DataSource注入对象传递当前库连接对象 + */ + public static void print( + String printerName, + String templateName, + Connection connection + ) throws Exception { + print(printerName, templateName, null, connection); + } + /** + * 重载:直接打印(简化参数) + * @param printerName 打印机名称(可为null,null时使用默认打印机) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) * @param parameters 非循环字段集合(报表参数,如标题、日期等) */ public static void print( @@ -240,22 +320,38 @@ public class JasperReportUtil { String templateName, Map parameters ) throws Exception { - print(printerName, templateName, parameters, null); + List dataList =null; + print(printerName, templateName, parameters, dataList ); } /** * 重载:直接打印(使用默认打印机) - * @param templateName 模板名称(支持jrxml或jasper,放在resources/template目录下) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) + * @param parameters 非循环字段集合(报表参数,如标题、日期等) + * @param connection 数据源,推荐使用DataSource注入对象传递当前库连接对象 + */ + public static void print( + String templateName, + Map parameters, + Connection connection + ) throws Exception { + List dataList =null; + print(null, templateName, parameters, dataList,connection); + } + /** + * 重载:直接打印(使用默认打印机) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) * @param parameters 非循环字段集合(报表参数,如标题、日期等) */ public static void print( String templateName, Map parameters ) throws Exception { - print(null, templateName, parameters, null); + List dataList =null; + print(null, templateName, parameters, dataList); } /** * 重载:直接打印(使用默认打印机) - * @param templateName 模板名称(支持jrxml或jasper,放在resources/template目录下) + * @param templateName 模板名称(支持jrxml或jasper,放在YML配置的物理路径下,如D:\ruoyi) * @param dataList 循环体数据(List集合,每条数据对应detail区域一行) */ public static void print( @@ -274,6 +370,9 @@ public class JasperReportUtil { SIZE_MAP.put("A4", MediaSizeName.ISO_A4); SIZE_MAP.put("A5", MediaSizeName.ISO_A5); SIZE_MAP.put("A6", MediaSizeName.ISO_A6); + SIZE_MAP.put("B5", MediaSizeName.ISO_B5); + SIZE_MAP.put("B4", MediaSizeName.ISO_B4); + SIZE_MAP.put("B6", MediaSizeName.ISO_B6); // 可添加更多映射(如 US Letter、Legal 等) } public static MediaSizeName getMediaSize(String sizeStr) { @@ -285,102 +384,53 @@ public class JasperReportUtil { * @param jrxmlFileName 模板文件名(不带扩展名,如"barcode") * @throws Exception 编译或IO异常 */ - public static void compileAndSave(String jrxmlFileName) throws Exception { - // 1. 定义文件名和路径 - String jrxmlName = jrxmlFileName + ".jrxml"; // jrxml文件名 - String jasperName = jrxmlFileName + ".jasper"; // 编译后文件名 - - if(needCompile(TEMPLATE_PATH+jrxmlName, TEMPLATE_PATH+jasperName)) { - // 2. 获取resources/templates下的jrxml输入流 - InputStream jrxmlStream = JasperReportUtil.class - .getClassLoader() - .getResourceAsStream(templatep + jrxmlName); - if (jrxmlStream == null) { - throw new Exception("未找到jrxml模板:" + templatep + jrxmlName); - } - // 3. 编译jrxml为JasperReport对象 - JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlStream); - - // 4. 确定输出目录(resources/templates的同级目录,即classes/templates) - File outputDir = getTemplateOutputDir(); - if (!outputDir.exists()) { - outputDir.mkdirs(); // 目录不存在则创建 - } - // 5. 输出jasper文件到目标目录 - File jasperFile = new File(outputDir, jasperName); - JRSaver.saveObject(jasperReport, jasperFile); // 保存编译结果 - - System.out.println("编译成功:" + jasperFile.getAbsolutePath()); - } - } - /** - * 获取模板输出目录(resources/templates编译后的目录) + * 编译 jrxml 并保存到物理模板目录(D:\template) */ - private static File getTemplateOutputDir() throws URISyntaxException { - // 获取templates目录的URL(开发时是resources/templates,运行时是classes/templates) - URL templateUrl = JasperReportUtil.class.getClassLoader().getResource(template); + public static void compileAndSave(String jrxmlFileName,String templatePath) throws Exception { + String jrxmlPath = templatePath + jrxmlFileName + ".jrxml"; + String jasperPath = templatePath + jrxmlFileName + ".jasper"; - if (templateUrl == null) { - // 如果templates目录不存在,创建在classes目录下 - URL classesUrl = JasperReportUtil.class.getClassLoader().getResource(""); - return new File(classesUrl.toURI().getPath() + File.separator + template); - } - - // 返回templates目录的File对象 - return new File(templateUrl.toURI()); - } - /** - * 检查是否需要编译jrxml(jrxml修改时间晚于jasper时需要编译) - * @param jrxmlPath jrxml文件路径(如"src/main/resources/templates/barcode.jrxml") - * @param jasperPath jasper文件路径(如"src/main/resources/templates/barcode.jasper") - * @return true:需要编译;false:无需编译 - */ - public static boolean needCompile(String jrxmlPath, String jasperPath) { - // 1. 判断jasper文件是否存在:不存在则需要编译 - File jasperFile = new File(jasperPath); - if (!jasperFile.exists()) { - log.info("jasper文件不存在,需要编译{}",jasperPath); - return true; - } - - // 2. 判断jrxml文件是否存在 + // 判断是否需要编译(jrxml 存在且比 jasper 新) File jrxmlFile = new File(jrxmlPath); - if (!jrxmlFile.exists()) { - throw new IllegalArgumentException("jrxml文件不存在:" + jrxmlPath); - } - - // 3. 比较修改时间:jrxml比jasper新 → 需要编译 - long jrxmlTime = jrxmlFile.lastModified(); - long jasperTime = jasperFile.lastModified(); - boolean needCompile = jrxmlTime > jasperTime; - - if (needCompile) { - log.info("jrxml已修改(" + jrxmlTime + "),晚于jasper(" + jasperTime + "),需要编译"); - } else { - // log.info("jasper文件最新,无需编译"); - } - return needCompile; - } - /** - * 获取 resources/templates/ 目录的绝对路径 - * @return 目录路径(如 "D:/project/target/classes/templates/") - */ - public static String getTemplatePath() { - try { - // 通过类加载器获取 templates 目录的URL - URL templateUrl = JasperReportUtil.class.getClassLoader().getResource(template); - - // 如果URL为空,说明目录不存在,但仍返回理论路径 - if (templateUrl == null) { - URL resourcesUrl = JasperReportUtil.class.getClassLoader().getResource(""); - return resourcesUrl.toURI().getPath() + templatep; + File jasperFile = new File(jasperPath); + // 仅当 jrxml 存在且比 jasper 新(或 jasper 不存在)时才编译 + if (jrxmlFile.exists() && (!jasperFile.exists() || jrxmlFile.lastModified() > jasperFile.lastModified())) { + try (FileInputStream fis = new FileInputStream(jrxmlFile)) { + JasperReport jasperReport = JasperCompileManager.compileReport(fis); + JRSaver.saveObject(jasperReport, jasperFile); + log.info("jrxml 编译成功,保存至:{}", jasperPath); } - // 返回实际路径 - return templateUrl.toURI().getPath()+"/"; - - } catch (URISyntaxException e) { - throw new RuntimeException("获取路径失败", e); } } +// ------------------------------ 路径相关方法 ------------------------------ + + /** + * 从配置中获取模板目录路径(在 printbase 中调用) + */ + private static String getTemplateDir() { + String dir = RuoYiConfig.getProfile(); + if (dir == null || dir.trim().isEmpty()) { + throw new IllegalStateException("配置文件中未设置有效的 profile 路径,请检查 application.yml"); + } + return dir.trim(); + } + + /** + * 初始化模板目录(不存在则创建) + */ + private static void initTemplateDir(String templateDir) { + File dir = new File(templateDir); + if (!dir.exists()) { + boolean created = dir.mkdirs(); + if (created) { + log.info("模板目录初始化成功:{}", templateDir); + } else { + log.error("模板目录创建失败,请检查路径权限:{}", templateDir); + } + } + } + + + } \ No newline at end of file diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java index 63ea612..a2fcd15 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java @@ -1,13 +1,25 @@ package com.czlis.interfaceCommon.utils; + import com.czlis.common.config.RuoYiConfig; + +import com.czlis.interfaceCommon.mapper.BackPaperMapper; +import com.czlis.interfaceCommon.pojo.entity.BackPaperDetail; +import com.czlis.interfaceCommon.pojo.entity.BackPaperParam; import com.czlis.interfaceCommon.pojo.entity.MZBarCodeParam; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.stereotype.Component; +import javax.sql.DataSource; +import java.sql.Connection; import java.util.HashMap; +import java.util.List; import java.util.Map; @@ -15,7 +27,10 @@ import java.util.Map; @Component @Slf4j public class ReportUtil { - + @Autowired + CommonUtil commonUtil; + @Autowired + BackPaperMapper backPaperMapper; public void printBarCode(MZBarCodeParam mzBarCodeParam) { try { //构造数据 @@ -29,7 +44,50 @@ public class ReportUtil { log.error("打印条码报错,条码号:{}",mzBarCodeParam.getSqh(),e); } } + public void printBackpaper(List sqhs) { + String sqh= sqhs.get(0); + BackPaperParam backPaperParam=backPaperMapper.selectReqmian(sqh); + String yljg= backPaperParam.getYljg(); + ObjectMapper objectMapper = new ObjectMapper(); + Map parameters = objectMapper.convertValue(backPaperParam,Map.class); + parameters.put("company",commonUtil.getCompany(yljg)); + List detail= backPaperMapper.selectBySqhs(sqhs); + try { + //构造数据 + JasperReportUtil.print(RuoYiConfig.getMzPrintName(),"backpaper",parameters,detail); + } catch (Exception e) { + e.printStackTrace(); + log.error("打印回单报错,条码号:{}",sqh,e); + } + } + /*** 获取服务器当前的数据库连接事务对象 + * 通过@Qualifier获取实际当前连接事务对象,一般是DynamicDataSource + * 传递服务器获取连接(使用 Spring 工具类确保连接与事务同步) + */ +/* + @Autowired + @Qualifier("dataSource") + private DataSource dataSource; + public void fillReportWithConnection() { + Connection connection = null; + try { + // 从数据源获取连接(自动关联当前事务,避免手动管理事务问题) + connection = DataSourceUtils.getConnection(dataSource); + // 3. 调用 JasperFillManager.fillReport + // InputStream reportStream = ...; // 模板输入流 + // Map params = ...; // 报表参数 + // JasperPrint jasperPrint = JasperFillManager.fillReport(reportStream, params, connection); + + } catch (Exception e) { + log.error("填充报表失败", e); + } finally { + // 4. 释放连接(Spring 环境下需用 DataSourceUtils 关闭,避免事务问题) + if (connection != null) { + DataSourceUtils.releaseConnection(connection, dataSource); + } + } + }*/ } diff --git a/lis-interfaceCommon/src/main/resources/mapper/BackPaperMapper.xml b/lis-interfaceCommon/src/main/resources/mapper/BackPaperMapper.xml new file mode 100644 index 0000000..847d1b2 --- /dev/null +++ b/lis-interfaceCommon/src/main/resources/mapper/BackPaperMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/mzcx/src/main/java/com/czlis/mzcx/service/impl/MZCXServiceImpl.java b/mzcx/src/main/java/com/czlis/mzcx/service/impl/MZCXServiceImpl.java index f438c2f..d527be6 100644 --- a/mzcx/src/main/java/com/czlis/mzcx/service/impl/MZCXServiceImpl.java +++ b/mzcx/src/main/java/com/czlis/mzcx/service/impl/MZCXServiceImpl.java @@ -1,11 +1,9 @@ package com.czlis.mzcx.service.impl; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.XmlUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.czlis.common.core.domain.Result; -import com.czlis.common.core.domain.entity.LabReqdetail; import com.czlis.common.core.domain.entity.LabReqmain; import com.czlis.common.utils.SecurityUtils; import com.czlis.common.utils.ip.IpUtils; @@ -18,16 +16,12 @@ import com.czlis.interfaceCommon.utils.LisInterfaceUtil; import com.czlis.interfaceCommon.utils.LisUtil; import com.czlis.interfaceCommon.utils.ReportUtil; import com.czlis.mzcx.mapper.MZCXMapper; -import com.czlis.mzcx.pojo.MzcxSqdDTO; import com.czlis.mzcx.pojo.OutPatListDTO; import com.czlis.mzcx.service.MZCXService; import lombok.extern.slf4j.Slf4j; -import nonapi.io.github.classgraph.json.JSONUtils; -import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.validation.constraints.NotBlank; import java.util.*; @Service @@ -131,6 +125,7 @@ public class MZCXServiceImpl implements MZCXService { @Override public Result printBackpaper(List sqhs){ log.info("aaaaa: {}", sqhs); + reportUtil.printBackpaper(sqhs); return new Result("0","打印成功!"); } diff --git a/mzcx/src/main/resources/mapper/MZCXMapper.xml b/mzcx/src/main/resources/mapper/MZCXMapper.xml index cc30fe3..d1664c9 100644 --- a/mzcx/src/main/resources/mapper/MZCXMapper.xml +++ b/mzcx/src/main/resources/mapper/MZCXMapper.xml @@ -62,6 +62,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" (lab_reqmain.sqsj <= #{et} ) ]]> + +