From 255ea42f8109ebcfb173ceb35019e8eda6f5da4c Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 12 Feb 2025 09:32:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/mobile/AppTaskController.java | 2 -- .../model/mobile/goods/VideoTaskStatusVO.java | 4 +++ .../ycwl/basic/repository/FaceRepository.java | 3 +- .../basic/repository/VideoTaskRepository.java | 4 ++- .../service/impl/mobile/GoodsServiceImpl.java | 17 +++++++++- .../service/impl/pc/FaceServiceImpl.java | 9 ++++-- .../ycwl/basic/service/pc/FaceService.java | 1 + .../service/task/TaskTemplateService.java | 4 --- .../task/impl/TaskTaskServiceImpl.java | 11 +++++++ .../task/impl/TaskTemplateServiceImpl.java | 31 ------------------- .../com/ycwl/basic/task/VideoPieceGetter.java | 7 +++-- src/main/resources/application-dev.yml | 4 --- src/main/resources/application-prod.yml | 4 --- 13 files changed, 48 insertions(+), 53 deletions(-) delete mode 100644 src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java delete mode 100644 src/main/java/com/ycwl/basic/service/task/impl/TaskTemplateServiceImpl.java diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java index 90be752..6a6b2e1 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppTaskController.java @@ -25,8 +25,6 @@ public class AppTaskController { private GoodsService goodsService; @Autowired private TaskService taskService; - @Autowired - private TaskStatusBiz taskStatusBiz; @GetMapping("/face/{faceId}") @IgnoreLogReq diff --git a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java index 882c966..7edf5a5 100644 --- a/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java +++ b/src/main/java/com/ycwl/basic/model/mobile/goods/VideoTaskStatusVO.java @@ -4,7 +4,11 @@ import lombok.Data; @Data public class VideoTaskStatusVO { + /** + * 0:未开始合成 2:合成中 1:合成成功 3:合成失败 4切片中 + */ private int status; + private int cutStatus; private Long taskId; private Long videoId; private Long templateId; diff --git a/src/main/java/com/ycwl/basic/repository/FaceRepository.java b/src/main/java/com/ycwl/basic/repository/FaceRepository.java index 55ab3f5..2b2617f 100644 --- a/src/main/java/com/ycwl/basic/repository/FaceRepository.java +++ b/src/main/java/com/ycwl/basic/repository/FaceRepository.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component @@ -33,7 +34,7 @@ public class FaceRepository { } FaceEntity face = faceMapper.get(id); if (face != null) { - redisTemplate.opsForValue().set(String.format(FACE_CACHE_KEY, id), JSONObject.toJSONString(face)); + redisTemplate.opsForValue().set(String.format(FACE_CACHE_KEY, id), JSONObject.toJSONString(face), 60 * 60 * 24L, TimeUnit.SECONDS); } return face; } diff --git a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java index b1c407a..b9e34a9 100644 --- a/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java +++ b/src/main/java/com/ycwl/basic/repository/VideoTaskRepository.java @@ -8,6 +8,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.util.concurrent.TimeUnit; + @Component public class VideoTaskRepository { @Autowired @@ -23,7 +25,7 @@ public class VideoTaskRepository { } else { TaskEntity task = taskMapper.get(taskId); if (task != null && 1 == task.getStatus()) { - redisTemplate.opsForValue().set(String.format(TASK_CACHE_KEY, taskId), JSONObject.toJSONString(task)); + redisTemplate.opsForValue().set(String.format(TASK_CACHE_KEY, taskId), JSONObject.toJSONString(task), 60 * 60 * 24L, TimeUnit.SECONDS); } return task; } diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java index 66e1b3c..a2f9497 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/GoodsServiceImpl.java @@ -3,6 +3,7 @@ package com.ycwl.basic.service.impl.mobile; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ycwl.basic.biz.OrderBiz; +import com.ycwl.basic.biz.TaskStatusBiz; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.mapper.*; import com.ycwl.basic.model.mobile.goods.*; @@ -66,6 +67,8 @@ public class GoodsServiceImpl implements GoodsService { private OrderBiz orderBiz; @Autowired private FaceRepository faceRepository; + @Autowired + private TaskStatusBiz taskStatusBiz; public ApiResponse> goodsList(GoodsReqQuery query) { //查询原素材 @@ -256,7 +259,6 @@ public class GoodsServiceImpl implements GoodsService { @Override public VideoTaskStatusVO getTaskStatusByFaceId(Long userId, Long faceId) { FaceEntity face = faceRepository.getFace(faceId); - List taskList = videoMapper.listRelationByFace(userId, faceId); VideoTaskStatusVO response = new VideoTaskStatusVO(); response.setFaceId(faceId); if (face == null) { @@ -264,6 +266,19 @@ public class GoodsServiceImpl implements GoodsService { return response; } response.setScenicId(face.getScenicId()); + int faceCutStatus = taskStatusBiz.getFaceCutStatus(faceId); + response.setCutStatus(faceCutStatus); + if (faceCutStatus == 0) { + // 切视频中,也显示正在处理 + response.setStatus(2); + return response; + } + List taskList = videoMapper.listRelationByFace(userId, faceId); + if (faceCutStatus != 1 && taskList.isEmpty()) { + // 视频切成了能够获取视频的状态,但是没有任务,还是显示正在处理 + response.setStatus(0); + return response; + } if (taskList.isEmpty()) { response.setStatus(0); return response; diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java index 3d68e45..20b6df9 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/FaceServiceImpl.java @@ -26,7 +26,6 @@ import com.ycwl.basic.service.task.TaskService; import com.ycwl.basic.storage.StorageFactory; import com.ycwl.basic.storage.adapters.IStorageAdapter; import com.ycwl.basic.storage.utils.StorageUtil; -import com.ycwl.basic.task.VideoPieceGetter; import com.ycwl.basic.utils.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -188,7 +187,7 @@ public class FaceServiceImpl implements FaceService { FaceRecognizeResp resp = new FaceRecognizeResp(); resp.setUrl(faceUrl); resp.setFaceId(newFaceId); - matchFaceId(newFaceId); + matchFaceId(newFaceId, oldFaceId == null); return ApiResponse.success(resp); } @@ -197,8 +196,14 @@ public class FaceServiceImpl implements FaceService { return faceMapper.listByScenicAndUserId(scenicId, userId); } + @Override public SearchFaceRespVo matchFaceId(Long faceId) { + return matchFaceId(faceId, false); + } + + @Override + public SearchFaceRespVo matchFaceId(Long faceId, boolean isNew) { FaceEntity face = faceRepository.getFace(faceId); if (face == null) { return null; diff --git a/src/main/java/com/ycwl/basic/service/pc/FaceService.java b/src/main/java/com/ycwl/basic/service/pc/FaceService.java index 32056ba..9bcbcf3 100644 --- a/src/main/java/com/ycwl/basic/service/pc/FaceService.java +++ b/src/main/java/com/ycwl/basic/service/pc/FaceService.java @@ -27,4 +27,5 @@ public interface FaceService { List listByUser(Long userId, String scenicId); SearchFaceRespVo matchFaceId(Long faceId); + SearchFaceRespVo matchFaceId(Long faceId, boolean isNew); } diff --git a/src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java b/src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java deleted file mode 100644 index a5ad1e4..0000000 --- a/src/main/java/com/ycwl/basic/service/task/TaskTemplateService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.ycwl.basic.service.task; - -public interface TaskTemplateService { -} diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index 5c12801..bb827e6 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ycwl.basic.biz.OrderBiz; +import com.ycwl.basic.biz.TaskStatusBiz; import com.ycwl.basic.biz.TemplateBiz; import com.ycwl.basic.constant.TaskConstant; import com.ycwl.basic.mapper.FaceMapper; @@ -109,6 +110,8 @@ public class TaskTaskServiceImpl implements TaskService { @Autowired private OrderRepository orderRepository; private final ReentrantLock lock = new ReentrantLock(); + @Autowired + private TaskStatusBiz taskStatusBiz; private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { @@ -370,6 +373,12 @@ public class TaskTaskServiceImpl implements TaskService { if (faceSampleList.isEmpty()) { log.info("faceId:{} sample list not exist", faceId); } + if (automatic == 1) { + if (templateBiz.determineTemplateCanGenerate(templateId, faceId, false)) { + // 临时写死,当自动生成视频,切片也算合成中,并更新状态 + taskStatusBiz.setFaceCutStatus(face.getId(), 0); + } + } List faceSampleIds = faceSampleList.stream().map(FaceSampleEntity::getId).collect(Collectors.toList()); List sourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId); // ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId()); @@ -493,6 +502,8 @@ public class TaskTaskServiceImpl implements TaskService { } } videoMapper.addRelation(memberVideoEntity); + // 任务生成了,需要更新切割任务状态 + taskStatusBiz.setFaceCutStatus(faceId, 2); }; if (faceSampleIds.isEmpty()) { // 没有人脸样本 diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTemplateServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTemplateServiceImpl.java deleted file mode 100644 index 7671eb9..0000000 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTemplateServiceImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ycwl.basic.service.task.impl; - -import com.alibaba.fastjson.JSON; -import com.ycwl.basic.mapper.TemplateMapper; -import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity; -import com.ycwl.basic.service.task.TaskTemplateService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -@Service -public class TaskTemplateServiceImpl implements TaskTemplateService { - @Autowired - private RedisTemplate redisTemplate; - @Autowired - private TemplateMapper templateMapper; - - private static final String TEMPLATE_KEY = "template:"; - private static final String TEMPLATE_CONFIG_KEY = "template:config:"; - - private TemplateConfigEntity getTemplateConfig(Long templateId) { - if (redisTemplate.hasKey(TEMPLATE_CONFIG_KEY + templateId)) { - return JSON.parseObject(redisTemplate.opsForValue().get(TEMPLATE_CONFIG_KEY + templateId), TemplateConfigEntity.class); - } - TemplateConfigEntity config = templateMapper.getConfig(templateId); - if (config != null) { - redisTemplate.opsForValue().set(TEMPLATE_CONFIG_KEY + templateId, JSON.toJSONString(config)); - } - return config; - } -} diff --git a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java index 7959533..90da442 100644 --- a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java +++ b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java @@ -97,9 +97,10 @@ public class VideoPieceGetter { } else { templatePlaceholder = null; } - if (task.faceId != null) { - taskStatusBiz.setFaceCutStatus(task.faceId, 0); - } + // 临时处理,只有逻辑层自己设置是否正在切片后再做更新 +// if (task.faceId != null) { +// taskStatusBiz.setFaceCutStatus(task.faceId, 0); +// } AtomicBoolean invoke = new AtomicBoolean(false); List currentPlaceholder = new ArrayList<>(); List list = faceSampleMapper.listByIds(task.getFaceSampleIds()); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 0c2db1a..9db63d3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -113,10 +113,6 @@ YfkdFNxtYLdVAwuylMoV3fKI # 商户APIV3密钥 apiV3: ZHENTUAIzhentuaiZHENTUAIzhentuai -# 人脸合格得分 -face: - score: 80 - # 存储 storage: defaultUse: "assets" diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 3bd22b6..8dbd098 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -113,10 +113,6 @@ YfkdFNxtYLdVAwuylMoV3fKI # 商户APIV3密钥 apiV3: ZHENTUAIzhentuaiZHENTUAIzhentuai -# 人脸合格得分 -face: - score: 75 - # 存储 storage: defaultUse: "assets"