You've already forked FrameTour-BE
refactor(image): 重构水印处理逻辑以提高可维护性
- 移除 PhotoProcessContext 中的水印相关字段 - 新增 WatermarkConfig 类封装水印配置 - 修改 WatermarkStage 通过构造函数注入配置 - 调整 PrinterServiceImpl 中水印配置的传递方式 - 更新单元测试以适应新的配置注入方式 - 统一从配置对象读取水印参数而非上下文 - 优化日志记录与偏移量计算逻辑
This commit is contained in:
@@ -17,6 +17,7 @@ import com.ycwl.basic.image.pipeline.stages.ImageOrientationStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.PuzzleBorderStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.RestoreOrientationStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.UploadStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.WatermarkConfig;
|
||||
import com.ycwl.basic.image.pipeline.stages.WatermarkStage;
|
||||
import com.ycwl.basic.image.watermark.enums.ImageWatermarkOperatorEnum;
|
||||
import com.ycwl.basic.integration.common.manager.DeviceConfigManager;
|
||||
@@ -742,13 +743,15 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
|
||||
/**
|
||||
* 创建普通照片处理管线
|
||||
*
|
||||
* @param watermarkConfig 水印配置
|
||||
*/
|
||||
private Pipeline<PhotoProcessContext> createNormalPhotoPipeline() {
|
||||
private Pipeline<PhotoProcessContext> createNormalPhotoPipeline(WatermarkConfig watermarkConfig) {
|
||||
return new PipelineBuilder<PhotoProcessContext>("NormalPhotoPipeline")
|
||||
.addStage(new DownloadStage())
|
||||
.addStage(new ImageOrientationStage())
|
||||
.addStage(new ConditionalRotateStage())
|
||||
.addStage(new WatermarkStage())
|
||||
.addStage(new WatermarkStage(watermarkConfig))
|
||||
.addStage(new RestoreOrientationStage())
|
||||
.addStage(new UploadStage())
|
||||
.addStage(new CleanupStage())
|
||||
@@ -778,7 +781,6 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
PrinterOrderItem orderItem = PrinterOrderItem.fromMemberPrintResp(item);
|
||||
|
||||
PhotoProcessContext context = PhotoProcessContext.fromPrinterOrderItem(orderItem, scenicId);
|
||||
context.setQrcodeFile(qrCodeFile);
|
||||
|
||||
try {
|
||||
// 设置景区配置管理器到context
|
||||
@@ -800,16 +802,20 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
context.setSource(ImageSource.UNKNOWN);
|
||||
}
|
||||
|
||||
Pipeline<PhotoProcessContext> pipeline;
|
||||
if (context.getImageType() == ImageType.NORMAL_PHOTO) {
|
||||
prepareNormalPhotoContext(context);
|
||||
} else if (context.getImageType() == ImageType.PUZZLE) {
|
||||
// 准备水印配置
|
||||
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, qrCodeFile);
|
||||
// 准备存储适配器
|
||||
prepareStorageAdapter(context);
|
||||
// 创建普通照片管线
|
||||
pipeline = createNormalPhotoPipeline(watermarkConfig);
|
||||
} else {
|
||||
// 拼图
|
||||
prepareStorageAdapter(context);
|
||||
pipeline = createPuzzlePipeline();
|
||||
}
|
||||
|
||||
Pipeline<PhotoProcessContext> pipeline = context.getImageType() == ImageType.PUZZLE
|
||||
? createPuzzlePipeline()
|
||||
: createNormalPhotoPipeline();
|
||||
|
||||
boolean success = pipeline.execute(context);
|
||||
|
||||
if (success && context.getResultUrl() != null) {
|
||||
@@ -832,29 +838,35 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 准备普通照片的Context配置
|
||||
* 从context中的scenicConfigManager获取配置
|
||||
* 准备普通照片的水印配置
|
||||
* 从 scenicConfigManager 获取配置并构建 WatermarkConfig
|
||||
*
|
||||
* @param context 照片处理上下文
|
||||
* @param qrCodeFile 二维码文件
|
||||
* @return WatermarkConfig
|
||||
*/
|
||||
private void prepareNormalPhotoContext(PhotoProcessContext context) {
|
||||
private WatermarkConfig prepareWatermarkConfig(PhotoProcessContext context, File qrCodeFile) {
|
||||
ScenicConfigManager scenicConfig = context.getScenicConfigManager();
|
||||
if (scenicConfig == null) {
|
||||
log.warn("scenicConfigManager未设置,跳过配置准备");
|
||||
return;
|
||||
log.warn("scenicConfigManager未设置,返回空水印配置");
|
||||
return WatermarkConfig.builder().build();
|
||||
}
|
||||
|
||||
ImageWatermarkOperatorEnum watermarkType = null;
|
||||
String printWatermarkType = scenicConfig.getString("print_watermark_type");
|
||||
if (StringUtils.isNotBlank(printWatermarkType)) {
|
||||
ImageWatermarkOperatorEnum watermarkType = ImageWatermarkOperatorEnum.getByCode(printWatermarkType);
|
||||
context.setWatermarkType(watermarkType);
|
||||
watermarkType = ImageWatermarkOperatorEnum.getByCode(printWatermarkType);
|
||||
}
|
||||
|
||||
String scenicText = scenicConfig.getString("print_watermark_scenic_text", "");
|
||||
context.setScenicText(scenicText);
|
||||
|
||||
String dateFormat = scenicConfig.getString("print_watermark_dt_format", "yyyy.MM.dd");
|
||||
context.setDateFormat(dateFormat);
|
||||
|
||||
prepareStorageAdapter(context);
|
||||
return WatermarkConfig.builder()
|
||||
.watermarkType(watermarkType)
|
||||
.scenicText(scenicText)
|
||||
.dateFormat(dateFormat)
|
||||
.qrcodeFile(qrCodeFile)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user