fix(task): 修复任务重复创建和空指针问题

- 在原位替换模式下设置taskParams为null,避免按参数匹配
- 添加isReuseOldTask标识判断是否复用旧任务
- 复用旧任务时执行更新操作而非新增操作
- 添加member和item空值检查,防止空指针异常
- 优化日志记录,提供更准确的操作信息
This commit is contained in:
2025-12-30 18:12:29 +08:00
parent 991a8b10e3
commit 91160a1adb

View File

@@ -402,12 +402,15 @@ public class TaskTaskServiceImpl implements TaskService {
log.info("创建任务! faceId:{},templateId:{},taskParams:{}", faceId, templateId, sourcesMap);
ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(face.getScenicId());
TaskEntity taskEntity = null;
boolean isReuseOldTask = false;
if (Integer.valueOf(0).equals(scenicConfig.getInteger("template_new_video_type"))) {
log.info("景区{}启用:templateNewVideoType:全新视频原位替换", face.getScenicId());
taskReqQuery.setTemplateId(templateId);
taskReqQuery.setTaskParams(null); // 原位替换模式下,不按taskParams匹配
List<TaskEntity> templateTaskList = taskMapper.listEntity(taskReqQuery);
if (!templateTaskList.isEmpty()) {
taskEntity = templateTaskList.getFirst();
isReuseOldTask = true;
log.info("已有旧生成的视频:{}", taskEntity);
MemberVideoEntity taskVideoRelation = videoMapper.queryRelationByMemberTask(face.getMemberId(), taskEntity.getId());
if (taskVideoRelation != null) {
@@ -428,7 +431,12 @@ public class TaskTaskServiceImpl implements TaskService {
taskEntity.setWorkerId(null);
taskEntity.setStatus(0);
taskEntity.setTaskParams(JacksonUtil.toJSONString(sourcesMap));
taskMapper.add(taskEntity);
if (isReuseOldTask) {
taskMapper.update(taskEntity);
log.info("更新旧任务! taskId:{}", taskEntity.getId());
} else {
taskMapper.add(taskEntity);
}
memberVideoEntity.setTaskId(taskEntity.getId());
} else {
log.info("重复task! faceId:{},templateId:{},taskParams:{}", faceId, templateId, sourcesMap);
@@ -590,6 +598,10 @@ public class TaskTaskServiceImpl implements TaskService {
public void sendVideoGeneratedServiceNotification(Long taskId, Long memberId) {
MemberVideoEntity item = videoMapper.queryRelationByMemberTask(memberId, taskId);
MemberRespVO member = memberMapper.getById(memberId);
if (member == null || item == null) {
log.warn("sendVideoGeneratedServiceNotification member or item is null, memberId:{}, taskId:{}", memberId, taskId);
return;
}
String openId = member.getOpenId();
MpConfigEntity scenicMp = scenicRepository.getScenicMpConfig(member.getScenicId());
if (StringUtils.isNotBlank(openId) && scenicMp != null) {