diff --git a/src/main/java/com/dpkj/common/utils/ThirdServiceUtil.java b/src/main/java/com/dpkj/common/utils/ThirdServiceUtil.java index 6174303..557943f 100644 --- a/src/main/java/com/dpkj/common/utils/ThirdServiceUtil.java +++ b/src/main/java/com/dpkj/common/utils/ThirdServiceUtil.java @@ -40,7 +40,9 @@ public class ThirdServiceUtil { */ public T callDevice(LexMarkDTO lexMarkDTO, Class responseType) { try { - URL url = new URL(lexMarkServiceIp + ":" + lexMarkServicePort + "/CallDevice"); + String urlStr = lexMarkServiceIp + ":" + lexMarkServicePort + "/CallDevice"; + URL url = new URL(urlStr); + log.info("开始请求利盟服务,URL: {}, 请求体: {}", urlStr, JSON.toJSONString(lexMarkDTO)); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); @@ -52,23 +54,28 @@ public class ThirdServiceUtil { wr.write(input, 0, input.length); } int responseCode = connection.getResponseCode(); + log.info("利盟服务响应码: {}", responseCode); if (responseCode != HttpURLConnection.HTTP_OK) { throw new RRException("利盟服务请求失败,响应码:" + responseCode); } - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - String inputLine; - StringBuilder response = new StringBuilder(); - while ((inputLine = in.readLine()) != null) { - response.append(inputLine); + // 指定编码为 UTF-8 + try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { + String inputLine; + StringBuilder response = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + String responseStr = response.toString(); + log.info("利盟服务响应内容: {}", responseStr); + // 将响应 JSON 字符串转换为泛型对象 + T result = JSON.parseObject(responseStr, responseType); + if (result instanceof LexMarkResultVO && ((LexMarkResultVO) result).getResult() != 0) { + throw new RRException(result.toString()); + } + return result; } - in.close(); - // 将响应 JSON 字符串转换为泛型对象 - T result = JSON.parseObject(response.toString(), responseType); - if (result instanceof LexMarkResultVO && ((LexMarkResultVO) result).getResult() != 0) { - throw new RRException(result.toString()); - } - return result; } catch (Exception e) { + log.error("利盟服务请求发生异常", e); if (e instanceof RRException) { throw new RRException(((RRException) e).getCode(), e.getMessage()); } diff --git a/src/main/java/com/dpkj/modules/keypad/service/impl/KeypadServiceImpl.java b/src/main/java/com/dpkj/modules/keypad/service/impl/KeypadServiceImpl.java index 8776bf3..cea4ce8 100644 --- a/src/main/java/com/dpkj/modules/keypad/service/impl/KeypadServiceImpl.java +++ b/src/main/java/com/dpkj/modules/keypad/service/impl/KeypadServiceImpl.java @@ -38,7 +38,10 @@ public class KeypadServiceImpl implements KeypadService { */ @Override public Result inputData() { + log.info("开始执行密码输入流程"); + // 连接数字键盘 + log.info("准备连接数字键盘设备"); LexMarkDTO connect = new LexMarkDTO(); connect.setDevName(LexMarkConst.ENCRYPTOR); connect.setActionName(MiddlewareFunctionsConst.OPEN_CONNECTION); @@ -47,11 +50,15 @@ public class KeypadServiceImpl implements KeypadService { connectParam.put("TimeOut", 90000); connectParam.put("ServiceName", LexMarkConst.ENCRYPTOR); connect.setParam(connectParam.toJSONString()); + log.info("调用设备连接方法,参数: {}", connect); IDCardReadResultVO connectResult = thirdServiceUtil.callDevice(connect, IDCardReadResultVO.class); + log.info("设备连接结果: {}", connectResult); WebSocketClient webSocketClient = null; try { if (connectResult.getResult() == 0) { + log.info("数字键盘设备连接成功,准备进行明文输入"); + // 明文输入 LexMarkDTO plaintext = new LexMarkDTO(); plaintext.setDevName(LexMarkConst.ENCRYPTOR); @@ -70,43 +77,58 @@ public class KeypadServiceImpl implements KeypadService { plaintextParam.put("ActiveKeys", 81919); plaintextParam.put("TerminateKeys", 1024); plaintext.setParam(plaintextParam.toJSONString()); + log.info("调用明文输入方法,参数: {}", plaintext); + // 创建 WebSocket 客户端 + log.info("创建 WebSocket 客户端,连接地址: ws://127.0.0.1:12347"); webSocketClient = new WebSocketClient("ws://127.0.0.1:12347"); IDCardReadResultVO plaintextResult = thirdServiceUtil.callDevice(plaintext, IDCardReadResultVO.class); + log.info("明文输入操作结果: {}", plaintextResult); + if (plaintextResult.getResult() == 0) { + log.info("明文输入成功,开始等待确认"); try { // 适当延长等待时间 while (true) { TimeUnit.SECONDS.sleep(1); Boolean confirm = webSocketClient.getConfirm(); if (confirm) { + log.info("收到确认信息,结束等待"); break; } } } catch (InterruptedException e) { + log.error("等待确认信息时被中断", e); e.printStackTrace(); } String password = webSocketClient.getPassword(); + log.info("密码输入完成,密码为: {}", password); return Result.ok("密码输入完成!", password); } else { + log.error("密码输入异常!详情:{}", connectResult.getDesc()); return Result.error("密码输入异常!详情:" + connectResult.getDesc()); } } else { + log.error("数字键盘设备连接失败!详情:{}", connectResult.getDesc()); return Result.error("数字键盘设备连接失败!详情:" + connectResult.getDesc()); } } finally { if (webSocketClient != null) { + log.info("关闭 WebSocket 客户端"); webSocketClient.close(); } // 关闭身份证读卡设备 + log.info("准备关闭数字键盘设备"); LexMarkDTO close = new LexMarkDTO(); close.setDevName(LexMarkConst.ENCRYPTOR); close.setCallID(0); close.setActionName(MiddlewareFunctionsConst.CLOSE_CONNECTION); + log.info("调用设备关闭方法,参数: {}", close); IDCardReadResultVO closeResult = thirdServiceUtil.callDevice(close, IDCardReadResultVO.class); + log.info("设备关闭结果: {}", closeResult); if (closeResult.getResult() != 0) { - log.info("数字键盘设备关闭异常!"); + log.error("数字键盘设备关闭异常!"); } } } diff --git a/src/main/java/com/dpkj/modules/readcard/service/impl/ReadCardServiceImpl.java b/src/main/java/com/dpkj/modules/readcard/service/impl/ReadCardServiceImpl.java index 3cf05f9..fba7289 100644 --- a/src/main/java/com/dpkj/modules/readcard/service/impl/ReadCardServiceImpl.java +++ b/src/main/java/com/dpkj/modules/readcard/service/impl/ReadCardServiceImpl.java @@ -46,7 +46,9 @@ public class ReadCardServiceImpl implements ReadCardService { @Override public Result IDCardReader() { Result result = null; + log.info("开始执行身份证读取流程"); try { + log.info("准备连接非接身份证读卡模块"); // 连接非接身份证读卡模块 LexMarkDTO connect = new LexMarkDTO(); connect.setActionName(MiddlewareFunctionsConst.OPEN_CONNECTION); @@ -56,8 +58,11 @@ public class ReadCardServiceImpl implements ReadCardService { connectParam.put("TimeOut", 30000); connectParam.put("ServiceName", LexMarkConst.ID_CARD_READ); connect.setParam(connectParam.toJSONString()); + log.info("调用设备连接方法,参数: {}", connect); IDCardReadResultVO connectResult = thirdServiceUtil.callDevice(connect, IDCardReadResultVO.class); + log.info("设备连接结果: {}", connectResult); if (connectResult.getResult() == 0) { + log.info("设备连接成功,准备读取身份证"); // 身份证读取 LexMarkDTO read = new LexMarkDTO(); read.setActionName(MiddlewareFunctionsConst.ACCEPT_AND_READ_TRACKS); @@ -67,10 +72,14 @@ public class ReadCardServiceImpl implements ReadCardService { readParam.put("TimeOut", 0); readParam.put("TrackMap", 776); read.setParam(readParam.toJSONString()); + log.info("调用设备读取方法,参数: {}", read); IDCardReadResultVO readResult = thirdServiceUtil.callDevice(read, IDCardReadResultVO.class); + log.info("设备读取结果: {}", readResult); if (readResult.getResult() == 0) { + log.info("身份证读取成功,开始解析身份证信息"); IDCardReadResultVO.Param resultParam = JSON.parseObject(readResult.getParam().toString(), IDCardReadResultVO.Param.class); if (resultParam.getResult() == 0) { + log.info("身份证信息解析成功,开始封装用户信息"); UserInfoVO userInfoVO = new UserInfoVO(); // 身份证基本信息 解析 String[] array = Stream.of(resultParam.getChipdata().getDatas().split("\\|")) @@ -92,26 +101,34 @@ public class ReadCardServiceImpl implements ReadCardService { // 反面 userInfoVO.setBackimage(resultParam.getBackimage().getDatas()); result = Result.ok(userInfoVO); + log.info("用户信息封装成功,返回结果: {}", result); } else { result = Result.error("身份证读取失败!"); + log.error("身份证信息解析失败,返回结果: {}", result); } } else { result = Result.error(readResult.getDesc()); + log.error("身份证读取失败,错误信息: {}, 返回结果: {}", readResult.getDesc(), result); } } else { result = Result.error(connectResult.getDesc()); + log.error("设备连接失败,错误信息: {}, 返回结果: {}", connectResult.getDesc(), result); } } finally { + log.info("准备关闭身份证读卡设备"); // 关闭身份证读卡设备 LexMarkDTO close = new LexMarkDTO(); close.setDevName(LexMarkConst.ID_CARD_READ); close.setCallID(0); close.setActionName(MiddlewareFunctionsConst.CLOSE_CONNECTION); + log.info("调用设备关闭方法,参数: {}", close); IDCardReadResultVO closeResult = thirdServiceUtil.callDevice(close, IDCardReadResultVO.class); + log.info("设备关闭结果: {}", closeResult); if (closeResult.getResult() != 0) { - log.info("身份证读卡设备关闭异常!"); + log.error("身份证读卡设备关闭异常!"); } } + log.info("身份证读取流程结束,最终返回结果: {}", result); return result; } @@ -128,7 +145,10 @@ public class ReadCardServiceImpl implements ReadCardService { @Override public Result SocialSecurityCardReader() { + log.info("开始执行社保卡读取流程"); + // 社保卡读卡设备连接 + log.info("准备连接社保卡读卡设备"); LexMarkDTO connect = new LexMarkDTO(); connect.setActionName(MiddlewareFunctionsConst.OPEN_CONNECTION); connect.setCallID(19256); @@ -137,9 +157,14 @@ public class ReadCardServiceImpl implements ReadCardService { connectParam.put("TimeOut", 30000); connectParam.put("ServiceName", LexMarkConst.CARD_READER); connect.setParam(connectParam.toJSONString()); + log.info("调用设备连接方法,参数: {}", connect); IDCardReadResultVO connectResult = thirdServiceUtil.callDevice(connect, IDCardReadResultVO.class); + log.info("设备连接结果: {}", connectResult); if (connectResult.getResult() == 0) { + log.info("社保卡读卡设备连接成功,准备进卡"); + // 进卡 + log.info("准备执行进卡操作"); LexMarkDTO enterTheCard = new LexMarkDTO(); enterTheCard.setActionName(MiddlewareFunctionsConst.ACCEPT_AND_READ_TRACKS); enterTheCard.setCallID(19256); @@ -149,9 +174,14 @@ public class ReadCardServiceImpl implements ReadCardService { enterTheCardParam.put("TrackMap", 11); enterTheCardParam.put("TimeOut", 0); enterTheCard.setParam(enterTheCardParam.toJSONString()); + log.info("调用进卡方法,参数: {}", enterTheCard); IDCardReadResultVO enterTheCardResult = thirdServiceUtil.callDevice(enterTheCard, IDCardReadResultVO.class); + log.info("进卡操作结果: {}", enterTheCardResult); if (enterTheCardResult.getResult() == 0) { + log.info("进卡操作成功,准备上电"); + // 上电 + log.info("准备执行上电操作"); LexMarkDTO powerOn = new LexMarkDTO(); powerOn.setActionName(MiddlewareFunctionsConst.CHIPPOWER); powerOn.setCallID(19256); @@ -160,9 +190,14 @@ public class ReadCardServiceImpl implements ReadCardService { powerOnParam.put("PsamNo", 1); powerOnParam.put("ChipAction", 2); powerOn.setParam(powerOnParam.toJSONString()); + log.info("调用上电方法,参数: {}", powerOn); IDCardReadResultVO powerOnResult = thirdServiceUtil.callDevice(powerOn, IDCardReadResultVO.class); + log.info("上电操作结果: {}", powerOnResult); if (powerOnResult.getResult() == 0) { + log.info("上电操作成功,准备读取社保卡信息"); + // 社保卡信息读取 + log.info("准备读取社保卡信息"); LexMarkDTO socialSecurityCardReader = new LexMarkDTO(); socialSecurityCardReader.setActionName(MiddlewareFunctionsConst.I_READ_CARD_BAS); socialSecurityCardReader.setCallID(19256); @@ -170,8 +205,12 @@ public class ReadCardServiceImpl implements ReadCardService { JSONObject socialSecurityCardReaderParam = new JSONObject(); socialSecurityCardReaderParam.put("iType", 3); socialSecurityCardReader.setParam(socialSecurityCardReaderParam.toJSONString()); + log.info("调用读取社保卡信息方法,参数: {}", socialSecurityCardReader); IDCardReadResultVO socialSecurityCardReaderResult = thirdServiceUtil.callDevice(socialSecurityCardReader, IDCardReadResultVO.class); + log.info("读取社保卡信息结果: {}", socialSecurityCardReaderResult); if (socialSecurityCardReaderResult.getResult() == 0) { + log.info("社保卡信息读取成功,开始解析信息"); + // 社保信息 IDCardReadResultVO.SocialSecurityCard resultParam = JSON.parseObject(socialSecurityCardReaderResult.getParam().toString(), IDCardReadResultVO.SocialSecurityCard.class); String[] split = resultParam.getRerurnData().split("\\|"); @@ -188,17 +227,22 @@ public class ReadCardServiceImpl implements ReadCardService { socialSecurityCardInfoVO.setExpireDate(split[8]); socialSecurityCardInfoVO.setTerminalNumber(split[9]); socialSecurityCardInfoVO.setTerminalDeviceNumber(split[10]); + log.info("社保卡信息解析完成,返回成功结果"); return Result.ok(socialSecurityCardInfoVO); } else { + log.error("社保卡信息读取失败,详情:{}", socialSecurityCardReaderResult.getDesc()); return Result.error("社保卡信息读取失败!详情:" + socialSecurityCardReaderResult.getDesc()); } } else { + log.error("社保卡读取设备上电失败,详情:{}", powerOnResult.getDesc()); return Result.error("社保卡读取设备上电失败!详情:" + powerOnResult.getDesc()); } } else { + log.error("社保卡读取设备进卡失败,详情:{}", enterTheCardResult.getDesc()); return Result.error("社保卡读取设备进卡失败!详情:" + enterTheCardResult.getDesc()); } } else { + log.error("社保卡读取设备连接失败,详情:{}", connectResult.getDesc()); return Result.error("社保卡读取设备连接失败!详情:" + connectResult.getDesc()); } } @@ -210,7 +254,10 @@ public class ReadCardServiceImpl implements ReadCardService { */ @Override public Result cardRefund() { + log.info("开始执行社保卡退卡流程"); + // 社保卡退卡 + log.info("准备发起社保卡退卡请求"); LexMarkDTO cardRefund = new LexMarkDTO(); cardRefund.setDevName(LexMarkConst.CARD_READER); cardRefund.setCallID(19256); @@ -219,21 +266,30 @@ public class ReadCardServiceImpl implements ReadCardService { cardRefundParam.put("position", 1); cardRefundParam.put("ejectpos", 1); cardRefund.setParam(cardRefundParam.toJSONString()); + log.info("调用设备退卡方法,参数: {}", cardRefund); IDCardReadResultVO cardRefundResult = thirdServiceUtil.callDevice(cardRefund, IDCardReadResultVO.class); + log.info("设备退卡操作结果: {}", cardRefundResult); + if (cardRefundResult.getResult() == 0) { + log.info("社保卡退卡成功,准备关闭社保卡读卡设备"); + // 退卡成功再关闭社保卡读卡设备 LexMarkDTO close = new LexMarkDTO(); close.setDevName(LexMarkConst.CARD_READER); close.setCallID(0); close.setActionName(MiddlewareFunctionsConst.CLOSE_CONNECTION); + log.info("调用设备关闭方法,参数: {}", close); IDCardReadResultVO closeResult = thirdServiceUtil.callDevice(close, IDCardReadResultVO.class); + log.info("设备关闭操作结果: {}", closeResult); + if (closeResult.getResult() != 0) { - log.info("社保卡读卡设备关闭异常!"); + log.error("社保卡读卡设备关闭异常!"); } + log.info("社保卡退卡流程完成,退卡成功"); return Result.ok("退卡成功!"); } else { + log.error("退卡失败!请联系工作人员!"); return Result.error("退卡失败!请联系工作人员!"); } - } }