Files
huachuang/docs/superpowers/plans/2026-07-16-transport-task-api-query.md

9.4 KiB
Raw Permalink Blame History

TransportTaskApi RPC 查询接口 实现计划

面向 AI 代理的工作者: 必需子技能:使用 superpowers:subagent-driven-development推荐或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(- [ ])语法来跟踪进度。

目标: 补全 TransportTaskApi 两个 todo——根据 taskId / taskCode 查询任务,返回 TaskInfoDTO,自动过滤逻辑删除。

架构: ApiFeign GET→ ApiImpl委托→ TransportTaskService查询 + MapStruct 转换,查不到返回 null→ TransportTaskMapperselectById / selectByTaskCode@TableLogic 自动滤删)。新建 TransportTaskConvertMapStruct字段同名零配置

技术栈: Java 17 / Spring Boot / MyBatis-PlusBaseMapperX/ MapStruct 1.6.3(经 nl-common 传递依赖,无需改 pom

规格: docs/superpowers/specs/2026-07-16-transport-task-api-query-design.md

约定: 注释/日志中文;@Resource 注入;不写测试;不频繁 commit最后统一一次需用户同意


文件结构

文件 操作 职责
nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java 修改 新增两个 Feign GET 查询方法,删除两行 todo
nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/convert/transporttask/TransportTaskConvert.java 创建 DO→TaskInfoDTO MapStruct 转换
nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java 修改 新增 selectByTaskCode
nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java 修改 接口新增 getTaskInfoById / getTaskInfoByCode
nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java 修改 实现两个查询方法
nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java 修改 实现两个 Api 方法(委托 service

任务 1TransportTaskApi 新增两个查询方法

文件:

  • 修改:nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java

  • 步骤 1补充 import

在现有 import 区追加:

import cn.code.nl.module.task.dto.TaskInfoDTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
  • 步骤 2删除两行 todo替换为两个方法声明

将文件末尾的:

    // todo 根据taskId查找任务返回TaskInfoDTO、过滤删除

    // todo 根据taskCode获取任务返回TaskInfoDTO、过滤删除

替换为:

    @GetMapping(PREFIX + "/getTaskById")
    @Operation(summary = "根据 taskId 查询任务LMS/WMS 调用)")
    CommonResult<TaskInfoDTO> getTaskById(@RequestParam("taskId") Long taskId);

    @GetMapping(PREFIX + "/getTaskByCode")
    @Operation(summary = "根据 taskCode 查询任务LMS/WMS 调用)")
    CommonResult<TaskInfoDTO> getTaskByCode(@RequestParam("taskCode") String taskCode);

任务 2新建 TransportTaskConvert

文件:

  • 创建:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/convert/transporttask/TransportTaskConvert.java

  • 步骤 1创建文件

package cn.code.nl.module.task.convert.transporttask;

import cn.code.nl.module.task.dal.dataobject.transporttask.TransportTaskDO;
import cn.code.nl.module.task.dto.TaskInfoDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

/**
 * 搬运任务 Convert
 *
 * @Author: liyongde
 * @Date: 2026/7/16
 */
@Mapper
public interface TransportTaskConvert {

    TransportTaskConvert INSTANCE = Mappers.getMapper(TransportTaskConvert.class);

    /**
     * DO 转 RPC 全量信息 DTO字段同名零配置映射
     */
    TaskInfoDTO convert(TransportTaskDO bean);
}

任务 3TransportTaskMapper 新增 selectByTaskCode

文件:

  • 修改:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java

  • 步骤 1selectUnfinishedByBiz 方法之前新增

    /**
     * 根据任务编码查询任务taskCode 业务唯一)
     */
    default TransportTaskDO selectByTaskCode(String taskCode) {
        return selectOne(TransportTaskDO::getTaskCode, taskCode);
    }

说明:selectOne(SFunction, Object)BaseMapperX 现有重载BaseMapperX.java:105@TableLogic 自动过滤 deleted=1


任务 4TransportTaskService 接口与实现新增查询方法

文件:

  • 修改:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java

  • 修改:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java

  • 步骤 1接口补充 import 并新增两个声明

import 区追加(AcsFeedbackReqDTO 等已存在,勿重复):

import cn.code.nl.module.task.dto.TaskInfoDTO;

dispatchOperation 声明之后新增:

    /**
     * 根据 taskId 查询任务全量信息RPC 用,自动过滤逻辑删除,查不到返回 null
     *
     * @param taskId 任务ID
     * @return 任务全量信息
     */
    TaskInfoDTO getTaskInfoById(Long taskId);

    /**
     * 根据 taskCode 查询任务全量信息RPC 用,自动过滤逻辑删除,查不到返回 null
     *
     * @param taskCode 任务编码
     * @return 任务全量信息
     */
    TaskInfoDTO getTaskInfoByCode(String taskCode);
  • 步骤 2实现类补充 import 并新增两个实现(放在 dispatchOperation 方法之后)

import 区追加:

import cn.code.nl.module.task.convert.transporttask.TransportTaskConvert;
import cn.code.nl.module.task.dto.TaskInfoDTO;

新增实现:

    /**
     * 根据 taskId 查询任务全量信息:查不到返回 null由调用方判断
     */
    @Override
    public TaskInfoDTO getTaskInfoById(Long taskId) {
        TransportTaskDO task = transportTaskMapper.selectById(taskId);
        return task != null ? TransportTaskConvert.INSTANCE.convert(task) : null;
    }

    /**
     * 根据 taskCode 查询任务全量信息:查不到返回 null由调用方判断
     */
    @Override
    public TaskInfoDTO getTaskInfoByCode(String taskCode) {
        TransportTaskDO task = transportTaskMapper.selectByTaskCode(taskCode);
        return task != null ? TransportTaskConvert.INSTANCE.convert(task) : null;
    }

任务 5TransportTaskApiImpl 实现两个方法

文件:

  • 修改:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java

  • 步骤 1补充 import

import cn.code.nl.module.task.dto.TaskInfoDTO;
  • 步骤 2receiveCallbackResult 方法之后新增
    @Override
    public CommonResult<TaskInfoDTO> getTaskById(Long taskId) {
        return success(transportTaskService.getTaskInfoById(taskId));
    }

    @Override
    public CommonResult<TaskInfoDTO> getTaskByCode(String taskCode) {
        return success(transportTaskService.getTaskInfoByCode(taskCode));
    }

任务 6编译验证

  • 步骤 1编译仓库根目录
mvn -pl nl-module-task/nl-module-task-server -am compile

预期:BUILD SUCCESS(同时验证 MapStruct 注解处理器生成 TransportTaskConvertImpl 无报错)。


任务 7统一提交可选需用户同意

  • 步骤 1确认用户同意后提交仅本次相关文件
git add docs/superpowers/specs/2026-07-16-transport-task-api-query-design.md \
        docs/superpowers/plans/2026-07-16-transport-task-api-query.md \
        nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java \
        nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java \
        nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/convert/transporttask/TransportTaskConvert.java \
        nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java \
        nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java \
        nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java
git commit -m "featTransportTaskApi 新增按 taskId/taskCode 查询任务 RPC 接口"

风险与注意事项

  1. 工作区有未提交改动TransportTaskService(Impl)TransportTaskMapper 均已有本地改动(含上一需求的路由表代码),实现时在现有基础上叠加,不要回退。
  2. MapStruct 与 Lombok 顺序:模块继承的编译配置已被 infra 等模块的 Convert 验证可用,若编译报 MapStruct 处理器缺失,检查是否误改了 pom本计划不改 pom
  3. TransportTaskServiceImplTesttest 目录引用了 TransportTaskApicompile 阶段不编译测试代码,不受影响。