feat:单任务下发:success=false就报错误异常
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新任务为下发失败
|
||||
*
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user