fix:统一采用AutoReplyPrint接口进行调用本地接口

This commit is contained in:
石崇礼 2025-01-15 16:05:06 +08:00
parent 4291244a1d
commit 02129e4db6
5 changed files with 256 additions and 117 deletions

View File

@ -3,8 +3,7 @@ package com.dpkj.modules.autoReplyPrint.service.impl;
import com.dpkj.common.vo.Result; import com.dpkj.common.vo.Result;
import com.dpkj.modules.autoReplyPrint.service.AutoReplyPrintService; import com.dpkj.modules.autoReplyPrint.service.AutoReplyPrintService;
import com.dpkj.modules.autoReplyPrint.utils.AutoReplyPrint; import com.dpkj.modules.autoReplyPrint.utils.AutoReplyPrint;
import com.dpkj.modules.autoReplyPrint.utils.AutoReplyPrint2; import com.sun.jna.Pointer;
import com.dpkj.modules.autoReplyPrint.utils.MyLibrary;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -13,17 +12,14 @@ import org.springframework.stereotype.Service;
@Service @Service
public class AutoReplyPrintServiceImpl implements AutoReplyPrintService { public class AutoReplyPrintServiceImpl implements AutoReplyPrintService {
private AutoReplyPrint2.AutoReplyPrint2Sdk autoReplyPrint2Sdk = AutoReplyPrint2.getAutoReplyPrint2SDK();
public AutoReplyPrintServiceImpl() throws AutoReplyPrint2.AutoReplyPrint2RegistrationException {
}
@Override @Override
public Result<?> CPPrinterGetPrinterFirmwareVersion() { public Result<?> CPPrinterGetPrinterFirmwareVersion() {
String s = MyLibrary.INSTANCE.CP_Printer_GetPrinterFirmwareVersion(); Pointer pointer = AutoReplyPrint.INSTANCE.CP_Port_OpenUsb("VID:0x0FE6,PID:0x811E", 1);
//String s = autoReplyPrint2Sdk.CPPrinterGetPrinterFirmwareVersion(); //String s = autoReplyPrint2Sdk.CPPrinterGetPrinterFirmwareVersion();
log.info("壁挂机打印机版本信息{}", s); // log.info("壁挂机打印机版本信息{}", s);
return Result.ok(s); return Result.ok("");
} }
} }

View File

@ -180,55 +180,282 @@ public interface AutoReplyPrint extends Library {
int CP_Label_Color_White = 0; int CP_Label_Color_White = 0;
int CP_Label_Color_Black = 1; int CP_Label_Color_Black = 1;
/**
* 获取开发包版本字符串
*
* @return 返回开发包版本
*/
String CP_Library_Version(); String CP_Library_Version();
int CP_Port_EnumCom(byte[] var1, int var2, IntByReference var3); /**
* 枚举本地串口
*
* @param pBuf 用来保存端口列表的缓冲区
* @param cbBuf 缓冲区字节数
* @param pcbNeeded 需要的缓冲区字节数
* @return 枚举到的端口数量
*/
int CP_Port_EnumCom(byte[] pBuf, int cbBuf, IntByReference pcbNeeded);
int CP_Port_EnumLpt(byte[] var1, int var2, IntByReference var3); /**
* 枚举本地并口
*
* @param pBuf 用来保存端口列表的缓冲区
* @param cbBuf 缓冲区字节数
* @param pcbNeeded 需要的缓冲区字节数
* @return 枚举到的端口数量
*/
int CP_Port_EnumLpt(byte[] pBuf, int cbBuf, IntByReference pcbNeeded);
int CP_Port_EnumUsb(byte[] var1, int var2, IntByReference var3); /**
* 枚举本地 USB 打印口
*
* @param pBuf 用来保存端口列表的缓冲区
* @param cbBuf 缓冲区字节数
* @param pcbNeeded 需要的缓冲区字节数
* @return 枚举到的端口数量
*/
int CP_Port_EnumUsb(byte[] pBuf, int cbBuf, IntByReference pcbNeeded);
void CP_Port_EnumNetPrinter(int var1, IntByReference var2, CP_OnNetPrinterDiscovered_Callback var3, Pointer var4); /**
* 枚举网络打印机
*
* @param timeout 超时毫秒时间
* @param cancel 取消标记位如果设为非零则枚举提前退出
* @param on_discovered 枚举回调接口
* @param private_data 传给回调接口的参数
* @return
*/
void CP_Port_EnumNetPrinter(int timeout, IntByReference cancel, CP_OnNetPrinterDiscovered_Callback on_discovered, Pointer private_data);
void CP_Port_EnumBtDevice(int var1, IntByReference var2, CP_OnBluetoothDeviceDiscovered_Callback var3, Pointer var4); /**
* 枚举蓝牙打印机
*
* @param timeout 超时毫秒时间
* @param cancel 取消标记位如果设为非零则枚举提前退出
* @param on_discovered 枚举回调接口
* @param private_data 传给回调接口的参数
* @return
*/
void CP_Port_EnumBtDevice(int timeout, IntByReference cancel, CP_OnBluetoothDeviceDiscovered_Callback on_discovered, Pointer private_data);
void CP_Port_EnumBleDevice(int var1, IntByReference var2, CP_OnBluetoothDeviceDiscovered_Callback var3, Pointer var4); /**
* 枚举 BLE 蓝牙打印机
*
* @param timeout 超时毫秒时间
* @param cancel 取消标记位如果设为非零则枚举提前退出
* @param on_discovered 枚举回调接口
* @param private_data 传给回调接口的参数
* @return
*/
void CP_Port_EnumBleDevice(int timeout, IntByReference cancel, CP_OnBluetoothDeviceDiscovered_Callback on_discovered, Pointer private_data);
Pointer CP_Port_OpenCom(String var1, int var2, int var3, int var4, int var5, int var6, int var7); /**
* 打开串口
*
* @param name 端口名称例如COM1COM2COM3...COM11...
* @param baudrate 波特率一般取 9600,19200,38400,57600,115200
* 需要和打印机波特率保持一致建议使用高波特率以获得较好的打印速度
* @param databits 数据位范围[4,8]
* @param parity 校验位各值定义如下
* 定义
* 0 无校验
* 1 奇校验
* 2 偶校验
* 3 标记校验
* 4 空白校验
* @param stopbits 停止位各值定义如下
* 定义
* 0 1 位停止位
* 1 1.5 位停止位
* 2 2 位停止位
* @param flowcontrol 流控制
* @param autoreplymode 0 不开启自动回传模式1 开启自动回传模式
* 注意仅部分机型支持自动回传模式是否支持请询问卖家
* 启动自动回传模式之后打印机会自动回传状态
* 不启动则无法自动获取打印机状态
* @return 返回打开的端口句柄非零表示打开成功零表示打开失败
* 备注如果串口被占用打开串口会失败
* 如果波特率和打印机波特率不匹配则无法打印
*/
Pointer CP_Port_OpenCom(String name, int baudrate, int databits, int parity, int stopbits, int flowcontrol, int autoreplymode);
Pointer CP_Port_OpenLpt(String var1); /**
* 打开并口
*
* @param name 端口名称例如LPT1,LPT2,LPT3...
* @return 返回打开的端口句柄非零表示打开成功零表示打开失败
*
* 备注并口只有单向通讯只可写不可读
* 一切查询状态的函数对并口来说均是无效的
*/
Pointer CP_Port_OpenLpt(String name);
Pointer CP_Port_OpenUsb(String var1, int var2); /**
* 打开 USB
*
* @param name 端口名称可由 EnumUsb 获得也可以不指定这时候如果找到 USB 打印机会直接打开
* @param autoreplymode 0 不开启自动回传模式1 开启自动回传模式
* 注意仅部分机型支持自动回传模式是否支持请询问卖家
* 启动自动回传模式之后打印机会自动回传状态不启动则无法自动获取打印机状态
* @return 返回打开的端口句柄非零表示打开成功零表示打开失败
* 备注USB 打印机接到电脑上如果设备管理器中出现了 USB Printing Support则可以使用该函数打开
*/
Pointer CP_Port_OpenUsb(String name, int autoreplymode);
Pointer CP_Port_OpenTcp(String var1, String var2, short var3, int var4, int var5); /**
* 打开网口
*
* @param local_ip 绑定到本地 IP用于多网卡或多个本地 IP 选择指定的 IP传入 0 表示不指定
* @param dest_ip 地址或名称例如192.168.1.87
* @param dest_port 端口号固定值9100
* @param timeout 连接超时
* @param autoreplymode 0 不开启自动回传模式1 开启自动回传模式
* 注意仅部分机型支持自动回传模式是否支持请询问卖家
* 启动自动回传模式之后打印机会自动回传状态不启动则无法自动获取打印机状态
* @return 返回打开的端口句柄非零表示打开成功零表示打开失败
* 备注PC 和打印机需要同网段的才可以连接
*/
Pointer CP_Port_OpenTcp(String local_ip, String dest_ip, short dest_port, int timeout, int autoreplymode);
Pointer CP_Port_OpenBtSpp(String var1, int var2); /**
* 通过 SPP 连接蓝牙打印机
*
* @param address 打印机地址例如"01:02:03:04:05:06"
* @param autoreplymode 0 不开启自动回传模式1 开启自动回传模式
* 注意仅部分机型支持自动回传模式是否支持请询问卖家
* 启动自动回传模式之后打印机会自动回传状态
* 不启动则无法自动获取打印机状态
* @return 返回打开的端口句柄非零表示打开成功零表示打开失败
*
* 备注仅适用于 Android
*/
Pointer CP_Port_OpenBtSpp(String address, int autoreplymode);
Pointer CP_Port_OpenBtBle(String var1, int var2); /**
* 通过 BLE 连接蓝牙打印机
*
* @param address 打印机地址例如"01:02:03:04:05:06"
* @param autoreplymode 0 不开启自动回传模式1 开启自动回传模式
* 注意仅部分机型支持自动回传模式是否支持请询问卖家
* 启动自动回传模式之后打印机会自动回传状态不启动则无法自动获取打印机状态
* @return 返回打开的端口句柄非零表示打开成功零表示打开失败
*
* 备注仅适用于 AndroidiOSmacOS
*/
Pointer CP_Port_OpenBtBle(String address, int autoreplymode);
int CP_Port_Write(Pointer var1, byte[] var2, int var3, int var4); /**
* 向端口写入数据
*
* @param handle 端口句柄 OpenXXX 返回
* @param buffer 要写入的数据
* @param count 要写入的长度
* @param timeout 写入超时毫秒
* @return 返回写入的字节数-1 表示写入失败
*/
int CP_Port_Write(Pointer handle, byte[] buffer, int count, int timeout);
int CP_Port_Read(Pointer var1, byte[] var2, int var3, int var4); /**
* 从端口接收数据
*
* @param handle 端口句柄 OpenXXX 返回
* @param buffer 接收数据的缓冲区
* @param count 要接收的数据长度
* @param timeout 读取超时毫秒
* @return 返回读取的字节数-1 表示失败
*/
int CP_Port_Read(Pointer handle, byte[] buffer, int count, int timeout);
int CP_Port_ReadUntilByte(Pointer var1, byte[] var2, int var3, int var4, byte var5); /**
* 从端口接收数据直到指定字节
*
* @param handle 端口句柄 OpenXXX 返回
* @param buffer 接收数据的缓冲区
* @param count 要接收的数据长度
* @param timeout 读取超时毫秒
* @param breakByte 结束读取字符
* @return 返回读取的字节数-1 表示失败
*/
int CP_Port_ReadUntilByte(Pointer handle, byte[] buffer, int count, int timeout, byte breakByte);
int CP_Port_Available(Pointer var1); /**
* 返回可读取的字节数
*
* @param handle 端口句柄 OpenXXX 返回
* @return 返回可读取的字节数-1 表示失败
*/
int CP_Port_Available(Pointer handle);
boolean CP_Port_SkipAvailable(Pointer var1); /**
* 忽略接收缓冲区的数据
*
* @param handle 端口句柄 OpenXXX 返回
* @return 成功返回 true失败返回 false
*/
boolean CP_Port_SkipAvailable(Pointer handle);
boolean CP_Port_IsConnectionValid(Pointer var1); /**
* 连接是否有效
*
* @param handle 端口句柄 OpenXXX 返回
* @return 如果端口已打开且状态持续更新则返回 true
* 如果端口未打开已关闭或状态超过 6 秒未更新则返回 false
*/
boolean CP_Port_IsConnectionValid(Pointer handle);
boolean CP_Port_IsOpened(Pointer var1); /**
* 检查端口是否打开
*
* @param handle 端口句柄 OpenXXX 返回
* @return 如果端口已打开且连接未断开未关闭则返回 true
* 如果端口未打开或连接已断开已关闭则返回 false
*/
boolean CP_Port_IsOpened(Pointer handle);
boolean CP_Port_Close(Pointer var1); /**
* 关闭端口
*
* @param handle 端口句柄 OpenXXX 返回
* @return 成功返回 true失败返回 false
*/
boolean CP_Port_Close(Pointer handle);
boolean CP_Port_AddOnPortOpenedEvent(CP_OnPortOpenedEvent_Callback var1, Pointer var2); /**
* 添加回调接口端口打开成功
*
* @param event 回调接口
* @param private_data 传给回调接口的参数
* @return 成功返回 true失败返回 false
*/
boolean CP_Port_AddOnPortOpenedEvent(CP_OnPortOpenedEvent_Callback event, Pointer private_data);
boolean CP_Port_AddOnPortOpenFailedEvent(CP_OnPortOpenFailedEvent_Callback var1, Pointer var2); /**
* 添加回调接口端口打开失败
*
* @param event 回调接口
* @param private_data 传给回调接口的参数
* @return 成功返回 true失败返回 false
*/
boolean CP_Port_AddOnPortOpenFailedEvent(CP_OnPortOpenFailedEvent_Callback event, Pointer private_data);
boolean CP_Port_AddOnPortClosedEvent(CP_OnPortClosedEvent_Callback var1, Pointer var2); /**
* 添加回调接口端口关闭
*
* @param event 回调接口
* @param private_data 传给回调接口的参数
* @return 成功返回 true失败返回 false
*/
boolean CP_Port_AddOnPortClosedEvent(CP_OnPortClosedEvent_Callback event, Pointer private_data);
boolean CP_Port_AddOnPortWrittenEvent(CP_OnPortWrittenEvent_Callback var1, Pointer var2); /**
* 添加回调接口端口写入数据
*
* @param event 回调接口
* @param private_data 传给回调接口的参数
* @return 成功返回 true失败返回 false
*/
boolean CP_Port_AddOnPortWrittenEvent(CP_OnPortWrittenEvent_Callback event, Pointer private_data);
boolean CP_Port_AddOnPortReceivedEvent(CP_OnPortReceivedEvent_Callback var1, Pointer var2); boolean CP_Port_AddOnPortReceivedEvent(CP_OnPortReceivedEvent_Callback var1, Pointer var2);

View File

@ -1,60 +0,0 @@
package com.dpkj.modules.autoReplyPrint.utils;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AutoReplyPrint2 {
public static AutoReplyPrint2Sdk getAutoReplyPrint2SDK() throws AutoReplyPrint2RegistrationException {
try {
return Native.load(GetLibraryPath_Helper.GetLibraryPath(), AutoReplyPrint2Sdk.class);
} catch (UnsatisfiedLinkError e) {
log.info("[AutoReplyPrint2][AutoReplyPrint2.getAutoReplyPrint2SDK] SDK注册失败 {}", e.getMessage());
throw new AutoReplyPrint2RegistrationException("Failed to load AutoReplyPrint2Sdk library: ", e);
}
}
/**
* 定义接口映射本地库中的函数
*/
public interface AutoReplyPrint2Sdk extends Library {
/**
* 获取打印机固件版本
* @return
*/
String CPPrinterGetPrinterFirmwareVersion();
}
/**
* 定义自定义异常类用于表示注册控件时发生的错误
*/
public static class AutoReplyPrint2RegistrationException extends Exception {
public AutoReplyPrint2RegistrationException(String message) {
super(message);
}
public AutoReplyPrint2RegistrationException(String message, Throwable cause) {
super(message, cause);
}
}
public static class GetLibraryPath_Helper {
public GetLibraryPath_Helper() {
}
private static String GetLibraryPath() {
if (Platform.isWindows()) {
return Platform.is64Bit() ? "/autoreplyprint/win64/autoreplyprint.dll" : "/autoreplyprint/win32/autoreplyprint.dll";
} else if (Platform.isLinux()) {
return Platform.is64Bit() ? "/autoreplyprint/linux-x64/libautoreplyprint.so" : "/autoreplyprint/linux-x86/libautoreplyprint.so";
} else {
return Platform.isMac() ? "/autoreplyprint/mac/libautoreplyprint.so" : "autoreplyprint";
}
}
}
}

View File

@ -1,11 +0,0 @@
package com.dpkj.modules.autoReplyPrint.utils;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public interface MyLibrary extends StdCallLibrary {
MyLibrary INSTANCE = (MyLibrary) Native.load("D:\\DPKJ\\yinyitong-zhongyuyuan-dll\\src\\main\\resources\\autoreplyprint\\win64\\autoreplyprint.dll", MyLibrary.class);
// 映射DLL中的函数
String CP_Printer_GetPrinterFirmwareVersion();
}

View File

@ -1,13 +0,0 @@
package com.dpkj.modules.autoReplyPrint.utils;
public class MyNativeClass {
public static native void ICC_Reader_Open(String devName);
static {
System.load("D:\\DPKJ\\yinyitong-zhongyuyuan-dll\\src\\main\\resources\\win32-x86\\UnPack.dll");
}
public static void main(String[] args) {
ICC_Reader_Open("USB1");
}
}