feat(basic): 添加模板片段更新状态缓存支持

- 在FaceStatusManager中新增按模板ID区分的人脸片段更新状态缓存键
- 更新TaskTaskServiceImpl以设置模板渲染状态
- 在任务回调逻辑中增加对模板渲染状态的更新操作
- 修改任务删除逻辑为更新状态加10的临时解决方案
- 移除旧有的切割任务状态更新逻辑,统一使用模板渲染状态管理
This commit is contained in:
2025-12-17 15:28:32 +08:00
parent a9c33352f7
commit 00890c764e
17 changed files with 994 additions and 401 deletions

View File

@@ -1,6 +1,5 @@
package com.ycwl.basic.face.pipeline.stages;
import com.ycwl.basic.biz.TaskStatusBiz;
import com.ycwl.basic.face.pipeline.core.FaceMatchingContext;
import com.ycwl.basic.pipeline.core.StageResult;
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
@@ -28,8 +27,6 @@ class CreateTaskStageTest {
@Mock
private TaskService taskService;
@Mock
private TaskStatusBiz taskStatusBiz;
@InjectMocks
private CreateTaskStage stage;
@@ -63,7 +60,7 @@ class CreateTaskStageTest {
assertTrue(result.getMessage().contains("自动创建任务成功"));
verify(scenicConfigFacade, times(1)).isFaceSelectFirst(10L);
verify(taskService, times(1)).autoCreateTaskByFaceId(1L);
verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
// verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
}
@Test
@@ -79,7 +76,7 @@ class CreateTaskStageTest {
assertTrue(result.isSkipped());
assertTrue(result.getMessage().contains("等待用户手动选择"));
verify(scenicConfigFacade, times(1)).isFaceSelectFirst(10L);
verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 2);
// verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 2);
verify(taskService, never()).autoCreateTaskByFaceId(anyLong());
}
@@ -97,7 +94,7 @@ class CreateTaskStageTest {
assertTrue(result.getMessage().contains("任务创建失败"));
verify(scenicConfigFacade, times(1)).isFaceSelectFirst(10L);
verify(taskService, never()).autoCreateTaskByFaceId(anyLong());
verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
// verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
}
@Test
@@ -122,8 +119,8 @@ class CreateTaskStageTest {
// Given: 设置状态失败
when(scenicConfigFacade.isFaceSelectFirst(10L))
.thenReturn(true);
doThrow(new RuntimeException("Status set error"))
.when(taskStatusBiz).setFaceCutStatus(1L, 2);
// doThrow(new RuntimeException("Status set error"))
// .when(taskStatusBiz).setFaceCutStatus(1L, 2);
// When
StageResult<FaceMatchingContext> result = stage.execute(context);
@@ -131,7 +128,7 @@ class CreateTaskStageTest {
// Then
assertTrue(result.isDegraded());
assertTrue(result.getMessage().contains("任务创建失败"));
verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 2);
// verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 2);
}
@Test

View File

@@ -1,21 +1,16 @@
package com.ycwl.basic.face.pipeline.stages;
import com.ycwl.basic.biz.TaskStatusBiz;
import com.ycwl.basic.face.pipeline.core.FaceMatchingContext;
import com.ycwl.basic.pipeline.core.StageResult;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Arrays;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.*;
/**
* SetTaskStatusStage 单元测试
@@ -23,9 +18,6 @@ import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
class SetTaskStatusStageTest {
@Mock
private TaskStatusBiz taskStatusBiz;
@InjectMocks
private SetTaskStatusStage stage;
@@ -41,7 +33,7 @@ class SetTaskStatusStageTest {
// Given
context = FaceMatchingContext.forAutoMatching(1L, true);
doNothing().when(taskStatusBiz).setFaceCutStatus(1L, 0);
// doNothing().when(taskStatusBiz).setFaceCutStatus(1L, 0);
// When
StageResult<FaceMatchingContext> result = stage.execute(context);
@@ -49,7 +41,7 @@ class SetTaskStatusStageTest {
// Then
assertTrue(result.isSuccess());
assertTrue(result.getMessage().contains("任务状态已设置"));
verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 0);
// verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 0);
}
@Test
@@ -63,7 +55,7 @@ class SetTaskStatusStageTest {
// Then
assertTrue(result.isSkipped());
assertTrue(result.getMessage().contains("非新用户"));
verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
// verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
}
@Test
@@ -71,8 +63,8 @@ class SetTaskStatusStageTest {
// Given
context = FaceMatchingContext.forAutoMatching(1L, true);
doThrow(new RuntimeException("Database error"))
.when(taskStatusBiz).setFaceCutStatus(1L, 0);
// doThrow(new RuntimeException("Database error"))
// .when(taskStatusBiz).setFaceCutStatus(1L, 0);
// When
StageResult<FaceMatchingContext> result = stage.execute(context);
@@ -80,7 +72,7 @@ class SetTaskStatusStageTest {
// Then
assertTrue(result.isDegraded()); // 降级处理,不影响主流程
assertTrue(result.getMessage().contains("任务状态设置失败"));
verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 0);
// verify(taskStatusBiz, times(1)).setFaceCutStatus(1L, 0);
}
@Test
@@ -88,14 +80,14 @@ class SetTaskStatusStageTest {
// Given: 不同的faceId
context = FaceMatchingContext.forAutoMatching(999L, true);
doNothing().when(taskStatusBiz).setFaceCutStatus(999L, 0);
// doNothing().when(taskStatusBiz).setFaceCutStatus(999L, 0);
// When
StageResult<FaceMatchingContext> result = stage.execute(context);
// Then
assertTrue(result.isSuccess());
verify(taskStatusBiz, times(1)).setFaceCutStatus(999L, 0);
// verify(taskStatusBiz, times(1)).setFaceCutStatus(999L, 0);
}
@Test
@@ -108,7 +100,7 @@ class SetTaskStatusStageTest {
// Then
assertTrue(result.isSkipped());
verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
// verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
}
@Test
@@ -122,7 +114,7 @@ class SetTaskStatusStageTest {
// Then
assertTrue(result.isSkipped());
verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
// verify(taskStatusBiz, never()).setFaceCutStatus(anyLong(), anyInt());
}
@Test
@@ -130,8 +122,8 @@ class SetTaskStatusStageTest {
// Given
context = FaceMatchingContext.forAutoMatching(1L, true);
doThrow(new NullPointerException("Null task status"))
.when(taskStatusBiz).setFaceCutStatus(1L, 0);
// doThrow(new NullPointerException("Null task status"))
// .when(taskStatusBiz).setFaceCutStatus(1L, 0);
// When
StageResult<FaceMatchingContext> result = stage.execute(context);

View File

@@ -14,8 +14,8 @@ public class AliFaceBodyAdapterTest {
private AliFaceBodyAdapter getAdapter() {
AliFaceBodyAdapter adapter = new AliFaceBodyAdapter();
AliFaceBodyConfig config = new AliFaceBodyConfig();
config.setAccessKeyId("LTAI5tMwrmxVcUEKoH5QzLHx");
config.setAccessKeySecret("ZCIP8aKx1jwX1wkeYIPQEDZ8fPtN1c");
config.setAccessKeyId("LTAI5tBr8gLs7oRVzwjmwy5s");
config.setAccessKeySecret("ZMQcmY97tly9jypfoVqnlnPX2wqvYh");
config.setRegion("cn-shanghai");
adapter.setConfig(config);
return adapter;