You've already forked FrameTour-BE
refactor(goods): 移除预览功能并优化水印处理逻辑
- 移除了 sourceGoodsListPreview 接口及相关实现 - 新增 WatermarkEdgeService 和 FaceService 依赖注入 - 实现边缘端水印处理支持,包含降级机制 - 优化二维码和头像文件处理流程 - 统一水印处理的异常处理和资源清理逻辑
This commit is contained in:
@@ -53,12 +53,6 @@ public class AppGoodsController {
|
||||
return ApiResponse.success(count);
|
||||
}
|
||||
|
||||
@PostMapping("/sourceGoodsList/preview")
|
||||
public ApiResponse<List<GoodsUrlVO>> sourceGoodsListPreview(@RequestBody GoodsReqQuery query) {
|
||||
List<GoodsUrlVO> goodsUrlList = goodsService.sourceGoodsListPreview(query);
|
||||
return ApiResponse.success(goodsUrlList);
|
||||
}
|
||||
|
||||
@PostMapping("/sourceGoodsList/download")
|
||||
public ApiResponse<List<GoodsUrlVO>> sourceGoodsListDownload(@RequestBody GoodsReqQuery query) {
|
||||
List<GoodsUrlVO> goodsUrlList = goodsService.sourceGoodsListDownload(query);
|
||||
|
||||
@@ -38,8 +38,6 @@ public interface GoodsService {
|
||||
|
||||
ApiResponse<GoodsDetailVO> sourceGoodsInfo(Long sourceId);
|
||||
|
||||
List<GoodsUrlVO> sourceGoodsListPreview(GoodsReqQuery query);
|
||||
|
||||
List<GoodsUrlVO> sourceGoodsListDownload(GoodsReqQuery query);
|
||||
|
||||
Integer sourceGoodsCount(GoodsReqQuery query);
|
||||
|
||||
@@ -534,95 +534,6 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
return ApiResponse.success(goodsDetailVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GoodsUrlVO> sourceGoodsListPreview(GoodsReqQuery query) {
|
||||
List<File> tmpFile = new ArrayList<>();
|
||||
FaceEntity face = faceRepository.getFace(query.getFaceId());
|
||||
if (face == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Integer sourceType = query.getSourceType();
|
||||
SourceReqQuery sourceReqQuery = new SourceReqQuery();
|
||||
sourceReqQuery.setScenicId(face.getScenicId());
|
||||
sourceReqQuery.setIsBuy(query.getIsBuy());
|
||||
sourceReqQuery.setType(sourceType);
|
||||
sourceReqQuery.setFaceId(face.getId());
|
||||
List<SourceRespVO> list = sourceMapper.listUser(sourceReqQuery);
|
||||
if (!Integer.valueOf(2).equals(query.getSourceType())) {
|
||||
return list.stream().map(source -> {
|
||||
GoodsUrlVO goodsUrlVO = new GoodsUrlVO();
|
||||
goodsUrlVO.setGoodsType(source.getType());
|
||||
goodsUrlVO.setGoodsId(source.getId());
|
||||
goodsUrlVO.setUrl(source.getVideoUrl());
|
||||
goodsUrlVO.setCreateTime(source.getCreateTime());
|
||||
return goodsUrlVO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
List<GoodsUrlVO> defaultUrlList = list.stream().map(source -> {
|
||||
GoodsUrlVO goodsUrlVO = new GoodsUrlVO();
|
||||
goodsUrlVO.setGoodsType(source.getType());
|
||||
goodsUrlVO.setGoodsId(source.getId());
|
||||
goodsUrlVO.setUrl(source.getUrl());
|
||||
goodsUrlVO.setCreateTime(source.getCreateTime());
|
||||
return goodsUrlVO;
|
||||
}).collect(Collectors.toList());
|
||||
IsBuyRespVO isBuy = orderBiz.isBuy(face.getScenicId(), face.getMemberId(), face.getId(), query.getSourceType(), face.getId());
|
||||
if (!isBuy.isBuy()) {
|
||||
ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(face.getScenicId());
|
||||
if (configManager != null && ((configManager.getInteger("anti_screen_record_type") & 2) == 0)) {
|
||||
// 未启用水印
|
||||
return defaultUrlList;
|
||||
}
|
||||
IStorageAdapter adapter;
|
||||
if (configManager != null && configManager.getEnum("store_type", StorageType.class) != null) {
|
||||
adapter = StorageFactory.get(configManager.getEnum("store_type", StorageType.class));
|
||||
adapter.loadConfig(JacksonUtil.parseObject(configManager.getString("store_config_json"), Map.class));
|
||||
} else {
|
||||
adapter = StorageFactory.use("assets-ext");
|
||||
}
|
||||
IOperator operator = ImageWatermarkFactory.get(ImageWatermarkOperatorEnum.WATERMARK);
|
||||
List<SourceWatermarkEntity> watermarkEntityList = sourceMapper.listSourceWatermark(defaultUrlList.stream().map(GoodsUrlVO::getGoodsId).collect(Collectors.toList()), null, ImageWatermarkOperatorEnum.WATERMARK.getType());
|
||||
List<GoodsUrlVO> collect = defaultUrlList.stream().parallel().peek(item -> {
|
||||
Optional<SourceWatermarkEntity> any = watermarkEntityList.stream()
|
||||
.filter(watermark -> watermark.getSourceId().equals(item.getGoodsId()))
|
||||
.findAny();
|
||||
if (any.isPresent()) {
|
||||
item.setUrl(any.get().getWatermarkUrl());
|
||||
} else {
|
||||
// 生成
|
||||
File dstFile = new File(item.getGoodsId() + ".jpg");
|
||||
File watermarkedFile = new File(item.getGoodsId() + "_" + ImageWatermarkOperatorEnum.WATERMARK.getType() + "." + ImageWatermarkOperatorEnum.WATERMARK.getPreferFileType());
|
||||
try {
|
||||
HttpUtil.downloadFile(item.getUrl().replace("oss.zhentuai.com", "frametour-assets.oss-cn-shanghai-internal.aliyuncs.com"), dstFile);
|
||||
} catch (Exception e) {
|
||||
log.error("downloadFile error", e);
|
||||
return;
|
||||
}
|
||||
tmpFile.add(dstFile);
|
||||
WatermarkInfo info = new WatermarkInfo();
|
||||
info.setOriginalFile(dstFile);
|
||||
info.setWatermarkedFile(watermarkedFile);
|
||||
try {
|
||||
operator.process(info);
|
||||
} catch (ImageWatermarkException e) {
|
||||
log.error("process error", e);
|
||||
return;
|
||||
}
|
||||
String url = adapter.uploadFile(null, watermarkedFile, StorageConstant.PHOTO_WATERMARKED_PATH, watermarkedFile.getName());
|
||||
adapter.setAcl(StorageAcl.PUBLIC_READ, StorageConstant.PHOTO_WATERMARKED_PATH, watermarkedFile.getName());
|
||||
sourceMapper.addSourceWatermark(item.getGoodsId(), null, ImageWatermarkOperatorEnum.WATERMARK.getType(), url);
|
||||
tmpFile.add(watermarkedFile);
|
||||
item.setUrl(url);
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
for (File file : tmpFile) {
|
||||
file.delete();
|
||||
}
|
||||
return collect;
|
||||
}
|
||||
return defaultUrlList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GoodsUrlVO> sourceGoodsListDownload(GoodsReqQuery query) {
|
||||
List<File> tmpFile = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user