feat:acs交互接口定义

This commit is contained in:
2026-07-30 10:15:05 +08:00
parent 0f29c81596
commit c89590f76f
10 changed files with 243 additions and 77 deletions

View File

@@ -8,9 +8,9 @@ package cn.code.nl.module.task.enums;
public interface AcsApiConstants {
/** 下发任务 */
String ACS_TASK_API = "/acs-api/wms/issue-task";
String ACS_TASK_API = "/acs-api/wms-to-acs/issue-task";
/** 检测任务 */
String ACS_OPERATE_CHECK_API = "/acs-api/wms/check-enable-operate";
String ACS_OPERATE_CHECK_API = "/acs-api/wms-to-acs/check-enable-operate";
}

View File

@@ -1,15 +1,14 @@
package cn.code.nl.module.task.job.dto;
import cn.code.nl.framework.common.pojo.AcsBaseRespDTO;
import lombok.Data;
import java.util.List;
/**
* ACS 任务下发响应
* ACS 任务下发 data 响应
*/
@Data
public class AcsIssueResultRespDTO extends AcsBaseRespDTO {
public class AcsIssueResultRespDTO {
/**
* 下发失败的任务

View File

@@ -1,12 +1,13 @@
package cn.code.nl.module.task.job.dto;
import cn.code.nl.framework.common.pojo.AcsBaseReqDTO;
import lombok.Data;
/**
* ACS 任务操作校验请求
*/
@Data
public class AcsOperateCheckReqDTO {
public class AcsOperateCheckReqDTO extends AcsBaseReqDTO {
/**
* 任务标识

View File

@@ -1,29 +1,18 @@
package cn.code.nl.module.task.job.dto;
import cn.code.nl.framework.common.pojo.AcsBaseRespDTO;
import lombok.Data;
/**
* ACS 任务操作校验响应
* ACS 任务操作校验 data 响应
*/
@Data
public class AcsOperateCheckRespDTO extends AcsBaseRespDTO {
public class AcsOperateCheckRespDTO {
/**
* 是否允许操作
*/
private Boolean enableOperate;
/**
* 是否允许操作,兼容 ACS 字段
*/
private Boolean canOperate;
/**
* 是否允许操作,兼容通用 data 字段
*/
private Boolean data;
/**
* 不允许操作的原因
*/

View File

@@ -1,6 +1,7 @@
package cn.code.nl.module.task.manage;
import cn.code.nl.framework.common.exception.ServiceException;
import cn.code.nl.framework.common.pojo.AcsCommonResult;
import cn.code.nl.framework.common.pojo.CommonResult;
import cn.code.nl.framework.common.util.json.JsonUtils;
import cn.code.nl.framework.execute.util.http.AcsUtil;
@@ -74,7 +75,8 @@ public class TransportTaskIssueManager {
String requestJson = JsonUtils.toJsonString(acsTasks);
try {
String serverAddress = getAcsServerAddress(task.getProductArea());
AcsIssueResultRespDTO result = AcsUtil.post(serverAddress, ACS_TASK_API, acsTasks, AcsIssueResultRespDTO.class);
AcsCommonResult<AcsIssueResultRespDTO> result = AcsUtil.post(serverAddress, ACS_TASK_API, acsTasks,
AcsIssueResultRespDTO.class);
handleSingleIssueResult(task, result);
} catch (ServiceException ex) {
throw ex;
@@ -95,7 +97,8 @@ public class TransportTaskIssueManager {
String requestJson = JsonUtils.toJsonString(acsTasks);
try {
String serverAddress = getAcsServerAddress(productArea);
AcsIssueResultRespDTO result = AcsUtil.post(serverAddress, ACS_TASK_API, acsTasks, AcsIssueResultRespDTO.class);
AcsCommonResult<AcsIssueResultRespDTO> result = AcsUtil.post(serverAddress, ACS_TASK_API, acsTasks,
AcsIssueResultRespDTO.class);
handleIssueResult(tasks, result);
} catch (Exception ex) {
log.error("自动下发任务失败productArea={}tasks={}", productArea, requestJson, ex);
@@ -125,20 +128,18 @@ public class TransportTaskIssueManager {
* @param tasks 本次下发任务
* @param result ACS 响应
*/
private void handleIssueResult(List<TransportTaskDO> tasks, AcsIssueResultRespDTO result) {
private void handleIssueResult(List<TransportTaskDO> tasks, AcsCommonResult<AcsIssueResultRespDTO> result) {
if (result == null) {
tasks.forEach(task -> updateIssueFailed(task.getTaskId(), "ACS 返回为空", null));
return;
}
String resultJson = JsonUtils.toJsonString(result);
List<AcsIssueResultRespDTO.FailedTask> failedTasks = result.getFailedTasks() == null
? Collections.emptyList()
: result.getFailedTasks();
if (Boolean.FALSE.equals(result.getSuccess()) && CollUtil.isEmpty(failedTasks)) {
String errorMessage = StrUtil.blankToDefault(result.getMsg(), "ACS 下发失败");
if (!AcsCommonResult.isSuccess(result.getCode())) {
String errorMessage = StrUtil.blankToDefault(result.getMessage(), "ACS 下发失败");
tasks.forEach(task -> updateIssueFailed(task.getTaskId(), errorMessage, resultJson));
return;
}
List<AcsIssueResultRespDTO.FailedTask> failedTasks = getFailedTasks(result);
Map<Long, AcsIssueResultRespDTO.FailedTask> failedTaskMap = failedTasks.stream()
.filter(failedTask -> failedTask.getTaskId() != null)
.collect(Collectors.toMap(AcsIssueResultRespDTO.FailedTask::getTaskId, Function.identity(), (first, second) -> first));
@@ -158,21 +159,34 @@ public class TransportTaskIssueManager {
* @param task 本次下发任务
* @param result ACS 响应
*/
private void handleSingleIssueResult(TransportTaskDO task, AcsIssueResultRespDTO result) {
private void handleSingleIssueResult(TransportTaskDO task, AcsCommonResult<AcsIssueResultRespDTO> result) {
if (result == null) {
throw exception(TRANSPORT_TASK_ISSUE_FAILED, "ACS 返回为空");
}
String resultJson = JsonUtils.toJsonString(result);
if (Boolean.TRUE.equals(result.getSuccess())) {
if (!AcsCommonResult.isSuccess(result.getCode())) {
throw exception(TRANSPORT_TASK_ISSUE_FAILED, StrUtil.blankToDefault(result.getMessage(), "ACS 下发失败"));
}
List<AcsIssueResultRespDTO.FailedTask> failedTasks = getFailedTasks(result);
if (CollUtil.isEmpty(failedTasks)) {
transportTaskMapper.updateIssueResult(task.getTaskId(), TransportTaskStatusEnum.ISSUED.getCode(), resultJson, null);
return;
}
String errorMessage = CollUtil.isNotEmpty(result.getFailedTasks())
? result.getFailedTasks().get(0).getErrorMessage()
: result.getMsg();
String errorMessage = failedTasks.get(0).getErrorMessage();
throw exception(TRANSPORT_TASK_ISSUE_FAILED, StrUtil.blankToDefault(errorMessage, "ACS 下发失败"));
}
/**
* 获取下发失败任务
*/
private List<AcsIssueResultRespDTO.FailedTask> getFailedTasks(AcsCommonResult<AcsIssueResultRespDTO> result) {
AcsIssueResultRespDTO data = result.getData();
if (data == null || data.getFailedTasks() == null) {
return Collections.emptyList();
}
return data.getFailedTasks();
}
/**
* 更新任务为下发失败
*

View File

@@ -1,6 +1,7 @@
package cn.code.nl.module.task.manage;
import cn.code.nl.framework.common.exception.ServiceException;
import cn.code.nl.framework.common.pojo.AcsCommonResult;
import cn.code.nl.framework.common.pojo.CommonResult;
import cn.code.nl.framework.common.util.json.JsonUtils;
import cn.code.nl.framework.execute.util.http.AcsUtil;
@@ -48,7 +49,7 @@ public class TransportTaskOperateCheckManager {
}
String serverAddress = getAcsServerAddress(task.getProductArea());
AcsOperateCheckReqDTO reqDTO = buildReqDTO(task, type);
AcsOperateCheckRespDTO result;
AcsCommonResult<AcsOperateCheckRespDTO> result;
try {
result = AcsUtil.post(serverAddress, ACS_OPERATE_CHECK_API, reqDTO, AcsOperateCheckRespDTO.class);
} catch (ServiceException ex) {
@@ -103,15 +104,23 @@ public class TransportTaskOperateCheckManager {
/**
* 处理 ACS 操作校验结果
*/
private void handleCheckResult(AcsOperateCheckReqDTO reqDTO, AcsOperateCheckRespDTO result) {
private void handleCheckResult(AcsOperateCheckReqDTO reqDTO, AcsCommonResult<AcsOperateCheckRespDTO> result) {
if (result == null) {
throw exception(TRANSPORT_TASK_ACS_OPERATE_CHECK_RESULT_EMPTY);
}
Boolean enableOperate = getEnableOperate(result);
if (!AcsCommonResult.isSuccess(result.getCode())) {
log.warn("ACS 操作校验失败reqDTO={}result={}", JsonUtils.toJsonString(reqDTO), JsonUtils.toJsonString(result));
throw exception(TRANSPORT_TASK_ACS_OPERATE_CHECK_FAILED);
}
AcsOperateCheckRespDTO data = result.getData();
if (data == null) {
throw exception(TRANSPORT_TASK_ACS_OPERATE_CHECK_RESULT_EMPTY);
}
Boolean enableOperate = data.getEnableOperate();
if (Boolean.TRUE.equals(enableOperate)) {
return;
}
String message = getMessage(result);
String message = getMessage(result, data);
log.warn("ACS 拒绝 PC 端任务操作reqDTO={}result={}",
JsonUtils.toJsonString(reqDTO), JsonUtils.toJsonString(result));
throw exception(TRANSPORT_TASK_ACS_OPERATE_NOT_ALLOW, message);
@@ -120,27 +129,11 @@ public class TransportTaskOperateCheckManager {
/**
* 获取 ACS 是否允许操作
*/
private Boolean getEnableOperate(AcsOperateCheckRespDTO result) {
if (result.getEnableOperate() != null) {
return result.getEnableOperate();
private String getMessage(AcsCommonResult<AcsOperateCheckRespDTO> result, AcsOperateCheckRespDTO data) {
if (StrUtil.isNotBlank(data.getMessage())) {
return data.getMessage();
}
if (result.getCanOperate() != null) {
return result.getCanOperate();
}
if (result.getData() != null) {
return result.getData();
}
return result.getSuccess();
}
/**
* 获取 ACS 拒绝原因
*/
private String getMessage(AcsOperateCheckRespDTO result) {
if (StrUtil.isNotBlank(result.getMessage())) {
return result.getMessage();
}
return StrUtil.blankToDefault(result.getMsg(), "ACS 不允许执行该操作");
return StrUtil.blankToDefault(result.getMessage(), "ACS 不允许执行该操作");
}
}