feat(printer): 引入照片处理管线机制

- 新增Crop和PrinterOrderItem模型用于封装裁剪信息和打印订单项
- 实现基于Pipeline模式的照片处理流程,支持普通照片和拼图处理
- 添加多个处理阶段:下载、方向检测、条件旋转、水印、恢复方向、上传和清理
- 创建PipelineBuilder用于动态构建处理管线
- 实现抽象Stage基类和具体Stage实现类
- 添加Stage执行结果管理和异常处理机制
- 优化照片处理逻辑,使用管线替代原有复杂的嵌套处理代码
- 支持通过景区配置管理水印类型、存储适配器等参数
- 提供临时文件管理工具确保处理过程中文件及时清理
- 增强日志记录和错误处理能力,提升系统可维护性
This commit is contained in:
2025-11-24 21:07:52 +08:00
parent 4360ef1313
commit e418a5ccdb
20 changed files with 1393 additions and 165 deletions

View File

@@ -0,0 +1,11 @@
package com.ycwl.basic.model;
import lombok.Data;
/**
* 裁剪信息
*/
@Data
public class Crop {
private Integer rotation;
}

View File

@@ -0,0 +1,42 @@
package com.ycwl.basic.model;
import com.ycwl.basic.model.pc.printer.resp.MemberPrintResp;
import com.ycwl.basic.utils.JacksonUtil;
import lombok.Data;
/**
* 打印订单项(用于管线处理)
*/
@Data
public class PrinterOrderItem {
private Long id;
private Long sourceId;
private String cropUrl;
private Crop crop;
/**
* 从MemberPrintResp转换
*/
public static PrinterOrderItem fromMemberPrintResp(MemberPrintResp resp) {
PrinterOrderItem item = new PrinterOrderItem();
item.setId(resp.getId() != null ? resp.getId().longValue() : null);
item.setSourceId(resp.getSourceId());
item.setCropUrl(resp.getCropUrl());
if (resp.getCrop() != null) {
try {
Crop crop = new Crop();
Integer rotation = JacksonUtil.getInt(resp.getCrop(), "rotation");
if (rotation != null) {
crop.setRotation(rotation);
}
item.setCrop(crop);
} catch (Exception e) {
// 解析失败,crop为null
}
}
return item;
}
}