feat:单任务下发:success=false就报错误异常

This commit is contained in:
2026-07-27 17:27:31 +08:00
parent 742d360cd4
commit 7d654ec06a
5 changed files with 79 additions and 0 deletions

View File

@@ -39,6 +39,10 @@ public interface TransportTaskApi {
@Operation(summary = "根据 taskId 下发搬运任务")
CommonResult<Boolean> issueTransportTask(@RequestParam("taskId") Long taskId);
@PostMapping(PREFIX + "/issue-rollback")
@Operation(summary = "根据 taskId 下发搬运任务可回滚")
CommonResult<Boolean> issueTransportTaskRollBack(@RequestParam("taskId") Long taskId);
@GetMapping(PREFIX + "/getTaskById")
@Operation(summary = "根据 taskId 查询任务")
CommonResult<TaskInfoDTO> getTaskById(@RequestParam("taskId") Long taskId);

View File

@@ -44,6 +44,12 @@ public class TransportTaskApiImpl implements TransportTaskApi {
return success(true);
}
@Override
public CommonResult<Boolean> issueTransportTaskRollBack(Long taskId) {
transportTaskService.issueTransportTaskRollBack(taskId);
return success(true);
}
@Override
public CommonResult<TaskInfoDTO> getTaskById(Long taskId) {
return success(transportTaskService.getTaskInfoById(taskId));

View File

@@ -57,6 +57,29 @@ public class TransportTaskIssueManager {
taskMap.forEach(this::issueProductAreaTasks);
}
/**
* 下发单个任务到 ACS失败时直接抛出异常
*
* @param task 待下发任务
*/
public void issueTask(TransportTaskDO task) {
if (StrUtil.isBlank(task.getProductArea())) {
throw new ServiceException(500, buildIssueFailedMessage("生产区域为空,无法获取 ACS 服务地址"));
}
List<AcsTaskDTO> acsTasks = List.of(AcsTaskUtil.buildAcsTaskDTO(task));
String requestJson = JsonUtils.toJsonString(acsTasks);
try {
String serverAddress = getAcsServerAddress(task.getProductArea());
AcsIssueResultRespDTO result = AcsUtil.post(serverAddress, ACS_TASK_API, acsTasks, AcsIssueResultRespDTO.class);
handleSingleIssueResult(task, result);
} catch (ServiceException ex) {
throw ex;
} catch (Exception ex) {
log.error("下发单个任务失败productArea={}tasks={}", task.getProductArea(), requestJson, ex);
throw new ServiceException(500, buildIssueFailedMessage(ex.getMessage()));
}
}
/**
* 下发单个生产区域的任务
*
@@ -125,6 +148,37 @@ public class TransportTaskIssueManager {
}
}
/**
* 处理单个任务的 ACS 下发响应
*
* @param task 本次下发任务
* @param result ACS 响应
*/
private void handleSingleIssueResult(TransportTaskDO task, AcsIssueResultRespDTO result) {
if (result == null) {
throw new ServiceException(500, buildIssueFailedMessage("ACS 返回为空"));
}
String resultJson = JsonUtils.toJsonString(result);
if (Boolean.TRUE.equals(result.getSuccess())) {
transportTaskMapper.updateIssueResult(task.getTaskId(), TransportTaskStatusEnum.ISSUED.getCode(), resultJson, null);
return;
}
String errorMessage = CollUtil.isNotEmpty(result.getFailedTasks())
? result.getFailedTasks().get(0).getErrorMessage()
: result.getMsg();
throw new ServiceException(500, buildIssueFailedMessage(StrUtil.blankToDefault(errorMessage, "ACS 下发失败")));
}
/**
* 构建单个任务下发失败提示
*
* @param reason 失败原因
* @return 失败提示
*/
private String buildIssueFailedMessage(String reason) {
return "任务下发失败,失败原因:" + reason;
}
/**
* 更新任务为下发失败
*

View File

@@ -82,6 +82,12 @@ public interface TransportTaskService {
* @param taskId 任务ID
*/
void issueTransportTask(Long taskId);
/**
* 根据任务ID下发搬运任务到 ACS 报错回滚
*
* @param taskId 任务ID
*/
void issueTransportTaskRollBack(Long taskId);
/**
* 根据 taskId 查询任务全量信息RPC 用,自动过滤逻辑删除,查不到返回 null

View File

@@ -184,6 +184,15 @@ public class TransportTaskServiceImpl implements TransportTaskService {
transportTaskOperationManager.dispatchOperation(task, TaskOperationTypeEnum.ISSUE, reqDTO);
}
@Override
public void issueTransportTaskRollBack(Long taskId) {
TransportTaskDO task = transportTaskMapper.selectById(taskId);
if (task == null) {
throw exception(TRANSPORT_TASK_NOT_EXISTS);
}
transportTaskIssueManager.issueTask(task);
}
@Override
public TaskInfoDTO getTaskInfoById(Long taskId) {
TransportTaskDO task = transportTaskMapper.selectById(taskId);