feat:单任务下发:success=false就报错误异常
This commit is contained in:
@@ -39,6 +39,10 @@ public interface TransportTaskApi {
|
|||||||
@Operation(summary = "根据 taskId 下发搬运任务")
|
@Operation(summary = "根据 taskId 下发搬运任务")
|
||||||
CommonResult<Boolean> issueTransportTask(@RequestParam("taskId") Long 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")
|
@GetMapping(PREFIX + "/getTaskById")
|
||||||
@Operation(summary = "根据 taskId 查询任务")
|
@Operation(summary = "根据 taskId 查询任务")
|
||||||
CommonResult<TaskInfoDTO> getTaskById(@RequestParam("taskId") Long taskId);
|
CommonResult<TaskInfoDTO> getTaskById(@RequestParam("taskId") Long taskId);
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ public class TransportTaskApiImpl implements TransportTaskApi {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> issueTransportTaskRollBack(Long taskId) {
|
||||||
|
transportTaskService.issueTransportTaskRollBack(taskId);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonResult<TaskInfoDTO> getTaskById(Long taskId) {
|
public CommonResult<TaskInfoDTO> getTaskById(Long taskId) {
|
||||||
return success(transportTaskService.getTaskInfoById(taskId));
|
return success(transportTaskService.getTaskInfoById(taskId));
|
||||||
|
|||||||
@@ -57,6 +57,29 @@ public class TransportTaskIssueManager {
|
|||||||
taskMap.forEach(this::issueProductAreaTasks);
|
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
|
* @param taskId 任务ID
|
||||||
*/
|
*/
|
||||||
void issueTransportTask(Long taskId);
|
void issueTransportTask(Long taskId);
|
||||||
|
/**
|
||||||
|
* 根据任务ID下发搬运任务到 ACS 报错回滚
|
||||||
|
*
|
||||||
|
* @param taskId 任务ID
|
||||||
|
*/
|
||||||
|
void issueTransportTaskRollBack(Long taskId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据 taskId 查询任务全量信息(RPC 用,自动过滤逻辑删除,查不到返回 null)
|
* 根据 taskId 查询任务全量信息(RPC 用,自动过滤逻辑删除,查不到返回 null)
|
||||||
|
|||||||
@@ -184,6 +184,15 @@ public class TransportTaskServiceImpl implements TransportTaskService {
|
|||||||
transportTaskOperationManager.dispatchOperation(task, TaskOperationTypeEnum.ISSUE, reqDTO);
|
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
|
@Override
|
||||||
public TaskInfoDTO getTaskInfoById(Long taskId) {
|
public TaskInfoDTO getTaskInfoById(Long taskId) {
|
||||||
TransportTaskDO task = transportTaskMapper.selectById(taskId);
|
TransportTaskDO task = transportTaskMapper.selectById(taskId);
|
||||||
|
|||||||
Reference in New Issue
Block a user