refactor(order): 简化faceId获取逻辑

- 移除通过task获取faceId的中间步骤
- 直接从video实体获取faceId
- 更新相关服务和控制器中的调用逻辑
- 优化日志记录中的faceId来源
- 提高代码可读性和执行效率
This commit is contained in:
2025-12-15 17:07:37 +08:00
parent 7348994427
commit 832f6a2339
7 changed files with 46 additions and 63 deletions

View File

@@ -104,10 +104,7 @@ public class OrderBiz {
if (video == null) {
return null;
}
TaskEntity task = videoTaskRepository.getTaskById(video.getTaskId());
if (task != null) {
priceObj.setFaceId(task.getFaceId());
}
priceObj.setFaceId(video.getFaceId());
TemplateRespVO template = templateRepository.getTemplate(video.getTemplateId());
if (template == null) {
return priceObj;

View File

@@ -213,9 +213,8 @@ public class LyCompatibleController {
VideoEntity videoRespVO = videoRepository.getVideo(contentPageVO.getContentId());
map.put("id", videoRespVO.getId().toString());
map.put("task_id", videoRespVO.getTaskId().toString());
TaskEntity task = videoTaskRepository.getTaskById(videoRespVO.getTaskId());
if (task != null) {
map.put("face_id", String.valueOf(task.getFaceId()));
if (videoRespVO.getFaceId() != null) {
map.put("face_id", String.valueOf(videoRespVO.getFaceId()));
}
map.put("template_cover_image", contentPageVO.getTemplateCoverUrl());
Date taskShotDate = taskTaskServiceImpl.getTaskShotDate(videoRespVO.getTaskId());

View File

@@ -85,8 +85,7 @@ public class AppOrderV2Controller {
switch (productItem.getProductType()) {
case VLOG_VIDEO -> {
VideoEntity video = videoRepository.getVideo(Long.valueOf(productItem.getProductId()));
TaskEntity task = videoTaskRepository.getTaskById(video.getTaskId());
request.setFaceId(task.getFaceId());
request.setFaceId(video.getFaceId());
}
case RECORDING_SET, PHOTO_SET, AI_CAM_PHOTO_SET -> request.setFaceId(Long.valueOf(productItem.getProductId()));
}

View File

@@ -314,20 +314,17 @@ public class VideoReviewServiceImpl implements VideoReviewService {
}
// 情况2:通过购买模板间接拥有(goods_type=-1, goods_id=templateId)
// 需要通过video的taskId找到task,再通过task的faceId查询购买模板的订单
if (video.getTaskId() != null && video.getTemplateId() != null) {
TaskEntity task = taskMapper.get(video.getTaskId());
if (task != null && task.getFaceId() != null) {
List<Long> templateOrderIds = orderMapper.getOrderIdsByFaceIdAndTemplateId(
task.getFaceId(),
video.getTemplateId()
);
// 通过video的faceId查询购买模板的订单
if (video.getFaceId() != null && video.getTemplateId() != null) {
List<Long> templateOrderIds = orderMapper.getOrderIdsByFaceIdAndTemplateId(
video.getFaceId(),
video.getTemplateId()
);
if (templateOrderIds != null && !templateOrderIds.isEmpty()) {
allOrderIds.addAll(templateOrderIds);
log.info("视频[{}]通过模板[{}]购买订单数: {}, faceId: {}",
videoId, video.getTemplateId(), templateOrderIds.size(), task.getFaceId());
}
if (templateOrderIds != null && !templateOrderIds.isEmpty()) {
allOrderIds.addAll(templateOrderIds);
log.info("视频[{}]通过模板[{}]购买订单数: {}, faceId: {}",
videoId, video.getTemplateId(), templateOrderIds.size(), video.getFaceId());
}
}

View File

@@ -53,10 +53,9 @@ public class VideoViewPermissionService {
log.warn("视频缺少景区信息: videoId={}", videoId);
return createErrorPermission("视频信息不完整");
}
TaskEntity taskById = videoTaskRepository.getTaskById(video.getTaskId());
// 检查用户是否已购买
IsBuyRespVO buy = orderBiz.isBuy(scenicId, userId, taskById.getFaceId(), 0, videoId);
IsBuyRespVO buy = orderBiz.isBuy(scenicId, userId, video.getFaceId(), 0, videoId);
if (buy != null && (buy.isBuy() || buy.isFree())) {
// 已购买,不限制查看
log.debug("用户已购买视频,无查看限制: userId={}, videoId={}", userId, videoId);
@@ -123,10 +122,9 @@ public class VideoViewPermissionService {
if (scenicId == null) {
return createErrorPermission("视频信息不完整");
}
TaskEntity taskById = videoTaskRepository.getTaskById(video.getTaskId());
// 检查用户是否已购买
IsBuyRespVO buy = orderBiz.isBuy(scenicId, userId, taskById.getFaceId(), 0, videoId);
IsBuyRespVO buy = orderBiz.isBuy(scenicId, userId, video.getFaceId(), 0, videoId);
if (buy != null && (buy.isBuy() || buy.isFree())) {
// 已购买,不限制查看
log.debug("用户已购买视频,无查看限制: userId={}, videoId={}", userId, videoId);

View File

@@ -197,41 +197,41 @@ public class GoodsServiceImpl implements GoodsService {
@Override
public ApiResponse<VideoGoodsDetailVO> videoGoodsDetail(Long userId, Long videoId) {
VideoGoodsDetailVO goodsDetailVO = new VideoGoodsDetailVO();
VideoRespVO videoRespVO = videoMapper.getById(videoId);
if (videoRespVO == null) {
VideoEntity video = videoRepository.getVideo(videoId);
if (video == null) {
return ApiResponse.fail("该vlog不存在或已失效");
}
goodsDetailVO.setGoodsName(videoRespVO.getTemplateName());
goodsDetailVO.setScenicId(videoRespVO.getScenicId());
TemplateRespVO template = templateRepository.getTemplate(video.getTemplateId());
goodsDetailVO.setGoodsName(template.getName());
goodsDetailVO.setScenicId(video.getScenicId());
try {
ScenicV2DTO scenic = scenicRepository.getScenicBasic(videoRespVO.getScenicId());
ScenicV2DTO scenic = scenicRepository.getScenicBasic(video.getScenicId());
goodsDetailVO.setScenicName(scenic.getName());
} catch (Exception e) {
goodsDetailVO.setScenicName("");
}
goodsDetailVO.setGoodsType(0);
goodsDetailVO.setGoodsId(videoRespVO.getId());
goodsDetailVO.setVideoUrl(videoRespVO.getVideoUrl());
goodsDetailVO.setTemplateId(videoRespVO.getTemplateId());
goodsDetailVO.setTemplateCoverUrl(videoRespVO.getTemplateCoverUrl());
goodsDetailVO.setCreateTime(videoRespVO.getCreateTime());
goodsDetailVO.setHeight(videoRespVO.getHeight());
goodsDetailVO.setWidth(videoRespVO.getWidth());
goodsDetailVO.setDuration(videoRespVO.getDuration());
goodsDetailVO.setGoodsId(video.getId());
goodsDetailVO.setVideoUrl(video.getVideoUrl());
goodsDetailVO.setTemplateId(video.getTemplateId());
goodsDetailVO.setTemplateCoverUrl(template.getCoverUrl());
goodsDetailVO.setCreateTime(video.getCreateTime());
goodsDetailVO.setHeight(video.getHeight());
goodsDetailVO.setWidth(video.getWidth());
goodsDetailVO.setDuration(video.getDuration());
if (userId == null) {
goodsDetailVO.setIsBuy(0);
goodsDetailVO.setShare(true);
goodsDetailVO.setPrice("未登录");
} else {
VideoEntity entity = videoMapper.getEntity(videoId);
TaskEntity taskEntity = videoTaskRepository.getTaskById(entity.getTaskId());
goodsDetailVO.setFaceId(taskEntity.getFaceId());
boolean isBuy = orderRepository.checkUserBuyFaceItem(userId, taskEntity.getFaceId(), 0, videoId);
goodsDetailVO.setFaceId(entity.getFaceId());
boolean isBuy = orderRepository.checkUserBuyFaceItem(userId, entity.getFaceId(), 0, videoId);
if (!isBuy) {
isBuy = orderRepository.checkUserBuyFaceItem(userId, taskEntity.getFaceId(), -1, taskEntity.getTemplateId());
isBuy = orderRepository.checkUserBuyFaceItem(userId, entity.getFaceId(), -1, entity.getTemplateId());
}
if (!isBuy) {
PriceObj priceObj = orderBiz.queryPrice(videoRespVO.getScenicId(), 0, videoId);
PriceObj priceObj = orderBiz.queryPrice(video.getScenicId(), 0, videoId);
if (priceObj.isFree()) {
goodsDetailVO.setIsBuy(1);
} else {
@@ -244,14 +244,10 @@ public class GoodsServiceImpl implements GoodsService {
goodsDetailVO.setIsBuy(1);
}
}
TaskEntity task = videoTaskRepository.getTaskById(videoRespVO.getTaskId());
if (task == null) {
return ApiResponse.fail("该vlog不存在或已失效");
}
goodsDetailVO.setShotTime(taskTaskService.getTaskShotDate(task.getId()));
goodsDetailVO.setLensNum(videoTaskRepository.getTaskLensNum(task.getId()));
goodsDetailVO.setDevicesNum(videoTaskRepository.getTaskDeviceNum(task.getId()));
CouponRecordQueryResp couponRecord = couponBiz.queryUserCouponRecord(task.getScenicId(), userId, task.getFaceId(), task.getTemplateId().toString());
goodsDetailVO.setShotTime(taskTaskService.getTaskShotDate(video.getTaskId()));
goodsDetailVO.setLensNum(videoTaskRepository.getTaskLensNum(video.getTaskId()));
goodsDetailVO.setDevicesNum(videoTaskRepository.getTaskDeviceNum(video.getTaskId()));
CouponRecordQueryResp couponRecord = couponBiz.queryUserCouponRecord(video.getScenicId(), userId, video.getFaceId(), video.getTemplateId().toString());
if (couponRecord != null) {
if (couponRecord.isUsable()) {
goodsDetailVO.setCouponId(couponRecord.getCouponId());
@@ -726,16 +722,15 @@ public class GoodsServiceImpl implements GoodsService {
}
Long taskId = video.getTaskId();
TaskEntity task = videoTaskRepository.getTaskById(taskId);
if (task == null) {
log.error("关联任务不存在: videoId={}, taskId={}", videoId, taskId);
if (taskId == null) {
log.error("视频没有关联任务: videoId={}", videoId);
result.setCanUpdate(false);
return result;
}
result.setTaskId(taskId);
result.setFaceId(task.getFaceId());
result.setTemplateId(task.getTemplateId());
result.setFaceId(video.getFaceId());
result.setTemplateId(video.getTemplateId());
TaskUpdateResult taskResult = videoTaskRepository.checkTaskUpdate(taskId);
result.setCanUpdate(taskResult.isCanUpdate());

View File

@@ -433,7 +433,6 @@ public class OrderServiceImpl implements OrderService {
item.setCoverList(Collections.singletonList(item.getCoverUrl()));
VideoEntity videoMapperById = videoRepository.getVideo(item.getGoodsId());
if (videoMapperById != null) {
TaskEntity task = videoTaskRepository.getTaskById(videoMapperById.getTaskId());
TemplateRespVO template = templateRepository.getTemplate(videoMapperById.getTemplateId());
GoodsDetailVO goods = new GoodsDetailVO();
goods.setGoodsId(videoMapperById.getId());
@@ -441,8 +440,8 @@ public class OrderServiceImpl implements OrderService {
goods.setUrl(videoMapperById.getVideoUrl());
goods.setGoodsType(0);
goods.setTemplateCoverUrl(template.getCoverUrl());
goods.setCreateTime(videoTaskRepository.getTaskShotDate(task.getId()));
goods.setParts(videoTaskRepository.getTaskLensNum(task.getId()));
goods.setCreateTime(videoTaskRepository.getTaskShotDate(videoMapperById.getTaskId()));
goods.setParts(videoTaskRepository.getTaskLensNum(videoMapperById.getTaskId()));
goodsList.add(goods);
item.setShootingTime(videoTaskRepository.getTaskShotDate(videoMapperById.getTaskId()));
item.setVideoUrl(videoMapperById.getVideoUrl());
@@ -795,9 +794,8 @@ public class OrderServiceImpl implements OrderService {
switch (createOrderReqVO.getGoodsType()) {
case 0: // vlog
VideoEntity video = videoRepository.getVideo(createOrderReqVO.getGoodsId());
TaskEntity taskById = videoTaskRepository.getTaskById(video.getTaskId());
if (taskById != null) {
couponRecord = couponBiz.queryUserCouponRecord(order.getScenicId(), userId, order.getFaceId(), taskById.getTemplateId().toString());
if (video != null && video.getTemplateId() != null) {
couponRecord = couponBiz.queryUserCouponRecord(order.getScenicId(), userId, order.getFaceId(), video.getTemplateId().toString());
}
break;
case 1: