From 438d52da0c12c5dd4843d8778e0a68ded9b3958b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=A4=B4=E4=BA=BA?= <3076767823@qq.com> Date: Wed, 12 Mar 2025 17:12:48 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=BB=9F=E4=B8=80=E5=B0=8F?= =?UTF-8?q?=E7=A5=A8=E6=89=93=E5=8D=B0=E6=9C=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +++ .../controller/ReceiptPrintController.java | 39 +++++++++++++ .../request/ReceiptPrintRequest.java | 58 +++++++++++++++++++ .../service/impl/TemplateService.java | 2 +- .../templates/{hospital.html => receipt.html} | 0 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/dpkj/modules/autoReplyPrint/controller/ReceiptPrintController.java create mode 100644 src/main/java/com/dpkj/modules/autoReplyPrint/request/ReceiptPrintRequest.java rename src/main/resources/templates/{hospital.html => receipt.html} (100%) diff --git a/pom.xml b/pom.xml index 488935e..041c123 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,13 @@ 3.1.28 + + + javax.validation + validation-api + 2.0.1.Final + + diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/controller/ReceiptPrintController.java b/src/main/java/com/dpkj/modules/autoReplyPrint/controller/ReceiptPrintController.java new file mode 100644 index 0000000..5101d7b --- /dev/null +++ b/src/main/java/com/dpkj/modules/autoReplyPrint/controller/ReceiptPrintController.java @@ -0,0 +1,39 @@ +package com.dpkj.modules.autoReplyPrint.controller; + +import com.dpkj.common.vo.Result; +import com.dpkj.modules.autoReplyPrint.request.ReceiptPrintRequest; +import com.dpkj.modules.autoReplyPrint.service.ImagePrintService; +import com.dpkj.modules.autoReplyPrint.service.impl.TemplateService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * 小票打印机控制层 + * + * @author 石头人 + * @version 1.0 + * @since 2025-03-10 9:29:22 + */ +@RestController +@RequestMapping("/receipt") +public class ReceiptPrintController { + + @Resource(name = "USBImagePrint") + private ImagePrintService usbImagePrintService; + + @PostMapping("/print") + private Result print(@Validated @RequestBody ReceiptPrintRequest request){ + String devName = "VID:0x0FE6,PID:0x811E"; // 采用默认的devName,不进行入参传值了 + usbImagePrintService.imagePrintFromPath(devName, + request.getWidth(), + request.getHeight(), + request.getFileDir(), + 1, + 0); + return Result.ok(); + } + +} + diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/request/ReceiptPrintRequest.java b/src/main/java/com/dpkj/modules/autoReplyPrint/request/ReceiptPrintRequest.java new file mode 100644 index 0000000..e443c24 --- /dev/null +++ b/src/main/java/com/dpkj/modules/autoReplyPrint/request/ReceiptPrintRequest.java @@ -0,0 +1,58 @@ +package com.dpkj.modules.autoReplyPrint.request; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 小票打印请求,壁挂和打印机接口 进行统一 + * + * @author 石头人 + * @version 1.0 + * @since 2025-03-10 9:25:34 + */ +@Data +@ToString +@AllArgsConstructor +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class ReceiptPrintRequest implements Serializable { + + /** + * 文件路径地址,填写本地路径,默认为 D:/images + */ + @NotBlank(message = "文件路径不能为空") + private String fileDir = "D:/images"; + + /** + * 模板名称,也可以是自己写的html的字符串文件 + */ + private String templateName = "receipt"; + + /** + * 填充模板的数据,必填,也可以通过自己设置的模板名称进行设计,部分设计规则 + *

1、特殊字段(二维码图片)类型:qrCodeBase64_2base64Type_120_120,字段解析,qrCodeBase64为字段名称, + * _2base64Type为将这个数据转换为图片类型的base64编码,第一个_120图片的宽度,第二个_120的为图片高度

+ *

2、需要对传入的JSON数据进行URI编码

+ *

3、{"hospitalName":"澜沧县中医医院","registeTerminalName":"中国农业银行自助终端","registeType":"自助挂号","name":"刘博雅","gender":"男","age":28,"birthDate":"1996-06-31","cardNumber":"6221**********0731","outpatientNumber":"2501150038","department":"普外科门诊","visitLevel":"普通号","doctor":"普通门诊","sequence":"1","registerDate":"2025-01-15","totalFee":4.00,"paymentMethod":"微信扫码支付","orderNumber":"","transactionNumber":"2025011513090412092794szztzzj","qrCodeBase64_2base64Type_120_120":"这里应是二维码的Base64编码数据(如果有)","terminalNumber":"12092794","printTime":"2025-01-15 13:10:08"}

+ */ + @NotBlank(message = "模板填充数据不能为空") + private String templateFillData; + + /** + * 小票渲染宽度,默认为:600 + */ + private Integer width = 600; + + /** + * 生成的模板的高度,默认为:950 + */ + private Integer height = 950; + +} + diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/TemplateService.java b/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/TemplateService.java index 834f51f..6121014 100644 --- a/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/TemplateService.java +++ b/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/TemplateService.java @@ -137,7 +137,7 @@ public class TemplateService { Context context = new Context(); Set keys = data.keySet(); for (String key : keys) { - // 判单是否有图片生成,统一后面采用的是_2base64Type + // 判单是否有图片生成,统一后面采用的是_2base64Type 例子: qrCodeBase64_2base64Type_120_120 String[] split = key.split("_"); if (split.length > 1 && split[1].equals("2base64Type")) { int width = split.length > 2 ? Integer.parseInt(split[2]) : 100; diff --git a/src/main/resources/templates/hospital.html b/src/main/resources/templates/receipt.html similarity index 100% rename from src/main/resources/templates/hospital.html rename to src/main/resources/templates/receipt.html