fix:执行计划

1.任务批量重试的逻辑添加锁进行控制。
hz_1122
李杰应 2024-12-11 19:28:32 +08:00
parent 6b3e0333be
commit 58c743a889
3 changed files with 261 additions and 239 deletions

View File

@ -74,6 +74,7 @@ import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.integration.redis.util.RedisLockRegistry;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@ -82,6 +83,7 @@ import org.springframework.web.client.RestTemplate;
import java.io.*;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -148,6 +150,9 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
@Autowired
private AttachmentFeignClient attachmentFeignClient;
@Autowired
private RedisLockRegistry redisLockRegistry;
@Value("${zmn.hostStr}")
private String hostStr;
@ -1477,6 +1482,13 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
PlanConstant.BATCH_EXECUTING_STATUS.equals(planBatch.getStatus())) {
throw new PlatformRuntimeException(ExecPlanError.BATCH_NOT_FINISH);
}
// 加个锁,当选择的任务量比较多的时候,需要时间进行处理
Lock lock = redisLockRegistry.obtain(String.format("%s%s", RedisConstant.PLAN_BATCH_RETRY_LOCK_PRE, planBatch.getId()));
if (!lock.tryLock()) {
// 获取不到锁,正在处理重试
throw new PlatformRuntimeException(ExecPlanError.BATCH_IS_DEALING_WITH_RETRY);
}
try {
logger.debug("根据批次编号[{}]查询计划信息", firstFailTask.getBatchId());
AtuPlanInfo planInfo = atuPlanInfoApiService.findByBatchId(firstFailTask.getBatchId());
if (planInfo == null) {
@ -1735,6 +1747,9 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
atuPlanInfoApiService.handlePlanDevice(planInfo.getId(), planInfo.getPriority(), planBatch.getId(),
retryDto.getHasOfflineDevice(), caseTypeMap, true);
return true;
} finally {
lock.unlock();
}
}
@Override

View File

@ -59,4 +59,9 @@ public class RedisConstant {
*/
public static final String BATCH_MESSAGE_LOCK_PRE = "BATCH_MESSAGE_LOCK_PRE";
/**
*
*/
public static final String PLAN_BATCH_RETRY_LOCK_PRE = "LOCK:PLAN:PLAN-BATCH-RETRY-LOCK-PRE:";
}

View File

@ -89,6 +89,8 @@ public enum ExecPlanError implements PlatformError {
GET_FILE_FAIL("获取文件失败"),
BATCH_IS_DEALING_WITH_RETRY("批次的任务重试正在处理中..."),
/**
*
*/