feat:空载具出入库、及各模块任务类补齐

This commit is contained in:
zhouz
2026-08-04 18:59:51 +08:00
parent afb512cf6c
commit 9b0da46c0d
39 changed files with 1648 additions and 584 deletions

View File

@@ -42,6 +42,9 @@ public class TaskEventMessage {
/** 业务回调处理器编码 */
private String handleCode;
/** 触发任务状态完成时的登录用户 */
private Long operatorId;
/** 扩展数据 */
private Map<String, Object> payload;
}

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.security.core.util.SecurityFrameworkUtils;
import cn.code.nl.module.task.dal.dataobject.transporttask.TransportTaskDO;
import cn.code.nl.module.task.dal.mysql.transporttask.TransportTaskMapper;
import cn.code.nl.module.task.dto.AcsFeedbackReqDTO;
@@ -166,19 +167,13 @@ public class TransportTaskOperationManager {
* 处理取消
*/
private void handleCancelled(TransportTaskDO task, AcsFeedbackReqDTO reqDTO) {
if (!isAllowedFrom(task.getTaskStatus(), TransportTaskStatusEnum.CREATED.getCode(),
TransportTaskStatusEnum.READY.getCode(), TransportTaskStatusEnum.ISSUING.getCode(),
TransportTaskStatusEnum.ISSUED.getCode(), TransportTaskStatusEnum.EXECUTING.getCode(),
TransportTaskStatusEnum.PICKED.getCode(),
TransportTaskStatusEnum.FINISHED_CALLBACK_PENDING.getCode(),
TransportTaskStatusEnum.CANCEL_CALLBACK_PENDING.getCode())) {
log.warn("取消反馈状态校验不通过, taskId={}, currentStatus={}",
// 任务一旦进入待下发、已下发或执行中等后续状态,就不能再从 WMS 侧取消。
if (!TransportTaskStatusEnum.CREATED.getCode().equals(task.getTaskStatus())) {
log.warn("仅生成状态的任务允许取消, taskId={}, currentStatus={}",
task.getTaskId(), task.getTaskStatus());
return;
}
if (!TransportTaskStatusEnum.CANCEL_CALLBACK_PENDING.getCode().equals(task.getTaskStatus())) {
task.setTaskStatus(TransportTaskStatusEnum.CANCEL_CALLBACK_PENDING.getCode());
throw exception(TRANSPORT_TASK_STATUS_NOT_ALLOW);
}
task.setTaskStatus(TransportTaskStatusEnum.CANCEL_CALLBACK_PENDING.getCode());
task.setCallbackStatus(CallbackStatusEnum.PENDING.getCode());
transportTaskMapper.updateById(task);
@@ -221,6 +216,8 @@ public class TransportTaskOperationManager {
msg.setBizId(task.getBizId());
msg.setTaskType(task.getTaskType());
msg.setHandleCode(task.getHandleCode());
// MQ 消费线程没有 Web 登录上下文,在生产事件时捕获最后任务完成操作人。
msg.setOperatorId(SecurityFrameworkUtils.getLoginUserId());
msg.setPayload(payload);
try {

View File

@@ -53,12 +53,14 @@ public class TransportTaskCallbackServiceImpl implements TransportTaskCallbackSe
// 3. 根据结果处理
boolean success = "SUCCESS".equalsIgnoreCase(reqDTO.getResult());
boolean deleteCancelledTask = false;
if (success) {
// 根据当前状态决定目标终态
if (statusCode(TransportTaskStatusEnum.FINISHED_CALLBACK_PENDING).equals(currentStatus)) {
task.setTaskStatus(finalFinished);
} else if (statusCode(TransportTaskStatusEnum.CANCEL_CALLBACK_PENDING).equals(currentStatus)) {
task.setTaskStatus(finalCancelled);
deleteCancelledTask = true;
}
task.setCallbackStatus(CallbackStatusEnum.SUCCESS.getCode());
} else {
@@ -69,7 +71,12 @@ public class TransportTaskCallbackServiceImpl implements TransportTaskCallbackSe
? task.getCallbackRetryCount() + 1 : 1);
}
transportTaskMapper.updateById(task);
if (deleteCancelledTask) {
// WMS 已完成分配记录回退后再删除任务,避免提前删除导致取消回调无法消费。
transportTaskMapper.deleteById(task.getTaskId());
} else {
transportTaskMapper.updateById(task);
}
LogRecordContext.putVariable("ownerService", task.getOwnerService());
LogRecordContext.putVariable("taskId", task.getTaskId());
@@ -79,6 +86,6 @@ public class TransportTaskCallbackServiceImpl implements TransportTaskCallbackSe
}
private String statusCode(TransportTaskStatusEnum statusEnum) {
return String.format("%03d", statusEnum.getCode());
return statusEnum.getCode();
}
}