From 02129e4db638e7e9e4bf846328e097ed457fab18 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, 15 Jan 2025 16:05:06 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E7=BB=9F=E4=B8=80=E9=87=87?= =?UTF-8?q?=E7=94=A8AutoReplyPrint=E6=8E=A5=E5=8F=A3=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=9C=AC=E5=9C=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AutoReplyPrintServiceImpl.java | 14 +- .../autoReplyPrint/utils/AutoReplyPrint.java | 275 ++++++++++++++++-- .../autoReplyPrint/utils/AutoReplyPrint2.java | 60 ---- .../autoReplyPrint/utils/MyLibrary.java | 11 - .../autoReplyPrint/utils/MyNativeClass.java | 13 - 5 files changed, 256 insertions(+), 117 deletions(-) delete mode 100644 src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint2.java delete mode 100644 src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyLibrary.java delete mode 100644 src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyNativeClass.java diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/AutoReplyPrintServiceImpl.java b/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/AutoReplyPrintServiceImpl.java index 07692c3..ac45afc 100644 --- a/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/AutoReplyPrintServiceImpl.java +++ b/src/main/java/com/dpkj/modules/autoReplyPrint/service/impl/AutoReplyPrintServiceImpl.java @@ -3,8 +3,7 @@ package com.dpkj.modules.autoReplyPrint.service.impl; import com.dpkj.common.vo.Result; import com.dpkj.modules.autoReplyPrint.service.AutoReplyPrintService; import com.dpkj.modules.autoReplyPrint.utils.AutoReplyPrint; -import com.dpkj.modules.autoReplyPrint.utils.AutoReplyPrint2; -import com.dpkj.modules.autoReplyPrint.utils.MyLibrary; +import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -13,17 +12,14 @@ import org.springframework.stereotype.Service; @Service public class AutoReplyPrintServiceImpl implements AutoReplyPrintService { - private AutoReplyPrint2.AutoReplyPrint2Sdk autoReplyPrint2Sdk = AutoReplyPrint2.getAutoReplyPrint2SDK(); - - public AutoReplyPrintServiceImpl() throws AutoReplyPrint2.AutoReplyPrint2RegistrationException { - } @Override 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(); - log.info("壁挂机打印机版本信息{}", s); - return Result.ok(s); +// log.info("壁挂机打印机版本信息{}", s); + return Result.ok(""); } } diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint.java b/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint.java index f332764..8cdac63 100644 --- a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint.java +++ b/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint.java @@ -180,55 +180,282 @@ public interface AutoReplyPrint extends Library { int CP_Label_Color_White = 0; int CP_Label_Color_Black = 1; + /** + * 获取开发包版本字符串 + * + * @return 返回开发包版本 + */ 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 端口名称,例如:COM1,COM2,COM3,...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 返回打开的端口句柄。非零表示打开成功,零表示打开失败。 + * + * 备注:仅适用于 Android、iOS、macOS + */ + 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); diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint2.java b/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint2.java deleted file mode 100644 index c7f72cb..0000000 --- a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/AutoReplyPrint2.java +++ /dev/null @@ -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"; - } - } - } -} diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyLibrary.java b/src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyLibrary.java deleted file mode 100644 index 64fbe3d..0000000 --- a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyLibrary.java +++ /dev/null @@ -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(); -} diff --git a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyNativeClass.java b/src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyNativeClass.java deleted file mode 100644 index 5bfed8d..0000000 --- a/src/main/java/com/dpkj/modules/autoReplyPrint/utils/MyNativeClass.java +++ /dev/null @@ -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"); - } -}