diff --git a/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java b/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java index b17e4afd..eda2cf08 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java @@ -71,7 +71,7 @@ public class PrinterController { // 重新打印(将状态设置为0-未开始,并更新打印机名称) @PostMapping("/task/reprint/{id}") public ApiResponse reprint(@PathVariable("id") Integer id, @RequestBody ReprintRequest request) { - int result = printTaskMapper.updateStatusAndPrinter(id, 0, request.getPrinterName()); + int result = printerService.handleReprint(id, request); return ApiResponse.success(result); } diff --git a/src/main/java/com/ycwl/basic/image/pipeline/stages/ImageEnhanceStage.java b/src/main/java/com/ycwl/basic/image/pipeline/stages/ImageEnhanceStage.java index c482398e..a7efdd7b 100644 --- a/src/main/java/com/ycwl/basic/image/pipeline/stages/ImageEnhanceStage.java +++ b/src/main/java/com/ycwl/basic/image/pipeline/stages/ImageEnhanceStage.java @@ -71,7 +71,7 @@ public class ImageEnhanceStage extends AbstractPipelineStage ids = Arrays.asList(mpId.longValue()); + List memberPrints = printerMapper.getUserPhotoByIds(ids); + if (memberPrints == null || memberPrints.isEmpty()) { + log.warn("handleReprint: MemberPrint记录不存在, mpId={}, taskId={}, 直接更新状态和打印机名称", mpId, id); + return updateTaskStatusAndPrinter(task, request); + } + + MemberPrintResp memberPrint = memberPrints.get(0); + + // 3. 重新处理照片(带增强选项) + Boolean needEnhance = request.getNeedEnhance(); + if (needEnhance == null) { + needEnhance = false; // 默认不增强 + } + + // 3.1 创建图片处理上下文 + PrinterOrderItem orderItem = PrinterOrderItem.fromMemberPrintResp(memberPrint); + PhotoProcessContext context = PhotoProcessContext.fromPrinterOrderItem(orderItem, memberPrint.getScenicId()); + + // 3.2 设置景区配置和场景 + ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(memberPrint.getScenicId()); + context.setScenicConfigManager(scenicConfig); + context.setScene(PipelineScene.IMAGE_PRINT); + + // 3.3 判断图片来源 + if (memberPrint.getSourceId() != null && memberPrint.getSourceId() > 0) { + context.setSource(ImageSource.IPC); + } else if (memberPrint.getSourceId() == null) { + context.setSource(ImageSource.PHONE); + } else { + context.setSource(ImageSource.UNKNOWN); + } + + // 3.4 构建管线(关键:条件性添加 ImageEnhanceStage) + Pipeline pipeline; + String newPrintUrl = null; + + try { + if (context.getImageType() == ImageType.NORMAL_PHOTO) { + // 准备水印配置(重打印不需要二维码,传 null) + WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, null); + 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(); + } else { + // 拼图 + prepareStorageAdapter(context); + pipeline = createPuzzlePipeline(); + } + + // 3.5 执行管线 + boolean success = pipeline.execute(context); + if (success && context.getResultUrl() != null) { + newPrintUrl = context.getResultUrl(); + log.info("handleReprint: 照片重新处理成功, taskId={}, mpId={}, enhance={}, newUrl={}", + id, mpId, needEnhance, newPrintUrl); + } else { + log.warn("handleReprint: 照片重新处理失败, taskId={}, 使用原图", id); + newPrintUrl = memberPrint.getCropUrl(); // 使用原裁剪图 + } + } catch (Exception e) { + log.error("handleReprint: 照片重新处理异常, taskId={}, 使用原图", id, e); + newPrintUrl = memberPrint.getCropUrl(); + } finally { + context.cleanup(); + } + + // 4. 更新打印任务 + String printerName = request.getPrinterName(); + if (StringUtils.isBlank(printerName)) { + // 如果请求中未指定,使用轮询逻辑获取 + PrinterEntity printer = printerMapper.getById(task.getPrinterId()); + if (printer != null) { + printerName = getNextPrinter(printer); + } else { + printerName = task.getPrinterName(); // 保持原有打印机 + } + } + + task.setStatus(TASK_STATUS_PENDING); // 状态设置为待处理(0) + task.setPrinterName(printerName); + task.setUrl(newPrintUrl); + task.setUpdateTime(new Date()); + + int rows = printTaskMapper.updateById(task); + + log.info("handleReprint: 任务更新完成, taskId={}, printerName={}, status=0, rows={}", + id, printerName, rows); + + return rows; + } + + /** + * 当无法获取 MemberPrint 时,直接更新任务状态和打印机名称 + */ + private int updateTaskStatusAndPrinter(PrintTaskEntity task, ReprintRequest request) { + String printerName = request.getPrinterName(); + if (StringUtils.isBlank(printerName)) { + // 如果请求中未指定,使用轮询逻辑获取 + PrinterEntity printer = printerMapper.getById(task.getPrinterId()); + if (printer != null) { + printerName = getNextPrinter(printer); + } else { + printerName = task.getPrinterName(); // 保持原有打印机 + } + } + + // 使用现有的 updateStatusAndPrinter 方法 + int rows = printTaskMapper.updateStatusAndPrinter(task.getId(), TASK_STATUS_PENDING, printerName); + + log.info("handleReprint: 无MemberPrint记录,直接更新任务, taskId={}, printerName={}, status=0, rows={}", + task.getId(), printerName, rows); + + return rows; + } }