打包运行出错、调整加载动态库方式

This commit is contained in:
王志成 2025-03-19 11:48:39 +08:00
parent ca37066696
commit 9d3d5b2645
3 changed files with 19 additions and 51 deletions

27
pom.xml
View File

@ -26,6 +26,12 @@
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@ -128,6 +134,7 @@
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 只保留一个 spring-boot-maven-plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
@ -142,6 +149,7 @@
</configuration>
</plugin>
<!-- 拷贝依赖到 lib 目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
@ -153,7 +161,6 @@
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 拷贝项目依赖包到lib/目录下 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
@ -162,28 +169,16 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<!-- Javadoc 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
<!--打包时将resource下的文件一起打包-->
<!-- 打包时将 resource 下的文件一起打包 -->
<resources>
<resource>
<directory>src/main/resources</directory>

View File

@ -3,7 +3,6 @@ package com.dpkj.modules.cardReader.service.impl;
import com.dpkj.common.vo.Result;
import com.dpkj.modules.cardReader.service.CardReaderService;
import com.dpkj.modules.cardReader.utils.CardReaderSdk;
import com.dpkj.modules.cardReader.utils.CardReaderUtil;
import com.dpkj.modules.cardReader.utils.SocialSecurityCardInfoVO;
import com.dpkj.modules.cardReader.utils.UserInfoVO;
import lombok.extern.slf4j.Slf4j;
@ -17,7 +16,6 @@ import java.util.concurrent.locks.ReentrantLock;
@Service
public class CardReaderServiceImpl implements CardReaderService {
private CardReaderSdk cardReaderSdk = CardReaderUtil.getCardReaderSDK();
@Value("${IDCardReader.waitingTime}")
private Long waitingTime;
private final Object cardReaderLock = new Object();
@ -32,7 +30,7 @@ public class CardReaderServiceImpl implements CardReaderService {
try {
log.info("[CardReaderServiceImpl][IDCardReader][33]: 开始连接指定设备与电脑端口,即打开端口");
// 连接指定设备与电脑端口即打开端口
handle = cardReaderSdk.ICC_Reader_Open("USB1");
handle = CardReaderSdk.INSTANCE.ICC_Reader_Open("USB1");
log.info("[CardReaderServiceImpl][IDCardReader][36]: 连接指定设备与电脑端口,即打开端口,返回句柄: {}", handle);
if (handle == null) {
log.error("[CardReaderServiceImpl][IDCardReader][38]: 打开端口失败");
@ -44,7 +42,7 @@ public class CardReaderServiceImpl implements CardReaderService {
byte[] bytes = new byte[1024];
log.info("[CardReaderServiceImpl][IDCardReader][45]: 尝试读取 ID 卡");
while (true) {
int idCard = cardReaderSdk.PICC_Reader_ReadIDCard(handle, bytes);
int idCard = CardReaderSdk.INSTANCE.PICC_Reader_ReadIDCard(handle, bytes);
log.info("[CardReaderServiceImpl][IDCardReader][48]: PICC_Reader_ReadIDCard读取 ID 卡,返回值: {}", idCard);
long elapsedTime = System.currentTimeMillis() - startTime;
@ -54,7 +52,7 @@ public class CardReaderServiceImpl implements CardReaderService {
}
if (idCard == 0) {
try {
userInfo = new UserInfoVO(cardReaderSdk);
userInfo = new UserInfoVO(CardReaderSdk.INSTANCE);
if (userInfo.getName() != null && !userInfo.getName().isEmpty()) {
log.info("[CardReaderServiceImpl][IDCardReader][59]: 成功读取到用户信息,返回结果");
return Result.ok(userInfo);
@ -71,7 +69,7 @@ public class CardReaderServiceImpl implements CardReaderService {
if (handle != null) {
log.info("[CardReaderServiceImpl][IDCardReader][72]: 开始关闭端口,句柄: {}", handle);
// 不管什么情况最终都要关闭端口
cardReaderSdk.ICC_Reader_Close(handle);
CardReaderSdk.INSTANCE.ICC_Reader_Close(handle);
log.info("[CardReaderServiceImpl][IDCardReader][75]: 端口关闭成功");
}
}
@ -87,7 +85,7 @@ public class CardReaderServiceImpl implements CardReaderService {
Long handle = null;
try {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][89]: 开始连接指定设备与电脑端口,即打开端口");
handle = cardReaderSdk.ICC_Reader_Open("USB1");
handle = CardReaderSdk.INSTANCE.ICC_Reader_Open("USB1");
if (handle == null) {
log.error("[CardReaderServiceImpl][SocialSecurityCardReader][92]: 打开端口失败");
return Result.error("打开端口失败,请检查设备连接");
@ -105,12 +103,12 @@ public class CardReaderServiceImpl implements CardReaderService {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][105]: 读取社保卡信息超时,等待了 {} 毫秒。", waitingTime);
return Result.error("读取社保卡信息超时,请重试。", -18);
}
int l = cardReaderSdk.ICC_Reader_GetStatus(handle, 0x01);
int l = CardReaderSdk.INSTANCE.ICC_Reader_GetStatus(handle, 0x01);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][109]: 获取社保卡读取设备状态:结果{}", l);
if (l == 0) {
byte[] data = new byte[4096];
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][112]: 尝试读取社保卡基本信息");
int i = cardReaderSdk.iReadCardBas(3, data);
int i = CardReaderSdk.INSTANCE.iReadCardBas(3, data);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][114]: 读取社保卡基本信息,返回值: {}", i);
if (i == 0) {
java.lang.String bas = new java.lang.String(data, "GBK");
@ -165,7 +163,7 @@ public class CardReaderServiceImpl implements CardReaderService {
if (handle != null) {
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][166]: 开始关闭端口,句柄: {}", handle);
// 关闭端口
cardReaderSdk.ICC_Reader_Close(handle);
CardReaderSdk.INSTANCE.ICC_Reader_Close(handle);
log.info("[CardReaderServiceImpl][SocialSecurityCardReader][169]: 端口关闭成功");
}
}

View File

@ -1,25 +0,0 @@
package com.dpkj.modules.cardReader.utils;
import com.dpkj.common.exception.RRException;
import com.sun.jna.Native;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CardReaderUtil {
/**
* 获取 多合一读卡器 实例同时注册 CardReaderSdk 控件
*
* @return CardReaderSdk 实例
* @throws RRException 如果注册控件失败抛出此异常
*/
public static CardReaderSdk getCardReaderSDK() throws RRException {
try {
return Native.loadLibrary("SSSE32", CardReaderSdk.class);
} catch (UnsatisfiedLinkError e) {
log.info("[CardReader][AutoReplyPrint2.getCardReaderSDK] SDK注册失败 {}", e.getMessage());
throw new RRException("Failed to load CardReaderSdk library: ", e);
}
}
}