opt: 把 LMS/WMS 重复的执行逻辑下沉到 starter
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user