二维码下装独立抽取
This commit is contained in:
@@ -615,17 +615,8 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> 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);
|
||||
@@ -633,6 +624,90 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> 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<String> 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<String> responseEntity = restTemplateUtil.uploadFile(cloudUrl + "/upload", file);
|
||||
} catch (Exception e) {
|
||||
// 进行日志记录入口
|
||||
System.out.println("异常为:" + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 测试FTP连接
|
||||
*
|
||||
@@ -682,83 +757,6 @@ public class PqReportServiceImpl extends ServiceImpl<PqReportMapper, PqReport> i
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 处理检测报告上传云服务器并生成二维码下装到装置
|
||||
* 做成异步执行
|
||||
*
|
||||
* @param devIp 设备IP
|
||||
* @param reportFullPath 检测报告本地全路径
|
||||
* @param reportName 检测报告名称
|
||||
*/
|
||||
public void sendReportToCloud(String devIp, String reportFullPath, String reportName) {
|
||||
// 将文件上传至目标服务器
|
||||
File file = new File(reportFullPath);
|
||||
try {
|
||||
ResponseEntity<String> 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<String> 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());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据计划绑定的报告模板生成报告
|
||||
* 注:该方法目前属于同用信息占位符替换,数据页为面向对象动态填充拼凑方式
|
||||
|
||||
Reference in New Issue
Block a user