diff --git a/lis-common/src/main/java/com/czlis/common/config/RuoYiConfig.java b/lis-common/src/main/java/com/czlis/common/config/RuoYiConfig.java index c6828e2..ddb7ec7 100644 --- a/lis-common/src/main/java/com/czlis/common/config/RuoYiConfig.java +++ b/lis-common/src/main/java/com/czlis/common/config/RuoYiConfig.java @@ -51,11 +51,20 @@ public class RuoYiConfig { */ private static String interfaceUrl; + /** + * 门诊条码打印机名称 + */ + private static String mzPrintName; + + + + + public static String getInterfaceUrl() { return interfaceUrl; } - public static void setInterfaceUrl(String interfaceUrl) { + public void setInterfaceUrl(String interfaceUrl) { RuoYiConfig.interfaceUrl = interfaceUrl; } @@ -63,7 +72,7 @@ public class RuoYiConfig { return interfaceType; } - public static void setInterfaceType(String interfaceType) { + public void setInterfaceType(String interfaceType) { RuoYiConfig.interfaceType = interfaceType; } @@ -142,4 +151,12 @@ public class RuoYiConfig { public static String getUploadPath() { return getProfile() + "/upload"; } + + public static String getMzPrintName() { + return mzPrintName; + } + + public void setMzPrintName(String mzPrintName) { + RuoYiConfig.mzPrintName = mzPrintName; + } } diff --git a/lis-interfaceCommon/pom.xml b/lis-interfaceCommon/pom.xml index 2d535e4..6ecc5c5 100644 --- a/lis-interfaceCommon/pom.xml +++ b/lis-interfaceCommon/pom.xml @@ -16,6 +16,31 @@ com.czlis lis-common + + + net.sf.jasperreports + jasperreports + + + com.lowagie + itext + + + net.sourceforge.barbecue + barbecue + 1.5-beta1 + + + junit + junit + test + + + org.springframework.boot + spring-boot-test + test + + diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/LabReqdetailMapper.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/LabReqdetailMapper.java index 4651063..e40565e 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/LabReqdetailMapper.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/mapper/LabReqdetailMapper.java @@ -1,4 +1,9 @@ package com.czlis.interfaceCommon.mapper; +import com.czlis.common.core.domain.entity.LabReqdetail; + +import java.util.List; + public interface LabReqdetailMapper { + List getLabReqdetailList(String sqh); } diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/MZBarCodeParam.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/MZBarCodeParam.java new file mode 100644 index 0000000..d697760 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/entity/MZBarCodeParam.java @@ -0,0 +1,20 @@ +package com.czlis.interfaceCommon.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MZBarCodeParam { + private String sqh; + private String brxm; + private String brxb; + private String nl; + private String sfxmmc; + private String ksmc; + + + +} 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 a8989ea..7a5bb6b 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 @@ -1,6 +1,7 @@ package com.czlis.interfaceCommon.utils; import com.czlis.common.core.domain.entity.LabPat; +import com.czlis.common.core.domain.entity.LabReqdetail; import com.czlis.common.core.domain.entity.LabReqmain; import com.czlis.common.core.domain.entity.LabResult; import com.czlis.interfaceCommon.mapper.*; @@ -27,6 +28,8 @@ public class CommonUtil { ComDictMapper comDictMapper; @Autowired private LabResultMapper labResultMapper; + @Autowired + LabReqdetailMapper labReqdetailMapper; //====检验主表操作方法集合=== public LabPat getLabPatOne(Date jyrq, String yq, String ybh){ @@ -88,5 +91,9 @@ public class CommonUtil { return comOptMapper.getComOptValue(yq,xxdh); } + public List getLabReqdetailList(String sqh){ + return labReqdetailMapper.getLabReqdetailList(sqh); + } + } diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java new file mode 100644 index 0000000..a40bdb2 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java @@ -0,0 +1,68 @@ +package com.czlis.interfaceCommon.utils; + +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public class LisUtil { + + /** + * 生日格式为:yyyy-MM-dd + * 根据出生日期计算年龄 + * @param birthday + * @return + */ + public static Map getAgeFromBirthDay(String birthday){ + Map map = new HashMap<>(); + int age = DateUtil.ageOfNow(birthday); + if(age > 0){ + map.put("age",String.valueOf(age)); + map.put("unit","岁"); + }else if(age == 0){ + //不足一年的 + long between = DateUtil.between(DateUtil.parse(birthday, "yyyy-MM-dd"), DateUtil.parse(DateUtil.today(), "yyyy-MM-dd"), DateUnit.DAY,true); + + if(between/30 > 0){ + long month = between/30; + map.put("age",String.valueOf(month)); + map.put("unit","月"); + }else if( between/30 == 0){ + //不足一月的 + map.put("age",String.valueOf(between)); + map.put("unit","天"); + }else{ + + } + }else{ + + } + return map; + } + + /** + * 根据年龄获取出生日期 + * @param nl + * @return + */ + public static Date getBirthDayFromAge(int nl, String nldw){ + Calendar cal = Calendar.getInstance(); + cal.setTime(DateUtil.date()); + switch (nldw){ + case "岁": + cal.add(Calendar.YEAR,-nl); + case "月": + cal.add(Calendar.MONTH,-nl); + case "天": + cal.add(Calendar.DATE,-nl); + } + Date BirthDay = cal.getTime(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String format = df.format(BirthDay); + return DateUtil.parse(format,"yyyy-MM-dd"); + } +} 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 new file mode 100644 index 0000000..863e595 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/ReportUtil.java @@ -0,0 +1,127 @@ +package com.czlis.interfaceCommon.utils; + + +import com.czlis.common.config.RuoYiConfig; +import com.czlis.interfaceCommon.pojo.entity.MZBarCodeParam; +import lombok.extern.slf4j.Slf4j; +import net.sf.jasperreports.engine.*; +import net.sf.jasperreports.engine.export.JRPrintServiceExporter; +import net.sf.jasperreports.export.SimpleExporterInput; +import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration; +import org.springframework.stereotype.Component; + +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Copies; + +import java.util.HashMap; +import java.util.Map; + +import net.sf.jasperreports.engine.JasperPrint; +import javax.print.PrintService; +import javax.print.PrintServiceLookup; +import javax.print.attribute.standard.MediaSizeName; + + +@Component +@Slf4j +public class ReportUtil { + + + + public void printBarCode(MZBarCodeParam mzBarCodeParam) { + + String jrxmlPath = RuoYiConfig.getProfile() + "\\barcode.jrxml"; + String jasperPath = RuoYiConfig.getProfile() + "\\barcode.jasper"; + + // 获取类路径(resources 目录) + String property = System.getProperty("user.dir"); + System.out.println("打印路径:"+property); + //String resourcesPath = property + "\\lis-" + File.separator + jasperPath; + + //编译模板 + try { + JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath); + //构造数据 + Map parameters = new HashMap(); + parameters.put("barcode",mzBarCodeParam.getSqh()); + parameters.put("line1",mzBarCodeParam.getBrxm() + " " + mzBarCodeParam.getBrxb() + " " + mzBarCodeParam.getNl()); + parameters.put("line2",mzBarCodeParam.getSfxmmc()); + + + //填充数据 + JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, new JREmptyDataSource()); + + //输出文件 +// String pdfPath = "E:\\barcode.pdf"; +// JasperExportManager.exportReportToPdfFile(jasperPrint,pdfPath); +// printPdfFile(pdfPath); + + //打印条码 + //JasperPrintManager.printReport(jasperPrint, false); + print(jasperPrint,false, RuoYiConfig.getMzPrintName()); + } catch (Exception e) { + e.printStackTrace(); + log.error("打印条码报错,条码号:{}",mzBarCodeParam.getSqh(),e); + } + + + } + + /** + * 6.8.0版本专用:指定打印机打印报表 + * @param jasperPrint 报表对象 + * @param showDialog 是否显示打印对话框 + * @param printerName 目标打印机名称(支持模糊匹配) + * @throws Exception 打印异常 + */ + public static void print(JasperPrint jasperPrint, boolean showDialog, String printerName) throws Exception { + // 1. 获取系统中所有可用打印机 + PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); + if (printServices == null || printServices.length == 0) { + throw new RuntimeException("未检测到任何可用打印机"); + } + + // 2. 查找目标打印机(6.8.0版本兼容的遍历方式) + PrintService targetService = null; + for (PrintService service : printServices) { + String serviceName = service.getName(); + // 精确匹配可改为:serviceName.equals(printerName) + if (serviceName.contains(printerName)) { + targetService = service; + break; + } + } + + if (targetService == null) { + throw new RuntimeException("未找到名称包含 [" + printerName + "] 的打印机"); + } + + // 3. 配置打印参数(6.8.0版本的标准API) + JRPrintServiceExporter exporter = new JRPrintServiceExporter(); + SimplePrintServiceExporterConfiguration config = new SimplePrintServiceExporterConfiguration(); + + // 设置目标打印机 + config.setPrintService(targetService); + // 控制是否显示系统打印对话框(6.8.0版本此参数有效) + config.setDisplayPrintDialog(showDialog); + // 不显示页面设置对话框(如需显示可改为true) + config.setDisplayPageDialog(false); + + // 4. 设置打印属性(份数、纸张等) + PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); + attributes.add(new Copies(1)); // 打印份数 + attributes.add(MediaSizeName.ISO_A4); // 纸张大小A4 + // 可选:设置打印方向(横向) + // attributes.add(OrientationRequested.LANDSCAPE); + config.setPrintRequestAttributeSet(attributes); + + // 5. 绑定报表并执行打印(6.8.0版本的标准导出方式) + exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); + exporter.setConfiguration(config); + exporter.exportReport(); + } + + + +} diff --git a/lis-interfaceCommon/src/main/resources/jasperreports_extension.properties b/lis-interfaceCommon/src/main/resources/jasperreports_extension.properties new file mode 100644 index 0000000..b5931af --- /dev/null +++ b/lis-interfaceCommon/src/main/resources/jasperreports_extension.properties @@ -0,0 +1,2 @@ +net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory +net.sf.jasperreports.extension.simple.font.families.lobstertwo=stsong/fonts.xml \ No newline at end of file diff --git a/lis-interfaceCommon/src/main/resources/mapper/LabReqdetailMapper.xml b/lis-interfaceCommon/src/main/resources/mapper/LabReqdetailMapper.xml new file mode 100644 index 0000000..6e111ac --- /dev/null +++ b/lis-interfaceCommon/src/main/resources/mapper/LabReqdetailMapper.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/lis-interfaceCommon/src/main/resources/stsong/fonts.xml b/lis-interfaceCommon/src/main/resources/stsong/fonts.xml new file mode 100644 index 0000000..a8e1f1d --- /dev/null +++ b/lis-interfaceCommon/src/main/resources/stsong/fonts.xml @@ -0,0 +1,15 @@ + + + + stsong/stsong.ttf + stsong/stsong.ttf + stsong/stsong.ttf + stsong/stsong.ttf + Identity-H + true + + '华文宋体',Arial,Helvetica,sans-serif + '华文宋体',Arial,Helvetica,sans-serif + + + \ No newline at end of file diff --git a/lis-interfaceCommon/src/main/resources/stsong/stsong.ttf b/lis-interfaceCommon/src/main/resources/stsong/stsong.ttf new file mode 100644 index 0000000..6f84fd6 Binary files /dev/null and b/lis-interfaceCommon/src/main/resources/stsong/stsong.ttf differ diff --git a/lis-interfaceCommon/src/main/resources/template/barcode.jasper b/lis-interfaceCommon/src/main/resources/template/barcode.jasper new file mode 100644 index 0000000..f3c0730 Binary files /dev/null and b/lis-interfaceCommon/src/main/resources/template/barcode.jasper differ diff --git a/lis-interfaceCommon/src/main/resources/template/barcode.jrxml b/lis-interfaceCommon/src/main/resources/template/barcode.jrxml new file mode 100644 index 0000000..d608558 --- /dev/null +++ b/lis-interfaceCommon/src/main/resources/template/barcode.jrxml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + <band height="184" splitType="Stretch"> + <componentElement> + <reportElement x="6" y="6" width="130" height="32" uuid="e6aa5ef9-8f70-45cb-969e-8484f75390bb"> + <property name="com.jaspersoft.studio.unit.width" value="pixel"/> + <property name="com.jaspersoft.studio.unit.x" value="px"/> + </reportElement> + <jr:barbecue xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="Code128" drawText="false" checksumRequired="false"> + <jr:codeExpression><![CDATA[$P{barcode}]]></jr:codeExpression> + </jr:barbecue> + </componentElement> + <textField> + <reportElement x="17" y="23" width="100" height="15" uuid="925826fe-f359-43dd-b4c2-aa5fee83be67"/> + <textElement> + <font fontName="华文宋体" size="10"/> + </textElement> + <textFieldExpression><![CDATA[$P{barcode}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="7" y="39" width="128" height="15" uuid="9029e1d0-5307-4d60-8098-225825491e85"> + <property name="com.jaspersoft.studio.unit.height" value="px"/> + </reportElement> + <textElement> + <font fontName="华文宋体" size="10"/> + </textElement> + <textFieldExpression><![CDATA[$P{line1}]]></textFieldExpression> + </textField> + <textField> + <reportElement x="6" y="56" width="130" height="15" uuid="902afe45-cfe9-4095-9a76-b0ea517a08b3"> + <property name="com.jaspersoft.studio.unit.height" value="px"/> + </reportElement> + <textElement> + <font fontName="华文宋体" size="10"/> + </textElement> + <textFieldExpression><![CDATA[$P{line2}]]></textFieldExpression> + </textField> + </band> + + diff --git a/lis-system/src/main/resources/application.yml b/lis-system/src/main/resources/application.yml index 1450472..1ae9566 100644 --- a/lis-system/src/main/resources/application.yml +++ b/lis-system/src/main/resources/application.yml @@ -7,12 +7,12 @@ czlis: # 版权年份 copyrightYear: 2025 # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) - profile: D:/czlis/uploadPath + profile: D:/czlis/upload + mzPrintName: pdfFactory Pro # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数字计算 char 字符验证 captchaType: math - interfaceType: 1 interfaceUrl: http://localhost:8080 # 开发环境配置 diff --git a/mzcx/src/main/java/com/czlis/mzcx/controller/MZCXController.java b/mzcx/src/main/java/com/czlis/mzcx/controller/MZCXController.java index 03c31cd..7b5fc32 100644 --- a/mzcx/src/main/java/com/czlis/mzcx/controller/MZCXController.java +++ b/mzcx/src/main/java/com/czlis/mzcx/controller/MZCXController.java @@ -34,7 +34,7 @@ public class MZCXController extends BaseController { @ApiOperation("获取申请单信息") @GetMapping("/querySQD") public Result querySQD(String brdh,String stime,String etime,String klx,String zt){ - return mzcxService.querySQD(brdh,stime,etime,klx,zt); + return mzcxService.querySQD(brdh,stime,etime,klx,zt,getUserId()); } /** @@ -44,6 +44,6 @@ public class MZCXController extends BaseController { */ @GetMapping("/printBarcode") public Result printSQD(String sqh){ - return null; + return mzcxService.printSQD(sqh); } } diff --git a/mzcx/src/main/java/com/czlis/mzcx/service/MZCXService.java b/mzcx/src/main/java/com/czlis/mzcx/service/MZCXService.java index d328e54..fba1765 100644 --- a/mzcx/src/main/java/com/czlis/mzcx/service/MZCXService.java +++ b/mzcx/src/main/java/com/czlis/mzcx/service/MZCXService.java @@ -6,5 +6,7 @@ import com.czlis.mzcx.pojo.MzcxSqdDTO; import java.util.List; public interface MZCXService { - Result querySQD(String brdh, String stime, String etime, String klx, String zt); + Result querySQD(String brdh, String stime, String etime, String klx, String zt,Long userId); + + Result printSQD(String sqh); } 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 d0f37ea..68768bd 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,6 +1,17 @@ package com.czlis.mzcx.service.impl; +import cn.hutool.core.date.DateUtil; +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.interfaceCommon.constants.LisinterfaceNameConstants; +import com.czlis.interfaceCommon.pojo.entity.MZBarCodeParam; +import com.czlis.interfaceCommon.pojo.inter.GetReqInterface; +import com.czlis.interfaceCommon.utils.CommonUtil; +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.service.MZCXService; @@ -8,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.validation.constraints.NotBlank; import java.util.*; @Service @@ -16,9 +28,27 @@ public class MZCXServiceImpl implements MZCXService { @Autowired MZCXMapper mzcxMapper; + @Autowired + ReportUtil reportUtil; + @Autowired + LisInterfaceUtil lisInterfaceUtil; + @Autowired + private CommonUtil commonUtil; @Override - public Result querySQD(String brdh, String stime, String etime, String klx,String zt) { + public Result querySQD(String brdh, String stime, String etime, String klx,String zt,Long userId) { + GetReqInterface getReqInterface = new GetReqInterface(); + getReqInterface.setBrdh(brdh); + getReqInterface.setStime(stime); + getReqInterface.setEtime(etime); + getReqInterface.setBrly(""); + getReqInterface.setSqh(""); + getReqInterface.setBz1(""); + getReqInterface.setUserid(userId.toString()); + getReqInterface.setYljg("1"); + getReqInterface.setDept(""); + String jsonStr = JSONUtil.toJsonStr(getReqInterface); + Result result = lisInterfaceUtil.invokeLisInterface(LisinterfaceNameConstants.GETREQINTERFACE, jsonStr); Map map = new HashMap<>(); map.put("brdh", brdh); map.put("st", stime); @@ -29,6 +59,35 @@ public class MZCXServiceImpl implements MZCXService { return new Result("0","修改条码成功!",mzcxMapper.querySQD(map)); } + @Override + public Result printSQD(String sqh) { + LabReqmain labReqmainOne = commonUtil.getLabReqmainOne(sqh); + //List labReqdetailList = commonUtil.getLabReqdetailList(sqh); + MZBarCodeParam mzBarCodeParam = new MZBarCodeParam(); + mzBarCodeParam.setSqh(sqh); + Map ageFromBirthDay = LisUtil.getAgeFromBirthDay(DateUtil.format(labReqmainOne.getBrsr(), "yyyy-MM-dd HH:mm:ss")); + String age = ageFromBirthDay.get("age"); + String unit = ageFromBirthDay.get("unit"); + + mzBarCodeParam.setNl(age+unit); + mzBarCodeParam.setBrxm(labReqmainOne.getBrxm()); + String brxb = labReqmainOne.getBrxb(); + switch (brxb){ + case "1": + brxb = "男"; + break; + case "2": + brxb = "女"; + break; + default: + brxb = ""; + + } + mzBarCodeParam.setBrxb(brxb); + mzBarCodeParam.setSfxmmc(labReqmainOne.getJymd()); + reportUtil.printBarCode(mzBarCodeParam); + return null; + } } diff --git a/pom.xml b/pom.xml index 007cdfe..d90e7c5 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,9 @@ 3.0.3 8.2.2.jre8 2.5.1 + 6.8.0 + 2.1.7 + 1.5-beta1 9.0.98 @@ -289,6 +292,27 @@ pinyin4j ${pinyin4j.version} + + + + net.sf.jasperreports + jasperreports + ${jasperreports.version} + + + + com.lowagie + itext + ${itext.version} + + + + net.sourceforge.barbecue + barbecue + ${barbecue.version} + + +