2025-03-12 17:12:48 +08:00
package com.dpkj.modules.autoReplyPrint.controller ;
2025-03-14 16:31:53 +08:00
import com.alibaba.fastjson.JSONObject ;
import com.dpkj.common.exception.RRException ;
2025-03-12 17:12:48 +08:00
import com.dpkj.common.vo.Result ;
2025-03-24 10:27:51 +08:00
import com.dpkj.modules.autoReplyPrint.enums.ReceiptTemplateEnum ;
2025-03-12 17:12:48 +08:00
import com.dpkj.modules.autoReplyPrint.request.ReceiptPrintRequest ;
import com.dpkj.modules.autoReplyPrint.service.ImagePrintService ;
import com.dpkj.modules.autoReplyPrint.service.impl.TemplateService ;
2025-03-17 10:28:17 +08:00
import com.dpkj.modules.autoReplyPrint.vo.PrinterStatus ;
import lombok.extern.slf4j.Slf4j ;
2025-03-12 17:12:48 +08:00
import org.springframework.validation.annotation.Validated ;
import org.springframework.web.bind.annotation.* ;
2025-03-14 16:31:53 +08:00
import org.thymeleaf.util.StringUtils ;
2025-03-17 10:28:17 +08:00
import java.io.File ;
2025-03-19 13:48:33 +08:00
import java.io.UnsupportedEncodingException ;
import java.net.URLDecoder ;
2025-03-12 17:12:48 +08:00
import javax.annotation.Resource ;
/ * *
* 小票打印机控制层
*
* @author < a href = " https://gitee.com/shi-chongli " > 石头人 < / a >
* @version 1 . 0
* @since 2025 - 03 - 10 9 : 29 : 22
* /
2025-03-17 10:28:17 +08:00
@Slf4j
2025-03-12 17:12:48 +08:00
@RestController
@RequestMapping ( " /receipt " )
public class ReceiptPrintController {
@Resource ( name = " USBImagePrint " )
private ImagePrintService usbImagePrintService ;
2025-03-14 16:31:53 +08:00
@Resource
private TemplateService templateService ;
2025-03-12 17:12:48 +08:00
@PostMapping ( " /print " )
2025-03-19 13:48:33 +08:00
private Result < Void > print ( @Validated @RequestBody ReceiptPrintRequest request ) throws UnsupportedEncodingException {
2025-03-12 17:12:48 +08:00
String devName = " VID:0x0FE6,PID:0x811E " ; // 采用默认的devName, 不进行入参传值了
2025-03-24 10:27:51 +08:00
String templateName = ReceiptTemplateEnum . getTemplateName ( request . getTemplateName ( ) ) ;
2025-03-17 10:28:17 +08:00
// 进行模板填充
2025-03-17 10:29:19 +08:00
// 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\"}";
2025-03-14 16:31:53 +08:00
StringBuilder filePath = new StringBuilder ( request . getFileDir ( ) ) ;
// 校验是否选中了模板,如果没选中模板的话则不需要另外生成了
if ( ! StringUtils . isEmpty ( request . getTemplateName ( ) ) & & ! StringUtils . isEmpty ( request . getFileDir ( ) ) ) {
2025-03-19 13:48:33 +08:00
byte [ ] image = templateService . generateReceiptImage (
JSONObject . parseObject ( URLDecoder . decode ( request . getTemplateFillData ( ) , " UTF-8 " ) ) ,
2025-03-24 10:27:51 +08:00
templateName ,
2025-03-19 13:48:33 +08:00
request . getWidth ( ) ,
request . getHeight ( ) ,
filePath ) ;
2025-03-14 16:31:53 +08:00
} else {
throw new RRException ( " 模板渲染错误 " ) ;
}
2025-03-12 17:12:48 +08:00
usbImagePrintService . imagePrintFromPath ( devName ,
request . getWidth ( ) ,
request . getHeight ( ) ,
2025-03-14 16:31:53 +08:00
filePath . toString ( ) ,
2025-03-12 17:12:48 +08:00
1 ,
0 ) ;
2025-03-17 10:28:17 +08:00
// 删除图片
File file = new File ( filePath . toString ( ) ) ;
// 检查文件是否存在
if ( file . exists ( ) ) {
// 尝试删除文件
if ( file . delete ( ) ) {
log . info ( " 文件删除成功: " + filePath ) ;
} else {
log . info ( " 文件删除失败: " + filePath ) ;
}
} else {
log . info ( " 文件不存在: " + filePath ) ;
}
2025-03-12 17:12:48 +08:00
return Result . ok ( ) ;
}
2025-03-17 10:28:17 +08:00
@PostMapping ( " /getStatus " )
public Result < PrinterStatus > print ( ) {
String devName = " VID:0x0FE6,PID:0x811E " ; // 采用默认的devName, 不进行入参传值了
return Result . ok ( this . usbImagePrintService . getStatus ( devName ) ) ;
}
2025-03-12 17:12:48 +08:00
}