补充时间规范并修复非队列任务状态判断
This commit is contained in:
@@ -31,6 +31,9 @@ public class ReservationTaskAvailabilityResolver {
|
||||
* 计算任务可处理状态。FAILED 和 COMPLETED 视为前置任务结束,不阻塞后续任务。
|
||||
*/
|
||||
public ReservationTaskAvailabilityResult calculateAvailability(ReservationTaskSnapshot task) {
|
||||
if (!Boolean.TRUE.equals(task.queueParticipation())) {
|
||||
return calculateAvailability(task, null);
|
||||
}
|
||||
ReservationTaskSnapshot blockingTask = workflowRepository
|
||||
.findQueueTasksBefore(task.hotelId(), task.orderId(), task.executionOrder())
|
||||
.stream()
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package cn.nianxx.thhotel.workflows.reservation.service.impl;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import cn.nianxx.thhotel.workflows.reservation.common.dto.ReservationTaskSnapshot;
|
||||
import cn.nianxx.thhotel.workflows.reservation.common.enums.ReservationTaskStatus;
|
||||
import cn.nianxx.thhotel.workflows.reservation.common.result.ReservationTaskAvailabilityResult;
|
||||
import cn.nianxx.thhotel.workflows.reservation.repository.ReservationAiWorkflowRepository;
|
||||
import java.util.List;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ReservationTaskAvailabilityResolverTest {
|
||||
|
||||
@Test
|
||||
void shouldReturnReadOnlyForNonQueueTaskWithoutQueryingPreviousTasks() {
|
||||
ReservationAiWorkflowRepository workflowRepository = mock(ReservationAiWorkflowRepository.class);
|
||||
when(workflowRepository.findQueueTasksBefore(anyString(), anyLong(), nullable(Integer.class)))
|
||||
.thenReturn(List.of());
|
||||
ReservationTaskAvailabilityResolver resolver = new ReservationTaskAvailabilityResolver(workflowRepository);
|
||||
ReservationTaskSnapshot nonQueueTask = task(false, null, ReservationTaskStatus.PENDING_CONFIRM.name());
|
||||
|
||||
ReservationTaskAvailabilityResult result = resolver.calculateAvailability(nonQueueTask);
|
||||
|
||||
assertThat(result.blocked()).isFalse();
|
||||
assertThat(result.readOnly()).isTrue();
|
||||
assertThat(result.editable()).isFalse();
|
||||
assertThat(result.confirmable()).isFalse();
|
||||
assertThat(result.executable()).isFalse();
|
||||
verify(workflowRepository, never()).findQueueTasksBefore(anyString(), anyLong(), nullable(Integer.class));
|
||||
}
|
||||
|
||||
private ReservationTaskSnapshot task(Boolean queueParticipation, Integer executionOrder, String taskStatus) {
|
||||
return new ReservationTaskSnapshot(
|
||||
930000000000001001L,
|
||||
"HOTEL-TEST",
|
||||
930000000000001101L,
|
||||
930000000000001201L,
|
||||
930000000000001301L,
|
||||
"message_notification",
|
||||
"Message Notification",
|
||||
"MESSAGE_NOTIFICATION",
|
||||
"MESSAGE_NOTIFICATION",
|
||||
"message_notification",
|
||||
taskStatus,
|
||||
queueParticipation,
|
||||
executionOrder,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
null);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user