feat(image): 增强图片处理流程并优化水印逻辑

- 在PhotoProcessContext中新增Stage管理相关方法,支持启用、禁用及批量设置Stage状态
- 新增ImageEnhanceStage并整合到图片处理流水线中
- 重构重打印流程,复用普通照片处理流水线
- 生成订单二维码并用于水印配置
- 移除冗余的水印配置和增强配置代码
- 优化Stage控制逻辑,支持动态启用或禁用特定处理阶段
This commit is contained in:
2025-11-27 18:17:19 +08:00
parent d483c222d0
commit d60d7d9ad8
2 changed files with 86 additions and 19 deletions

View File

@@ -751,10 +751,17 @@ public class PrinterServiceImpl implements PrinterService {
* @param watermarkConfig 水印配置
*/
private Pipeline<PhotoProcessContext> createNormalPhotoPipeline(WatermarkConfig watermarkConfig) {
BceEnhancerConfig config = new BceEnhancerConfig();
config.setQps(1);
config.setAppId("119554288");
config.setApiKey("OX6QoijgKio3eVtA0PiUVf7f");
config.setSecretKey("dYatXReVriPeiktTjUblhfubpcmYfuMk");
return new PipelineBuilder<PhotoProcessContext>("NormalPhotoPipeline")
.addStage(new DownloadStage())
.addStage(new ImageOrientationStage())
.addStage(new ConditionalRotateStage())
.addStage(new ImageEnhanceStage(config)) // 通过setStageState方法设置是否启用
.addStage(new WatermarkStage(watermarkConfig))
.addStage(new RestoreOrientationStage())
.addStage(new UploadStage())
@@ -1352,6 +1359,14 @@ public class PrinterServiceImpl implements PrinterService {
MemberPrintResp memberPrint = memberPrints.get(0);
File qrCodeFile = new File("qrCodeFile" + memberPrint.getOrderId() + ".png");
MpConfigEntity scenicMpConfig = scenicRepository.getScenicMpConfig(memberPrint.getScenicId());
try {
WxMpUtil.generateWXAQRCode(scenicMpConfig.getAppId(), scenicMpConfig.getAppSecret(), scenicMpConfig.getState(), "pages/my/orderDetailNew?force=1&id="+memberPrint.getOrderId(), qrCodeFile.getAbsolutePath());
} catch (Exception e) {
throw new RuntimeException(e);
}
// 3. 重新处理照片(带增强选项)
Boolean needEnhance = request.getNeedEnhance();
if (needEnhance == null) {
@@ -1361,6 +1376,7 @@ public class PrinterServiceImpl implements PrinterService {
// 3.1 创建图片处理上下文
PrinterOrderItem orderItem = PrinterOrderItem.fromMemberPrintResp(memberPrint);
PhotoProcessContext context = PhotoProcessContext.fromPrinterOrderItem(orderItem, memberPrint.getScenicId());
context.setStageState("image_enhance", needEnhance); // 通过setStageState方法设置是否启用
// 3.2 设置景区配置和场景
ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(memberPrint.getScenicId());
@@ -1382,26 +1398,12 @@ public class PrinterServiceImpl implements PrinterService {
try {
if (context.getImageType() == ImageType.NORMAL_PHOTO) {
// 准备水印配置(重打印需要二维码,传 null
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, null);
// 准备水印配置(重打印需要二维码)
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, qrCodeFile);
prepareStorageAdapter(context);
BceEnhancerConfig config = new BceEnhancerConfig();
config.setQps(1);
config.setAppId("119554288");
config.setApiKey("OX6QoijgKio3eVtA0PiUVf7f");
config.setSecretKey("dYatXReVriPeiktTjUblhfubpcmYfuMk");
// 创建管线,条件性添加增强 Stage
pipeline = new PipelineBuilder<PhotoProcessContext>("ReprintPipeline")
.addStage(new DownloadStage())
.addStage(new ImageOrientationStage())
.addStage(new ConditionalRotateStage())
.addStageIf(needEnhance, new ImageEnhanceStage(config))
.addStage(new WatermarkStage(watermarkConfig))
.addStage(new RestoreOrientationStage())
.addStage(new UploadStage())
.addStage(new CleanupStage())
.build();
pipeline = createNormalPhotoPipeline(watermarkConfig);
} else {
// 拼图
prepareStorageAdapter(context);