refactor:PC 下发任务

This commit is contained in:
2026-07-24 16:36:00 +08:00
parent 62454c77c1
commit ed0b18a4af
7 changed files with 34 additions and 42 deletions

View File

@@ -15,6 +15,8 @@ public enum TaskOperationTypeEnum {
EXECUTING("EXECUTING", "执行中", true, false), EXECUTING("EXECUTING", "执行中", true, false),
ISSUE("ISSUE", "下发任务", false, true),
FINISHED("FINISHED", "完成任务", true, true), FINISHED("FINISHED", "完成任务", true, true),
CANCELLED("CANCELLED", "取消任务", true, true), CANCELLED("CANCELLED", "取消任务", true, true),

View File

@@ -54,22 +54,13 @@ public class TransportTaskController {
} }
@PostMapping("/operate") @PostMapping("/operate")
@Operation(summary = "PC 端操作搬运任务(完成/取消/强制完成)") @Operation(summary = "PC 端操作搬运任务(下发/完成/取消/强制完成)")
@PreAuthorize("@ss.hasPermission('task:transport-task:operate')") @PreAuthorize("@ss.hasPermission('task:transport-task:operate')")
public CommonResult<Boolean> operateTransportTask(@Valid @RequestBody TransportTaskOperateReqVO reqVO) { public CommonResult<Boolean> operateTransportTask(@Valid @RequestBody TransportTaskOperateReqVO reqVO) {
transportTaskService.operateTransportTask(reqVO); transportTaskService.operateTransportTask(reqVO);
return success(true); return success(true);
} }
@PostMapping("/issue")
@Operation(summary = "PC 端下发搬运任务到 ACS")
@Parameter(name = "taskId", description = "任务ID", required = true)
@PreAuthorize("@ss.hasPermission('task:transport-task:issue')")
public CommonResult<Boolean> issueTransportTask(@RequestParam("taskId") Long taskId) {
transportTaskService.issueTransportTask(taskId);
return success(true);
}
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除搬运任务") @Operation(summary = "删除搬运任务")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)

View File

@@ -19,7 +19,7 @@ public class TransportTaskOperateReqVO {
@NotNull(message = "任务ID不能为空") @NotNull(message = "任务ID不能为空")
private Long taskId; private Long taskId;
@Schema(description = "操作类型FINISHED/CANCELLED/FORCE-FINISH", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "操作类型:ISSUE/FINISHED/CANCELLED/FORCE-FINISH", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "操作类型不能为空") @NotEmpty(message = "操作类型不能为空")
private String operationType; private String operationType;
} }

View File

@@ -22,9 +22,13 @@ import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.transaction.support.TransactionSynchronizationManager;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_STATUS_NOT_ALLOW;
import static cn.code.nl.module.task.framework.common.util.TaskUtil.isAllowedFrom; import static cn.code.nl.module.task.framework.common.util.TaskUtil.isAllowedFrom;
/** /**
@@ -40,6 +44,9 @@ public class TransportTaskOperationManager {
@Resource @Resource
private TaskEventProducer taskEventProducer; private TaskEventProducer taskEventProducer;
@Resource
private TransportTaskIssueManager transportTaskIssueManager;
@Resource @Resource
private RedissonClient redissonClient; private RedissonClient redissonClient;
@@ -53,6 +60,7 @@ public class TransportTaskOperationManager {
@PostConstruct @PostConstruct
public void initOperationHandlers() { public void initOperationHandlers() {
operationHandlers.put(TaskOperationTypeEnum.EXECUTING, this::handleExecuting); operationHandlers.put(TaskOperationTypeEnum.EXECUTING, this::handleExecuting);
operationHandlers.put(TaskOperationTypeEnum.ISSUE, (task, reqDTO) -> handleIssue(task));
operationHandlers.put(TaskOperationTypeEnum.FINISHED, this::handleFinished); operationHandlers.put(TaskOperationTypeEnum.FINISHED, this::handleFinished);
operationHandlers.put(TaskOperationTypeEnum.CANCELLED, this::handleCancelled); operationHandlers.put(TaskOperationTypeEnum.CANCELLED, this::handleCancelled);
operationHandlers.put(TaskOperationTypeEnum.FORCE_FINISH, (task, reqDTO) -> handleForceFinish(task)); operationHandlers.put(TaskOperationTypeEnum.FORCE_FINISH, (task, reqDTO) -> handleForceFinish(task));
@@ -72,6 +80,9 @@ public class TransportTaskOperationManager {
} }
handler.accept(task, reqDTO); handler.accept(task, reqDTO);
} catch (Exception ex) { } catch (Exception ex) {
if (ex instanceof ServiceException serviceException) {
throw serviceException;
}
log.error("[messageResend][执行异常][lockKey={}]", task.getTaskId(), ex); log.error("[messageResend][执行异常][lockKey={}]", task.getTaskId(), ex);
throw new ServiceException(500, ex.getMessage()); throw new ServiceException(500, ex.getMessage());
} finally { } finally {
@@ -84,6 +95,19 @@ public class TransportTaskOperationManager {
} }
} }
/**
* 处理下发任务
*/
private void handleIssue(TransportTaskDO task) {
if ("1".equals(task.getIsAutoIssue())) {
throw exception(TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL);
}
if (!TransportTaskStatusEnum.READY.getCode().equals(task.getTaskStatus())) {
throw exception(TRANSPORT_TASK_STATUS_NOT_ALLOW);
}
transportTaskIssueManager.issueTasks(List.of(task));
}
/** /**
* 处理执行中 * 处理执行中
*/ */

View File

@@ -31,10 +31,8 @@ import java.util.List;
import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_ALREADY_FINAL; import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_ALREADY_FINAL;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_NOT_EXISTS; import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_NOT_EXISTS;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_OPERATION_NOT_SUPPORTED; import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_OPERATION_NOT_SUPPORTED;
import static cn.code.nl.module.task.enums.ErrorCodeConstants.TRANSPORT_TASK_STATUS_NOT_ALLOW;
/** /**
* 搬运任务 Service 实现类 * 搬运任务 Service 实现类
@@ -170,10 +168,10 @@ public class TransportTaskServiceImpl implements TransportTaskService {
if (task == null) { if (task == null) {
throw exception(TRANSPORT_TASK_NOT_EXISTS); throw exception(TRANSPORT_TASK_NOT_EXISTS);
} }
if ("1".equals(task.getIsAutoIssue())) { AcsFeedbackReqDTO reqDTO = new AcsFeedbackReqDTO();
throw exception(TRANSPORT_TASK_AUTO_ISSUE_NOT_ALLOW_MANUAL); reqDTO.setTaskId(task.getTaskId());
} reqDTO.setStatus(TaskOperationTypeEnum.ISSUE.getCode());
transportTaskIssueManager.issueTasks(List.of(task)); transportTaskOperationManager.dispatchOperation(task, TaskOperationTypeEnum.ISSUE, reqDTO);
} }
@Override @Override

View File

@@ -92,9 +92,3 @@ export function operateTransportTask(data: {
}) { }) {
return requestClient.post('/task/transport-task/operate', data); return requestClient.post('/task/transport-task/operate', data);
} }
/** PC 端下发搬运任务到 ACS */
export function issueTransportTask(taskId: number | string) {
return requestClient.post(`/task/transport-task/issue?taskId=${taskId}`);
}

View File

@@ -15,7 +15,6 @@ import {
deleteTransportTaskList, deleteTransportTaskList,
exportTransportTask, exportTransportTask,
getTransportTaskPage, getTransportTaskPage,
issueTransportTask,
operateTransportTask, operateTransportTask,
} from '#/api/task/transporttask'; } from '#/api/task/transporttask';
import { $t } from '#/locales'; import { $t } from '#/locales';
@@ -64,22 +63,6 @@ async function handleOperate(
} }
} }
/** PC 端下发搬运任务到 ACS */
async function handleIssue(row: TaskTransportTaskApi.TransportTask) {
await confirm(`确认要下发【${row.taskCode}】到 ACS 吗?`);
const hideLoading = message.loading({
content: '正在下发...',
duration: 0,
});
try {
await issueTransportTask(row.taskId!);
message.success('下发成功');
handleRefresh();
} finally {
hideLoading();
}
}
/** 删除搬运任务 */ /** 删除搬运任务 */
async function handleDelete(row: TaskTransportTaskApi.TransportTask) { async function handleDelete(row: TaskTransportTaskApi.TransportTask) {
const hideLoading = message.loading({ const hideLoading = message.loading({
@@ -196,9 +179,9 @@ const [Grid, gridApi] = useVbenVxeGrid({
label: '下发', label: '下发',
type: 'link', type: 'link',
icon: ACTION_ICON.SEND, icon: ACTION_ICON.SEND,
auth: ['task:transport-task:issue'], auth: ['task:transport-task:operate'],
disabled: row.taskStatus !== '40', disabled: row.taskStatus !== '40',
onClick: handleIssue.bind(null, row), onClick: handleOperate.bind(null, row, 'ISSUE', '下发任务'),
}, },
{ {
label: '完成', label: '完成',