You've already forked FrameTour-BE
feat(printer): 引入唯一处理标识符避免文件冲突
- 添加 UUID 依赖以生成唯一标识符 -为打印任务生成唯一处理 ID,防止多线程文件名冲突 - 更新原图、水印图及旋转图片的文件命名逻辑 - 确保每个打印任务使用独立的临时文件名
This commit is contained in:
@@ -67,6 +67,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -464,9 +465,11 @@ public class PrinterServiceImpl implements PrinterService {
|
|||||||
// 准备水印处理器
|
// 准备水印处理器
|
||||||
IOperator operator = ImageWatermarkFactory.get(watermarkType);
|
IOperator operator = ImageWatermarkFactory.get(watermarkType);
|
||||||
|
|
||||||
|
// 生成唯一的处理标识符,避免多线程环境下的文件冲突
|
||||||
|
String processId = item.getId() + "_" + UUID.randomUUID().toString();
|
||||||
// 下载原图
|
// 下载原图
|
||||||
File originalFile = new File("print_" + item.getId() + ".jpg");
|
File originalFile = new File("print_" + processId + ".jpg");
|
||||||
File watermarkedFile = new File("print_" + item.getId() + "_" + watermarkType.getType() + "." + watermarkType.getPreferFileType());
|
File watermarkedFile = new File("print_" + processId + "_" + watermarkType.getType() + "." + watermarkType.getPreferFileType());
|
||||||
File rotatedOriginalFile = null;
|
File rotatedOriginalFile = null;
|
||||||
File rotatedWatermarkedFile = null;
|
File rotatedWatermarkedFile = null;
|
||||||
boolean needRotation = false;
|
boolean needRotation = false;
|
||||||
@@ -481,7 +484,7 @@ public class PrinterServiceImpl implements PrinterService {
|
|||||||
if (!isLandscape) {
|
if (!isLandscape) {
|
||||||
// 竖图需要旋转为横图
|
// 竖图需要旋转为横图
|
||||||
needRotation = true;
|
needRotation = true;
|
||||||
rotatedOriginalFile = new File("print_" + item.getId() + "_rotated.jpg");
|
rotatedOriginalFile = new File("print_" + processId + "_rotated.jpg");
|
||||||
ImageUtils.rotateImage90(originalFile, rotatedOriginalFile);
|
ImageUtils.rotateImage90(originalFile, rotatedOriginalFile);
|
||||||
log.info("竖图已旋转为横图,照片ID: {}", item.getId());
|
log.info("竖图已旋转为横图,照片ID: {}", item.getId());
|
||||||
}
|
}
|
||||||
@@ -495,7 +498,7 @@ public class PrinterServiceImpl implements PrinterService {
|
|||||||
|
|
||||||
// 如果之前旋转了,需要将水印图片旋转回去
|
// 如果之前旋转了,需要将水印图片旋转回去
|
||||||
if (needRotation) {
|
if (needRotation) {
|
||||||
rotatedWatermarkedFile = new File("print_" + item.getId() + "_final_" + watermarkType.getType() + "." + watermarkType.getPreferFileType());
|
rotatedWatermarkedFile = new File("print_" + processId + "_final_" + watermarkType.getType() + "." + watermarkType.getPreferFileType());
|
||||||
ImageUtils.rotateImage270(watermarkedFile, rotatedWatermarkedFile);
|
ImageUtils.rotateImage270(watermarkedFile, rotatedWatermarkedFile);
|
||||||
log.info("水印图片已旋转回竖图,照片ID: {}", item.getId());
|
log.info("水印图片已旋转回竖图,照片ID: {}", item.getId());
|
||||||
// 删除中间的横图水印文件
|
// 删除中间的横图水印文件
|
||||||
|
|||||||
Reference in New Issue
Block a user