test: 补充流水标签协调器日志

This commit is contained in:
wkc
2026-03-17 14:58:35 +08:00
parent cdad9edf57
commit 4076097185
2 changed files with 66 additions and 0 deletions

View File

@@ -9,10 +9,12 @@ import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import java.util.concurrent.ConcurrentHashMap;
import lombok.extern.slf4j.Slf4j;
/**
* 项目级流水标签重算协调器
*/
@Slf4j
@Component
public class ProjectBankTagRebuildCoordinator {
@@ -33,7 +35,11 @@ public class ProjectBankTagRebuildCoordinator {
* @param operator 操作人
*/
public void submitManual(Long projectId, String modelCode, String operator) {
log.info("【流水标签】手动重算开始排队: projectId={}, modelCode={}, operator={}",
projectId, modelCode, operator);
if (isProjectRunning(projectId)) {
log.warn("【流水标签】项目已有运行中任务,拒绝手动重算: projectId={}, modelCode={}, operator={}",
projectId, modelCode, operator);
throw new ServiceException("当前项目标签正在重算中,请稍后再试");
}
@@ -49,6 +55,8 @@ public class ProjectBankTagRebuildCoordinator {
public void submitAuto(Long projectId, TriggerType triggerType) {
CcdiBankTagTask runningTask = taskMapper.selectRunningTaskByProjectId(projectId);
if (runningTask != null || runningProjects.containsKey(projectId)) {
log.warn("【流水标签】项目正在重算,已标记完成后补跑: projectId={}, runningTaskId={}, triggerType={}",
projectId, runningTask != null ? runningTask.getId() : null, triggerType);
markNeedRerun(runningTask);
return;
}
@@ -64,12 +72,15 @@ public class ProjectBankTagRebuildCoordinator {
private void executeWithLock(Long projectId, Runnable action) {
if (runningProjects.putIfAbsent(projectId, Boolean.TRUE) != null) {
log.warn("【流水标签】项目已有运行中任务,拒绝获取项目锁: projectId={}", projectId);
throw new ServiceException("当前项目标签正在重算中,请稍后再试");
}
log.info("【流水标签】获取项目重算锁成功: projectId={}", projectId);
try {
action.run();
} finally {
runningProjects.remove(projectId);
log.info("【流水标签】释放项目重算锁: projectId={}", projectId);
}
}

View File

@@ -1,5 +1,8 @@
package com.ruoyi.ccdi.project.service.impl;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
import com.ruoyi.ccdi.project.domain.entity.CcdiBankTagTask;
import com.ruoyi.ccdi.project.domain.enums.TriggerType;
import com.ruoyi.ccdi.project.mapper.CcdiBankTagTaskMapper;
@@ -9,8 +12,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.LoggerFactory;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -54,4 +59,54 @@ class ProjectBankTagRebuildCoordinatorTest {
verify(taskMapper).updateTask(any(CcdiBankTagTask.class));
verify(bankTagService, never()).rebuildProject(40L, null, "system", TriggerType.AUTO_BATCH_UPLOAD);
}
@Test
void submitManual_shouldLogRejectWhenProjectAlreadyRunning() {
CcdiBankTagTask runningTask = new CcdiBankTagTask();
runningTask.setId(1L);
runningTask.setProjectId(40L);
runningTask.setStatus("RUNNING");
when(taskMapper.selectRunningTaskByProjectId(40L)).thenReturn(runningTask);
Logger logger = (Logger) LoggerFactory.getLogger(ProjectBankTagRebuildCoordinator.class);
ListAppender<ILoggingEvent> logAppender = new ListAppender<>();
logAppender.start();
logger.addAppender(logAppender);
try {
assertThrows(ServiceException.class, () -> coordinator.submitManual(40L, null, "admin"));
assertTrue(logAppender.list.stream().map(ILoggingEvent::getFormattedMessage)
.anyMatch(message -> message.contains("拒绝手动重算")
&& message.contains("projectId=40")
&& message.contains("operator=admin")));
} finally {
logger.detachAppender(logAppender);
}
}
@Test
void submitAuto_shouldLogNeedRerunWhenProjectAlreadyRunning() {
CcdiBankTagTask runningTask = new CcdiBankTagTask();
runningTask.setId(1L);
runningTask.setProjectId(40L);
runningTask.setStatus("RUNNING");
runningTask.setNeedRerun(0);
when(taskMapper.selectRunningTaskByProjectId(40L)).thenReturn(runningTask);
Logger logger = (Logger) LoggerFactory.getLogger(ProjectBankTagRebuildCoordinator.class);
ListAppender<ILoggingEvent> logAppender = new ListAppender<>();
logAppender.start();
logger.addAppender(logAppender);
try {
coordinator.submitAuto(40L, TriggerType.AUTO_BATCH_UPLOAD);
assertTrue(logAppender.list.stream().map(ILoggingEvent::getFormattedMessage)
.anyMatch(message -> message.contains("已标记完成后补跑")
&& message.contains("projectId=40")
&& message.contains("runningTaskId=1")
&& message.contains("AUTO_BATCH_UPLOAD")));
} finally {
logger.detachAppender(logAppender);
}
}
}