fix:优化界面

This commit is contained in:
2025-03-26 23:21:19 +08:00
parent 4fbc844ddd
commit 9e13e1eaf0
8 changed files with 107 additions and 22 deletions

View File

@@ -2,7 +2,6 @@ package com.dpkj.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
@@ -29,4 +28,15 @@ public class PrinterConfig {
* 波特率 串口连接下使用
*/
private Integer baudRate;
/**
* 终端号
*/
private String terminalNumber;
/**
* 时间格式
*/
private String timeType;
}

View File

@@ -1,6 +1,8 @@
package com.dpkj.modules.autoReplyPrint.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dpkj.common.config.PrinterConfig;
import com.dpkj.common.exception.RRException;
import com.dpkj.common.vo.Result;
import com.dpkj.modules.autoReplyPrint.enums.ReceiptTemplateEnum;
@@ -15,6 +17,8 @@ import org.thymeleaf.util.StringUtils;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.annotation.Resource;
@@ -30,6 +34,12 @@ import javax.annotation.Resource;
@RequestMapping("/receipt")
public class ReceiptPrintController {
@Resource
private PrinterConfig printerConfig;
private static final int MAX_HEIGHT = 1000;
private static final int FIXED_WIDTH = 730;
@Resource(name = "USBImagePrint")
private ImagePrintService usbImagePrintService;
@@ -40,16 +50,72 @@ public class ReceiptPrintController {
private Result<Void> print(@Validated @RequestBody ReceiptPrintRequest request) throws UnsupportedEncodingException {
String devName = "VID:0x0FE6,PID:0x811E"; // 采用默认的devName不进行入参传值了
String templateName = ReceiptTemplateEnum.getTemplateName(request.getTemplateName());
// 宽度固定
request.setWidth(request.getWidth() > 610 ? 600 : request.getWidth());
JSONObject data = JSONObject.parseObject(URLDecoder.decode(request.getTemplateFillData(), "UTF-8"));
// 强行设置终端号
data.put("terminalNumber", printerConfig.getTerminalNumber());
// 强行设置终端号和打印时间
SimpleDateFormat sdf = new SimpleDateFormat(printerConfig.getTimeType());
String formattedDate = sdf.format( new Date());
data.put("printTime", formattedDate);
Integer height = request.getHeight();
int dinyHeight = 0;
if (templateName.equals("department")) {
// 由于是使用的门诊小票-T2那么默认的高度为1000强行设置通过动态修改渲染的图片的高度
height = 1100;
// 单行最大长度为10
int singleLineMaxLength = 10;
// 这里的长度取自于department.html模板中的项目单个tr高度并且略高于该高度
int singleLineHeight = 30;
// 动态计算长度
JSONArray items = data.getJSONArray("items");
for (Object item : items) {
JSONObject itemEntity = (JSONObject) item;
String projectName = String.valueOf(itemEntity.get("name"));
int length = projectName.length();
int count = (int)Math.ceil((double) length / singleLineMaxLength);
dinyHeight += count * singleLineHeight;
}
// 计算是否有门诊号
String outpatientNumber = data.getString("outpatientNumber");
if ( !StringUtils.isEmpty(outpatientNumber)){
dinyHeight += 28;
}
// 计算是否有就诊医生
String doctor = data.getString("doctor");
if ( !StringUtils.isEmpty(doctor)){
dinyHeight += 28;
}
// 计算是否有就诊科室
String department = data.getString("department");
if ( !StringUtils.isEmpty(department)){
dinyHeight += 28;
}
}
height += dinyHeight;
// 进行模板填充
// String testData = "{\"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_1_250_250\":\"maby this is a Base64 code data if has\",\"terminalNumber\":\"12092794\",\"printTime\":\"2025-01-15 13:10:08\"}";
StringBuilder filePath = new StringBuilder(request.getFileDir());
// 校验是否选中了模板,如果没选中模板的话则不需要另外生成了
if ( !StringUtils.isEmpty(request.getTemplateName()) && !StringUtils.isEmpty(request.getFileDir())){
byte[] image = templateService.generateReceiptImage(
JSONObject.parseObject(URLDecoder.decode(request.getTemplateFillData(), "UTF-8")),
data,
templateName,
request.getWidth(),
request.getHeight(),
height,
filePath);
}else {
throw new RRException("模板渲染错误");