opt: 把 LMS/WMS 重复的执行逻辑下沉到 starter

This commit is contained in:
2026-07-23 16:05:51 +08:00
parent 7972122ea1
commit 65fb53fc00
11 changed files with 266 additions and 110 deletions

View File

@@ -0,0 +1,115 @@
package cn.code.nl.framework.execute.biz.api;
import cn.code.nl.framework.common.exception.ServiceException;
import cn.code.nl.framework.common.pojo.CommonResult;
import cn.code.nl.framework.execute.biz.dto.TaskStatusCallApiReqDTO;
import cn.code.nl.framework.execute.biz.vo.AcsApplyActionRespVO;
import cn.code.nl.framework.execute.core.AbstractTask;
import cn.code.nl.framework.execute.core.TaskFactory;
import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO;
import jakarta.annotation.Resource;
/**
* 任务通用 API 公共实现
*
* @author liyongde
*/
public abstract class AbstractTaskCommonApiImpl implements TaskCommonApi {
/**
* 任务处理器工厂
*/
@Resource
private TaskFactory taskFactory;
/**
* 处理取货完成
*/
@Override
public CommonResult<AcsApplyActionRespVO> doHandlePicked(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return execute(taskStatusCallApiReqDTO, (task, taskExecuteDTO) -> {
task.doHandlePicked(taskExecuteDTO);
return null;
});
}
/**
* 处理二次请求
*/
@Override
public CommonResult<AcsApplyActionRespVO> doHandleApplyAgain(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return execute(taskStatusCallApiReqDTO, AbstractTask::againApply);
}
/**
* 处理请求放货
*/
@Override
public CommonResult<AcsApplyActionRespVO> doHandleRequestRelease(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return execute(taskStatusCallApiReqDTO, AbstractTask::requestPutAway);
}
/**
* 处理请求取货
*/
@Override
public CommonResult<AcsApplyActionRespVO> doHandleRequestPick(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return execute(taskStatusCallApiReqDTO, AbstractTask::requestPickGoods);
}
/**
* 处理请求离开
*/
@Override
public CommonResult<AcsApplyActionRespVO> doHandleRequestLeave(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return execute(taskStatusCallApiReqDTO, AbstractTask::requestOut);
}
/**
* 处理请求进入
*/
@Override
public CommonResult<AcsApplyActionRespVO> doHandleRequestEnter(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return execute(taskStatusCallApiReqDTO, AbstractTask::requestIn);
}
/**
* 根据 handleCode 路由到具体任务处理器
*/
private CommonResult<AcsApplyActionRespVO> execute(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO,
TaskActionInvoker taskActionInvoker) {
AbstractTask task = taskFactory.getTask(taskStatusCallApiReqDTO.getHandleCode());
if (task == null) {
throw new ServiceException(500, "未找到任务处理器:" + taskStatusCallApiReqDTO.getHandleCode());
}
Object data = taskActionInvoker.invoke(task, buildTaskExecuteDTO(taskStatusCallApiReqDTO));
AcsApplyActionRespVO respVO = new AcsApplyActionRespVO();
respVO.setTaskId(taskStatusCallApiReqDTO.getTaskId());
respVO.setTaskCode(taskStatusCallApiReqDTO.getTaskCode());
respVO.setData(data);
return CommonResult.success(respVO);
}
/**
* 构建任务执行参数
*/
private TaskExecuteDTO buildTaskExecuteDTO(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
return TaskExecuteDTO.builder()
.taskId(taskStatusCallApiReqDTO.getTaskId())
.payload(taskStatusCallApiReqDTO.getPayload())
.build();
}
/**
* 任务动作调用器
*/
@FunctionalInterface
private interface TaskActionInvoker {
/**
* 调用任务动作
*/
Object invoke(AbstractTask task, TaskExecuteDTO taskExecuteDTO);
}
}

View File

@@ -4,8 +4,8 @@ import cn.code.nl.framework.common.pojo.CommonResult;
import cn.code.nl.framework.execute.biz.dto.TaskStatusCallApiReqDTO;
import cn.code.nl.framework.execute.biz.vo.AcsApplyActionRespVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
*
@@ -16,25 +16,25 @@ public interface TaskCommonApi {
@Operation(summary = "请求取货")
@PostMapping("/do-handle-picked")
CommonResult<AcsApplyActionRespVO> doHandlePicked(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
CommonResult<AcsApplyActionRespVO> doHandlePicked(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
@Operation(summary = "二次请求")
@PostMapping("/do-handle-apply-again")
CommonResult<AcsApplyActionRespVO> doHandleApplyAgain(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
CommonResult<AcsApplyActionRespVO> doHandleApplyAgain(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
@Operation(summary = "处理请求放货")
@PostMapping("/do-handle-request-release")
CommonResult<AcsApplyActionRespVO> doHandleRequestRelease(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
CommonResult<AcsApplyActionRespVO> doHandleRequestRelease(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
@Operation(summary = "处理请求取货")
@PostMapping("/do-handle-request-pick")
CommonResult<AcsApplyActionRespVO> doHandleRequestPick(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
CommonResult<AcsApplyActionRespVO> doHandleRequestPick(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
@Operation(summary = "处理请求离开")
@PostMapping("/do-handle-request-leave")
CommonResult<AcsApplyActionRespVO> doHandleRequestLeave(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
CommonResult<AcsApplyActionRespVO> doHandleRequestLeave(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
@Operation(summary = "处理请求进入")
@PostMapping("/do-handle-request-enter")
CommonResult<AcsApplyActionRespVO> doHandleRequestEnter(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
CommonResult<AcsApplyActionRespVO> doHandleRequestEnter(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
}

View File

@@ -11,7 +11,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
* @Author: liyongde
* @Date: 2026/7/15 14:39
*/
@FeignClient(name = RpcConstants.LMS_NAME, path = "/lms", primary = false) // TODO 芋艿fallbackFactory =
@FeignClient(name = RpcConstants.LMS_NAME, path = RpcConstants.RPC_API_PREFIX + "/lms", primary = false) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - lms任务")
public interface LmsTaskCommonApi extends TaskCommonApi {
}

View File

@@ -11,7 +11,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
* @Author: liyongde
* @Date: 2026/7/15 14:48
*/
@FeignClient(name = RpcConstants.WMS_NAME, path = "/wms", primary = false) // TODO 芋艿fallbackFactory =
@FeignClient(name = RpcConstants.WMS_NAME, path = RpcConstants.RPC_API_PREFIX + "/wms", primary = false) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - wms任务")
public interface WmsTaskCommonApi extends TaskCommonApi {
}

View File

@@ -1,6 +1,5 @@
package cn.code.nl.framework.execute.biz.vo;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
/**
@@ -25,5 +24,5 @@ public class AcsApplyActionRespVO {
/**
* 数据
*/
private JSONObject data;
private Object data;
}

View File

@@ -2,7 +2,10 @@ package cn.code.nl.framework.execute.core.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
@@ -12,6 +15,9 @@ import java.util.Map;
* @Date: 2026/7/16 14:57
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaskExecuteDTO {
@Schema(description = "任务id")