You've already forked FrameTour-BE
feat(ai-cam): 增强AI摄像头人脸检测逻辑
All checks were successful
ZhenTu-BE/pipeline/head This commit looks good
All checks were successful
ZhenTu-BE/pipeline/head This commit looks good
- 引入时间范围限制配置,支持按分钟设置检测窗口 - 创建DetectResult内部类,记录人脸检测的分数和时间信息 - 优化照片筛选逻辑,先按分数排序再应用时间范围过滤 - 更新设备类型名称,将"微单"改为"AI微单" - 增强日志记录,提供更详细的调试信息
This commit is contained in:
@@ -220,6 +220,7 @@ public class OrderBiz {
|
||||
break;
|
||||
case 1: // 视频原素材
|
||||
case 2: // 照片原素材
|
||||
case 13: // AI微单
|
||||
sourceRepository.setUserIsBuyItem(order.getMemberId(), item.getGoodsType(), item.getGoodsId(), order.getId());
|
||||
break;
|
||||
case 3:
|
||||
|
||||
@@ -86,7 +86,7 @@ public class AppOrderV2Controller {
|
||||
TaskEntity task = videoTaskRepository.getTaskById(video.getTaskId());
|
||||
request.setFaceId(task.getFaceId());
|
||||
}
|
||||
case RECORDING_SET, PHOTO_SET -> request.setFaceId(Long.valueOf(productItem.getProductId()));
|
||||
case RECORDING_SET, PHOTO_SET, AI_CAM_PHOTO_SET -> request.setFaceId(Long.valueOf(productItem.getProductId()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,6 +119,14 @@ public class AppOrderV2Controller {
|
||||
Integer count = sourceMapper.countUser(sourceReqQuery);
|
||||
product.setQuantity(count);
|
||||
break;
|
||||
case AI_CAM_PHOTO_SET:
|
||||
SourceReqQuery aiPhotoSetReqQuery = new SourceReqQuery();
|
||||
aiPhotoSetReqQuery.setMemberId(currentUserId);
|
||||
aiPhotoSetReqQuery.setType(13);
|
||||
aiPhotoSetReqQuery.setFaceId(face.getId());
|
||||
Integer _count = sourceMapper.countUser(aiPhotoSetReqQuery);
|
||||
product.setQuantity(_count);
|
||||
break;
|
||||
default:
|
||||
log.warn("未知的商品类型,跳过重复购买检查: productType={}", product.getProductType());
|
||||
break;
|
||||
|
||||
@@ -41,6 +41,9 @@ public class SourceRepository {
|
||||
}
|
||||
|
||||
public void setUserIsBuyItem(Long memberId, int type, Long faceId, Long orderId) {
|
||||
if (type == 13) {
|
||||
type = 3; // compact
|
||||
}
|
||||
MemberSourceEntity memberSource = new MemberSourceEntity();
|
||||
memberSource.setMemberId(memberId);
|
||||
memberSource.setFaceId(faceId);
|
||||
|
||||
@@ -575,7 +575,7 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
if (query.getGoodsId() != null) {
|
||||
list = list.stream().filter(source -> source.getId().equals(query.getGoodsId())).toList();
|
||||
}
|
||||
if (!Integer.valueOf(2).equals(query.getSourceType())) {
|
||||
if (Integer.valueOf(1).equals(query.getSourceType())) {
|
||||
return list.stream().map(source -> {
|
||||
GoodsUrlVO goodsUrlVO = new GoodsUrlVO();
|
||||
goodsUrlVO.setGoodsType(source.getType());
|
||||
@@ -594,7 +594,7 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
}
|
||||
return true;
|
||||
}).count();
|
||||
IsBuyRespVO isBuy = orderBiz.isBuy(face.getScenicId(), face.getMemberId(), face.getId(), query.getSourceType(), face.getId());
|
||||
IsBuyRespVO isBuy = orderBiz.isBuy(face.getScenicId(), face.getMemberId(), face.getId(), sourceType == 3 ? 13 : sourceType, face.getId());
|
||||
if (count > 0) {
|
||||
if (!isBuy.isBuy()) {
|
||||
return Collections.emptyList();
|
||||
@@ -831,6 +831,9 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
} else if (type == 2) {
|
||||
goodsPageVO.setGoodsName("照片集");
|
||||
goodsPageVO.setTemplateCoverUrl(scenicConfig.getString("photo_cover_url"));
|
||||
} else if (type == 3) {
|
||||
goodsPageVO.setGoodsName("AI微单");
|
||||
goodsPageVO.setTemplateCoverUrl(scenicConfig.getString("ai_camera_cover_url"));
|
||||
} else {
|
||||
goodsPageVO.setGoodsName("未知商品");
|
||||
}
|
||||
|
||||
@@ -558,6 +558,7 @@ public class FaceServiceImpl implements FaceService {
|
||||
sourceVideoContent.setGroup("直出原片");
|
||||
sourceImageContent.setGroup("直出原片");
|
||||
sourceAiCamContent.setGroup("直出原片");
|
||||
ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(face.getScenicId());
|
||||
if (!scenicConfigFacade.isDisableSourceImage(face.getScenicId())) {
|
||||
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(face.getScenicId(), userId, faceId, SourceType.IMAGE.getCode(), faceId);
|
||||
sourceImageContent.setSourceType(isBuyRespVO.getGoodsType());
|
||||
@@ -599,7 +600,7 @@ public class FaceServiceImpl implements FaceService {
|
||||
// AI微单:只有存在type=3的数据时才添加
|
||||
boolean hasAiCam = sourceList.stream().anyMatch(source -> source.getType() == 3);
|
||||
if (hasAiCam) {
|
||||
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(face.getScenicId(), userId, faceId, SourceType.AI_CAM.getCode(), faceId);
|
||||
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(face.getScenicId(), userId, faceId, 13, faceId);
|
||||
sourceAiCamContent.setSourceType(isBuyRespVO.getGoodsType());
|
||||
sourceAiCamContent.setContentId(isBuyRespVO.getGoodsId());
|
||||
if (isBuyRespVO.isBuy()) {
|
||||
@@ -629,7 +630,7 @@ public class FaceServiceImpl implements FaceService {
|
||||
} else if (type == 3) {
|
||||
sourceAiCamContent.setSourceType(13);
|
||||
sourceAiCamContent.setLockType(-1);
|
||||
sourceAiCamContent.setTemplateCoverUrl(list.getFirst().getUrl());
|
||||
sourceAiCamContent.setTemplateCoverUrl(configManager.getString("ai_camera_cover_url"));
|
||||
}
|
||||
});
|
||||
return contentList;
|
||||
|
||||
@@ -177,6 +177,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
} else if (Integer.valueOf(2).equals(orderItemList.getFirst().getGoodsType())) {
|
||||
item.setGoodsName("照片集");
|
||||
item.setOrderType("照片集");
|
||||
} else if (Integer.valueOf(3).equals(orderItemList.getFirst().getGoodsType())) {
|
||||
item.setGoodsName("AI微单");
|
||||
item.setOrderType("AI微单");
|
||||
} else if (Integer.valueOf(0).equals(orderItemList.getFirst().getGoodsType())) {
|
||||
item.setOrderType("旅行Vlog");
|
||||
item.setGoodsName(orderItemList.getFirst().getGoodsName());
|
||||
@@ -237,6 +240,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
} else if (Integer.valueOf(2).equals(orderItemList.getFirst().getGoodsType())) {
|
||||
item.setGoodsName("照片集");
|
||||
item.setOrderType("照片集");
|
||||
} else if (Integer.valueOf(3).equals(orderItemList.getFirst().getGoodsType())) {
|
||||
item.setGoodsName("AI微单");
|
||||
item.setOrderType("AI微单");
|
||||
} else if (Integer.valueOf(0).equals(orderItemList.getFirst().getGoodsType())) {
|
||||
item.setOrderType("旅行Vlog");
|
||||
item.setGoodsName(orderItemList.getFirst().getGoodsName());
|
||||
@@ -940,11 +946,13 @@ public class OrderServiceImpl implements OrderService {
|
||||
case PHOTO_SET -> 2;
|
||||
case VLOG_VIDEO -> 0;
|
||||
case RECORDING_SET -> 1;
|
||||
case AI_CAM_PHOTO_SET -> 13;
|
||||
default -> 0;
|
||||
};
|
||||
Long goodsId = switch (productItem.getProductType()) {
|
||||
case PHOTO_LOG -> Long.valueOf(productItem.getProductId());
|
||||
case PHOTO_SET, RECORDING_SET -> face.getId();
|
||||
case AI_CAM_PHOTO_SET -> face.getId();
|
||||
case VLOG_VIDEO -> {
|
||||
List<MemberVideoEntity> videos = memberRelationRepository.listRelationByFaceAndTemplate(face.getId(), Long.valueOf(productItem.getProductId()));
|
||||
yield videos.getFirst().getVideoId();
|
||||
|
||||
Reference in New Issue
Block a user