From d60d7d9ad8eb4f4241b8df05f4df68976d382abc Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 27 Nov 2025 18:17:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(image):=20=E5=A2=9E=E5=BC=BA=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E5=A4=84=E7=90=86=E6=B5=81=E7=A8=8B=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=B0=B4=E5=8D=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在PhotoProcessContext中新增Stage管理相关方法,支持启用、禁用及批量设置Stage状态 - 新增ImageEnhanceStage并整合到图片处理流水线中 - 重构重打印流程,复用普通照片处理流水线 - 生成订单二维码并用于水印配置 - 移除冗余的水印配置和增强配置代码 - 优化Stage控制逻辑,支持动态启用或禁用特定处理阶段 --- .../pipeline/core/PhotoProcessContext.java | 69 ++++++++++++++++++- .../printer/impl/PrinterServiceImpl.java | 36 +++++----- 2 files changed, 86 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/ycwl/basic/image/pipeline/core/PhotoProcessContext.java b/src/main/java/com/ycwl/basic/image/pipeline/core/PhotoProcessContext.java index 7de6ba47..a04a57d7 100644 --- a/src/main/java/com/ycwl/basic/image/pipeline/core/PhotoProcessContext.java +++ b/src/main/java/com/ycwl/basic/image/pipeline/core/PhotoProcessContext.java @@ -1,7 +1,5 @@ package com.ycwl.basic.image.pipeline.core; -import com.ycwl.basic.image.watermark.entity.WatermarkInfo; -import com.ycwl.basic.image.watermark.enums.ImageWatermarkOperatorEnum; import com.ycwl.basic.image.pipeline.enums.ImageSource; import com.ycwl.basic.image.pipeline.enums.ImageType; import com.ycwl.basic.image.pipeline.enums.PipelineScene; @@ -198,6 +196,73 @@ public class PhotoProcessContext { return stageEnabledMap.getOrDefault(stageId, defaultEnabled); } + /** + * 判断指定Stage是否启用(默认为false) + * + * @param stageId Stage唯一标识 + * @return true-启用, false-禁用 + */ + public boolean isStageEnabled(String stageId) { + return stageEnabledMap.getOrDefault(stageId, false); + } + + /** + * 设置指定Stage的启用状态 + * + * @param stageId Stage唯一标识 + * @param enabled 是否启用 + * @return this(支持链式调用) + */ + public PhotoProcessContext setStageState(String stageId, boolean enabled) { + stageEnabledMap.put(stageId, enabled); + return this; + } + + /** + * 启用指定Stage + * + * @param stageId Stage唯一标识 + * @return this(支持链式调用) + */ + public PhotoProcessContext enableStage(String stageId) { + stageEnabledMap.put(stageId, true); + return this; + } + + /** + * 禁用指定Stage + * + * @param stageId Stage唯一标识 + * @return this(支持链式调用) + */ + public PhotoProcessContext disableStage(String stageId) { + stageEnabledMap.put(stageId, false); + return this; + } + + /** + * 批量设置Stage启用状态 + * + * @param stages Stage配置Map(stageId -> enabled) + * @return this(支持链式调用) + */ + public PhotoProcessContext setStages(Map stages) { + if (stages != null) { + stageEnabledMap.putAll(stages); + } + return this; + } + + /** + * 清空所有Stage配置 + * + * @return this(支持链式调用) + */ + public PhotoProcessContext clearStages() { + stageEnabledMap.clear(); + return this; + } + /** * 设置最终处理结果URL */ diff --git a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java index ad1e69cd..10cd4d3b 100644 --- a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java @@ -751,10 +751,17 @@ public class PrinterServiceImpl implements PrinterService { * @param watermarkConfig 水印配置 */ private Pipeline createNormalPhotoPipeline(WatermarkConfig watermarkConfig) { + BceEnhancerConfig config = new BceEnhancerConfig(); + config.setQps(1); + config.setAppId("119554288"); + config.setApiKey("OX6QoijgKio3eVtA0PiUVf7f"); + config.setSecretKey("dYatXReVriPeiktTjUblhfubpcmYfuMk"); + return new PipelineBuilder("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("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);