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 ffb7e49..4043564 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 @@ -214,150 +214,7 @@ public class TaskTaskServiceImpl implements TaskService { @Override public void forceCreateTaskByFaceIdAndTempalteId(Long faceId, Long templateId) { - FaceEntity face = faceRepository.getFace(faceId); - if (face == null) { - log.info("faceId:{} is not exist", faceId); - return; - } - List faceSampleList = faceRepository.getFaceSampleList(faceId); - if (faceSampleList.isEmpty()) { - log.info("faceId:{} sample list not exist", faceId); - } - List faceSampleIds = faceSampleList.stream().map(FaceSampleEntity::getId).collect(Collectors.toList()); - List sourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId); - VideoPieceGetter.Task task = new VideoPieceGetter.Task(); - task.faceId = faceId; - task.faceSampleIds = faceSampleIds; - task.templateId = templateId; - task.memberId = face.getMemberId(); - task.callback = () -> { - log.info("task callback"); - List videoSourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId); - Map> sourcesMap = videoSourceList.stream() - .peek(item -> item.setUrl(item.getVideoUrl())) - .filter(item -> item.getDeviceId() != null) // 添加对 deviceId 为 null 的检查 - .filter(item -> { - DeviceEntity device = deviceRepository.getDevice(item.getDeviceId()); - if (device == null) { - return false; - } - return Integer.valueOf(1).equals(device.getStatus()); - }) - .collect(Collectors.groupingBy(item -> item.getDeviceId().toString())); - if (sourcesMap.isEmpty()) { - // 主动禁止没有视频源视频生成 - log.info("task callback: 没有视频源"); - return; - } - List templatePlaceholder = templateRepository.getTemplatePlaceholder(templateId); - if (templatePlaceholder.stream().distinct().count() == templatePlaceholder.size()) { - sourcesMap.forEach((key, value) -> { - // 每个value只保留第一个 - value.removeIf(item -> !value.getFirst().equals(item)); - }); - } else { - log.info("task callback: 模板占位符有重复,templateId: {}", templateId); - } - - // 处理以P开头的templatePlaceHolder,添加type=2的source - boolean hasPPlaceholder = templatePlaceholder.stream().anyMatch(placeholder -> placeholder.startsWith("P")); - if (hasPPlaceholder) { - List imageSourceList = sourceMapper.listImageSourcesByFaceId(faceId); - if (!imageSourceList.isEmpty()) { - // 将图片source按设备ID分组并添加到sourcesMap中 - Map> imageSourceMap = imageSourceList.stream() - .peek(item -> item.setUrl(item.getUrl())) // 图片使用url字段 - .filter(item -> item.getDeviceId() != null) - .filter(item -> { - DeviceEntity device = deviceRepository.getDevice(item.getDeviceId()); - if (device == null) { - return false; - } - return Integer.valueOf(1).equals(device.getStatus()); - }) - .collect(Collectors.groupingBy(item -> Strings.concat("P", item.getDeviceId().toString()))); - - // 合并到现有的sourcesMap中 - imageSourceMap.forEach((key, value) -> { - sourcesMap.merge(key, value, (existing, replacement) -> { - existing.addAll(replacement); - return existing; - }); - }); - } - } - TaskReqQuery taskReqQuery = new TaskReqQuery(); - taskReqQuery.setFaceId(faceId); - taskReqQuery.setTemplateId(templateId); - taskReqQuery.setTaskParams(JacksonUtil.toJSONString(sourcesMap)); - List list = taskMapper.list(taskReqQuery); - - MemberVideoEntity memberVideoEntity = new MemberVideoEntity(); - memberVideoEntity.setMemberId(face.getMemberId()); - memberVideoEntity.setScenicId(face.getScenicId()); - memberVideoEntity.setFaceId(faceId); - memberVideoEntity.setTemplateId(templateId); - memberVideoEntity.setIsBuy(0); - if (list.isEmpty()) { - log.info("创建任务! faceId:{},templateId:{},taskParams:{}", faceId, templateId, sourcesMap); - ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId()); - TaskEntity taskEntity = null; - if (Integer.valueOf(0).equals(scenicConfig.getTemplateNewVideoType())) { - log.info("景区{}启用:templateNewVideoType:全新视频原位替换", face.getScenicId()); - taskReqQuery.setTemplateId(templateId); - List templateTaskList = taskMapper.listEntity(taskReqQuery); - if (!templateTaskList.isEmpty()) { - taskEntity = templateTaskList.getFirst(); - log.info("已有旧生成的视频:{}", taskEntity); - MemberVideoEntity taskVideoRelation = videoMapper.queryRelationByMemberTask(face.getMemberId(), taskEntity.getId()); - if (taskVideoRelation != null) { - log.info("已有旧关联记录的视频:{}", taskVideoRelation); - memberVideoEntity.setIsBuy(taskVideoRelation.getIsBuy()); - memberVideoEntity.setOrderId(taskVideoRelation.getOrderId()); - } - taskMapper.deleteById(taskEntity.getId()); - } - } - if (taskEntity == null) { - taskEntity = new TaskEntity(); - taskEntity.setId(SnowFlakeUtil.getLongId()); - taskEntity.setScenicId(face.getScenicId()); - taskEntity.setFaceId(faceId); - taskEntity.setTemplateId(templateId); - taskEntity.setAutomatic(0); - } - taskEntity.setWorkerId(null); - taskEntity.setStatus(0); - taskEntity.setTaskParams(JacksonUtil.toJSONString(sourcesMap)); - taskMapper.add(taskEntity); - memberVideoEntity.setTaskId(taskEntity.getId()); - } else { - log.info("重复task! faceId:{},templateId:{},taskParams:{}", faceId, templateId, sourcesMap); - memberVideoEntity.setTaskId(list.getFirst().getId()); - VideoEntity video = videoMapper.findByTaskId(list.getFirst().getId()); - if (video != null) { - IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), list.getFirst().getScenicId(), 0, video.getId()); - if (isBuy.isBuy()) { - memberVideoEntity.setIsBuy(1); - memberVideoEntity.setOrderId(isBuy.getOrderId()); - } - if (isBuy.isFree()) { - memberVideoEntity.setIsBuy(1); - } - memberVideoEntity.setVideoId(video.getId()); - } - } - videoMapper.addRelation(memberVideoEntity); - }; - if (faceSampleIds.isEmpty()) { - // 没有人脸样本 - if (!sourceList.isEmpty()) { - // 但是有原片 - task.callback.onInvoke(); - } - } else { - VideoPieceGetter.addTask(task); - } + createTaskByFaceIdAndTempalteIdInternal(faceId, templateId, 0, true); } @Override @@ -405,6 +262,10 @@ public class TaskTaskServiceImpl implements TaskService { @Override public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) { + createTaskByFaceIdAndTempalteIdInternal(faceId, templateId, automatic, false); + } + + private void createTaskByFaceIdAndTempalteIdInternal(Long faceId, Long templateId, int automatic, boolean forceCreate) { FaceEntity face = faceRepository.getFace(faceId); if (face == null) { log.info("faceId:{} is not exist", faceId); @@ -414,47 +275,19 @@ public class TaskTaskServiceImpl implements TaskService { if (faceSampleList.isEmpty()) { log.info("faceId:{} sample list not exist", faceId); } - if (templateBiz.determineTemplateCanGenerate(templateId, faceId, false)) { - // 临时写死,当自动生成视频,切片也算合成中,并更新状态 - taskStatusBiz.setFaceCutStatus(face.getId(), 0); - } else { - taskStatusBiz.setFaceCutStatus(face.getId(), 2); + + // 只有在非强制创建时才进行模板生成判断和状态设置 + if (!forceCreate) { + if (templateBiz.determineTemplateCanGenerate(templateId, faceId, false)) { + // 临时写死,当自动生成视频,切片也算合成中,并更新状态 + taskStatusBiz.setFaceCutStatus(face.getId(), 0); + } else { + taskStatusBiz.setFaceCutStatus(face.getId(), 2); + } } + List faceSampleIds = faceSampleList.stream().map(FaceSampleEntity::getId).collect(Collectors.toList()); -// ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId()); -// if (automatic > 0) { -// TaskReqQuery taskReqQuery = new TaskReqQuery(); -// taskReqQuery.setFaceId(faceId); -// taskReqQuery.setTemplateId(templateId); -// List list = taskMapper.list(taskReqQuery); -// if (!list.isEmpty()) { -// list.parallelStream().forEach(task -> { -// MemberVideoEntity memberVideo = videoMapper.queryRelationByMemberTask(faceRespVO.getMemberId(), task.getId()); -// if (memberVideo == null) { -// memberVideo = new MemberVideoEntity(); -// memberVideo.setMemberId(faceRespVO.getMemberId()); -// memberVideo.setScenicId(task.getScenicId()); -// memberVideo.setFaceId(faceId); -// memberVideo.setTemplateId(task.getTemplateId()); -// if (Integer.valueOf(1).equals(scenicConfig.getAllFree())) { -// memberVideo.setIsBuy(1); -// } else { -// memberVideo.setIsBuy(0); -// } -// memberVideo.setTaskId(task.getId()); -// VideoEntity video = videoMapper.findByTaskId(task.getId()); -// if (video != null) { -// memberVideo.setVideoId(video.getId()); -// } -// videoMapper.addRelation(memberVideo); -// new Thread(() -> { -// sendVideoGeneratedServiceNotification(list.getFirst().getId(), faceRespVO.getMemberId()); -// }).start(); -// } -// }); -// return; -// } -// } + List sourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId); VideoPieceGetter.Task task = new VideoPieceGetter.Task(); task.faceId = faceId; task.faceSampleIds = faceSampleIds; @@ -462,18 +295,20 @@ public class TaskTaskServiceImpl implements TaskService { task.memberId = face.getMemberId(); task.callback = () -> { log.info("task callback: {}", task); - boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId); - if (!canGenerate) { - log.info("task callback: 不能生成,templateId: {}", templateId); - return; + + // 只有在非强制创建时才进行模板生成判断 + if (!forceCreate) { + boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId); + if (!canGenerate) { + log.info("task callback: 不能生成,templateId: {}", templateId); + return; + } } + List videoSourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId); - if (videoSourceList == null || videoSourceList.isEmpty()) { - log.info("task callback: 没有视频源,templateId: {}", templateId); - return; - } Map> sourcesMap = videoSourceList.stream() .peek(item -> item.setUrl(item.getVideoUrl())) + .filter(item -> item.getDeviceId() != null) // 添加对 deviceId 为 null 的检查 .filter(item -> { DeviceEntity device = deviceRepository.getDevice(item.getDeviceId()); if (device == null) { @@ -482,7 +317,6 @@ public class TaskTaskServiceImpl implements TaskService { } return Integer.valueOf(1).equals(device.getStatus()); }) - .filter(item -> item.getDeviceId() != null) // 添加对 deviceId 为 null 的检查 .collect(Collectors.groupingBy(item -> item.getDeviceId().toString())); if (sourcesMap.isEmpty()) { // 主动禁止没有视频源视频生成 @@ -495,8 +329,6 @@ public class TaskTaskServiceImpl implements TaskService { // 每个value只保留第一个 value.removeIf(item -> !value.getFirst().equals(item)); }); - } else { - log.info("task callback: 模板占位符有重复,templateId: {}", templateId); } // 处理以P开头的templatePlaceHolder,添加type=2的source @@ -516,7 +348,7 @@ public class TaskTaskServiceImpl implements TaskService { return Integer.valueOf(1).equals(device.getStatus()); }) .collect(Collectors.groupingBy(item -> Strings.concat("P", item.getDeviceId().toString()))); - + // 合并到现有的sourcesMap中 imageSourceMap.forEach((key, value) -> { sourcesMap.merge(key, value, (existing, replacement) -> { @@ -588,11 +420,14 @@ public class TaskTaskServiceImpl implements TaskService { } } videoMapper.addRelation(memberVideoEntity); - // 任务生成了,需要更新切割任务状态 - taskStatusBiz.setFaceCutStatus(faceId, 2); + + // 只有在非强制创建时才更新切割任务状态 + if (!forceCreate) { + // 任务生成了,需要更新切割任务状态 + taskStatusBiz.setFaceCutStatus(faceId, 2); + } }; - if (faceSampleIds.isEmpty()) { - // 没有人脸样本 + if (!sourceList.isEmpty()) { task.callback.onInvoke(); } else { VideoPieceGetter.addTask(task);