diff --git a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java index 09d30386..4f4a0fc2 100644 --- a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java @@ -618,17 +618,8 @@ public class PqReportServiceImpl extends ServiceImpl i } out.close(); this.updateDevAndPlanState(devReportParam.getDevId(), devReportParam.getPlanId()); - sendReportToCloud(pqDevVO.getIp(), reportFullPath, pqDevVO.getCreateId() + ".docx"); -// // 检测报告上云 -// Future future = executor.submit(() -> { -// sendReportToCloud(pqDevVO.getIp(), reportFullPath, pqDevVO.getCreateId() + ".docx"); -// }); -// try { -// future.get(); -// } catch (Exception e) { -// log.error("检测报告上云异常,异常为:"+e.getMessage()); -// } - +// sendReportToCloud(pqDevVO.getIp(), reportFullPath, pqDevVO.getCreateId() + ".docx"); + sendQrToDevice(pqDevVO.getIp(), pqDevVO.getCreateId() + ".docx"); } catch (IOException e) { log.error(ReportResponseEnum.GENERATE_REPORT_ERROR.getMessage(), e); throw new BusinessException(ReportResponseEnum.GENERATE_REPORT_ERROR); @@ -636,6 +627,90 @@ public class PqReportServiceImpl extends ServiceImpl i }); } + + private void sendQrToDevice(String devIp, String reportName) { + try { + // 上传没问题后,拼接url生成二维码,并将二维码转为bin格式文件传递给设备通讯模块 + String qrUrl = cloudUrl + "/download/" + reportName; + BufferedImage bufferedImage = QrCodeUtil.generate(qrUrl, 148, 148); + // 将 BufferedImage 转换为单色图像 + BufferedImage monoImage = new BufferedImage(148, 148, BufferedImage.TYPE_BYTE_BINARY); + Graphics2D g2d = monoImage.createGraphics(); + g2d.drawImage(bufferedImage, 0, 0, null); + g2d.dispose(); + // 3. 【关键修正】创建一个新的1-bit单色图像,并将原始图像绘制上去,以强制转换为单色位图 + BufferedImage monochromeImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY); + monochromeImage.getGraphics().drawImage(bufferedImage, 0, 0, null); + // 4. 将单色图像在内存中编码为完整的BMP文件流 + byte[] finalBinData = ImageConverter.convertToBinFormat(bufferedImage); + String base64String = Base64.getEncoder().encodeToString(finalBinData); + + // 测试ftp是否连接成功 + + + // 组装设备通讯模块的参数 + SocketMsg sendFileMsg = new SocketMsg<>(); + sendFileMsg.setOperateCode(SourceOperateCodeEnum.FTP_SEND_01.getValue()); + sendFileMsg.setRequestId(SourceOperateCodeEnum.FTP_SEND_01.getValue()); + + // 组装业务数据 + JSONObject data = new JSONObject(); + if (testFTPConnection(cloudUrl, devPort, devName, devPsd)) { + data.set("name", devName); + data.set("password", devPsd); + data.set("port", devPort); + data.set("path", "ftp://" + devIp + devPath); + } else if (testFTPConnection(cloudUrl, gcDevPort, gcDevName, gcDevPsd)) { + data.set("name", gcDevName); + data.set("password", gcDevPsd); + data.set("port", gcDevPort); + data.set("path", "ftp://" + devIp + gcDevPath); + } else { + throw new BusinessException(ReportResponseEnum.FTP_CONNECTION_FAILED); + } + data.set("file", base64String); + sendFileMsg.setData(data.toString()); + String msg = JSON.toJSONString(sendFileMsg); + Channel channel = SocketManager.getChannelByUserId("cdf" + DetectionCommunicateConstant.DEV); + if (Objects.isNull(channel) || !channel.isActive()) { + // 进行源通信连接 + PreDetectionParam preDetectionParam = new PreDetectionParam(); + preDetectionParam.setUserPageId("cdf"); + preDetectionParam.setSendWebMsg(false); + + NettyClient.socketClient(ip, port, preDetectionParam, msg, new NettyDevClientHandler(preDetectionParam, socketDevResponseService)); + } else { + channel.writeAndFlush(msg + "\n"); + } + } catch (Exception e) { + // 进行日志记录入口 + System.out.println("异常为:" + e.getMessage()); + } + } + + + /** + * 处理检测报告上传云服务器并生成二维码下装到装置 + * 做成异步执行 + * + * @param devIp 设备IP + * @param reportFullPath 检测报告本地全路径 + * @param reportName 检测报告名称 + */ + public void sendReportToCloud(String devIp, String reportFullPath, String reportName) { + // 将文件上传至目标服务器 + File file = new File(reportFullPath); + try { + ResponseEntity responseEntity = restTemplateUtil.uploadFile(cloudUrl + "/upload", file); + } catch (Exception e) { + // 进行日志记录入口 + System.out.println("异常为:" + e.getMessage()); + } + + + } + + /** * 测试FTP连接 * @@ -685,83 +760,6 @@ public class PqReportServiceImpl extends ServiceImpl i } - /** - * 处理检测报告上传云服务器并生成二维码下装到装置 - * 做成异步执行 - * - * @param devIp 设备IP - * @param reportFullPath 检测报告本地全路径 - * @param reportName 检测报告名称 - */ - public void sendReportToCloud(String devIp, String reportFullPath, String reportName) { - // 将文件上传至目标服务器 - File file = new File(reportFullPath); - try { - ResponseEntity responseEntity = restTemplateUtil.uploadFile(cloudUrl + "/upload", file); - if (responseEntity.getStatusCode().is2xxSuccessful()) { - // 上传没问题后,拼接url生成二维码,并将二维码转为bin格式文件传递给设备通讯模块 - String qrUrl = cloudUrl + "/download/" + reportName; - BufferedImage bufferedImage = QrCodeUtil.generate(qrUrl, 148, 148); - // 将 BufferedImage 转换为单色图像 - BufferedImage monoImage = new BufferedImage(148, 148, BufferedImage.TYPE_BYTE_BINARY); - Graphics2D g2d = monoImage.createGraphics(); - g2d.drawImage(bufferedImage, 0, 0, null); - g2d.dispose(); - // 3. 【关键修正】创建一个新的1-bit单色图像,并将原始图像绘制上去,以强制转换为单色位图 - BufferedImage monochromeImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY); - monochromeImage.getGraphics().drawImage(bufferedImage, 0, 0, null); - // 4. 将单色图像在内存中编码为完整的BMP文件流 - byte[] finalBinData = ImageConverter.convertToBinFormat(bufferedImage); - String base64String = Base64.getEncoder().encodeToString(finalBinData); - - // 测试ftp是否连接成功 - - - // 组装设备通讯模块的参数 - SocketMsg sendFileMsg = new SocketMsg<>(); - sendFileMsg.setOperateCode(SourceOperateCodeEnum.FTP_SEND_01.getValue()); - sendFileMsg.setRequestId(SourceOperateCodeEnum.FTP_SEND_01.getValue()); - - // 组装业务数据 - JSONObject data = new JSONObject(); - if (testFTPConnection(cloudUrl, devPort, devName, devPsd)) { - data.set("name", devName); - data.set("password", devPsd); - data.set("port", devPort); - data.set("path", "ftp://" + devIp + devPath); - } else if (testFTPConnection(cloudUrl, gcDevPort, gcDevName, gcDevPsd)) { - data.set("name", gcDevName); - data.set("password", gcDevPsd); - data.set("port", gcDevPort); - data.set("path", "ftp://" + devIp + gcDevPath); - } else { - throw new BusinessException(ReportResponseEnum.FTP_CONNECTION_FAILED); - } - data.set("file", base64String); - sendFileMsg.setData(data.toString()); - String msg = JSON.toJSONString(sendFileMsg); - Channel channel = SocketManager.getChannelByUserId("cdf" + DetectionCommunicateConstant.DEV); - if (Objects.isNull(channel) || !channel.isActive()) { - // 进行源通信连接 - PreDetectionParam preDetectionParam = new PreDetectionParam(); - preDetectionParam.setUserPageId("cdf"); - preDetectionParam.setSendWebMsg(false); - - NettyClient.socketClient(ip, port, preDetectionParam, msg, new NettyDevClientHandler(preDetectionParam, socketDevResponseService)); - } else { - channel.writeAndFlush(msg + "\n"); - } - - } - } catch (Exception e) { - // 进行日志记录入口 - System.out.println("异常为:" + e.getMessage()); - } - - - } - - /** * 根据计划绑定的报告模板生成报告 * 注:该方法目前属于同用信息占位符替换,数据页为面向对象动态填充拼凑方式