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

4.1 KiB
Raw Permalink Blame History

TransportTaskApi RPC 查询接口设计(补全 todo

  • 日期2026-07-16
  • 分支feature/20260713/task-module
  • 状态:已评审通过(方案 1Api → Service → Mapper 标准分层)

1. 背景与目标

TransportTaskApiTask 服务 RPC 接口LMS/WMS 经 Feign 调用)中有两个 todo 待实现:

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

目标:补全这两个 RPC 查询接口,返回已存在的 TaskInfoDTO35 字段全量数据),自动过滤逻辑删除的数据。

2. 关键事实(探索确认)

  • TaskInfoDTO 已存在于 nl-module-task-api/.../dto/TaskInfoDTO.java,字段与 TransportTaskDO 同名同义vehicleQty=Long、callbackRetryCount=Integer 均一致),可零配置映射。
  • BaseDO.deleted@TableLogicMyBatis-Plus 的 selectById/selectOne 自动追加 deleted=0"过滤删除"无需手写条件。
  • MapStruct 1.6.3 经 nl-common 传递依赖对 task-server 可用infra 模块 ConfigConvert 即此模式),无需改 pom。
  • task 模块尚无 convert 包,需新建。
  • Mapper 已有 selectOne 简单查询先例(selectUnfinishedByBiz),团队规范允许简单查询用 MyBatis-Plus 自带方法。

3. 设计

3.1 TransportTaskApiapi 模块)

删除两行 todo新增两个 GET 方法(遵循"feign 方法名驼峰、url 与方法名一致"规则;注解风格与本文件现有方法保持一致):

@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);

需补充 importGetMappingRequestParamTaskInfoDTO

3.2 TransportTaskApiImplserver 模块)

只做委托(与现有模式一致):

@Override
public CommonResult<TaskInfoDTO> getTaskById(Long taskId) {
    return success(transportTaskService.getTaskInfoById(taskId));
}

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

3.3 TransportTaskService(Impl)

新增两个方法(中文 javadoc

  • TaskInfoDTO getTaskInfoById(Long taskId)transportTaskMapper.selectById(taskId),为 null 返回 null否则 TransportTaskConvert.INSTANCE.convert(task)
  • TaskInfoDTO getTaskInfoByCode(String taskCode)transportTaskMapper.selectByTaskCode(taskCode),同上。

查不到(含已逻辑删除)统一返回 null由调用方判断——不抛业务异常已确认

3.4 新建 TransportTaskConvertserver 模块,仿 infra ConfigConvert

路径:nl-module-task-server/src/main/java/cn/code/nl/module/task/convert/transporttask/TransportTaskConvert.java

@Mapper
public interface TransportTaskConvert {

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

    TaskInfoDTO convert(TransportTaskDO bean);
}

字段全部同名,无需 @Mapping 配置。

3.5 TransportTaskMapper

新增taskCode 业务唯一,返回单对象;selectOne 自动滤删):

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

4. 错误处理

  • 查不到 / 已逻辑删除:success(null),调用方自行判断。
  • 参数校验Long/String 由 Spring MVC @RequestParam 必填约束兜底(缺参即 400不额外写判空。

5. 测试与验证

  • 按项目约定不编写测试。
  • 验证:mvn -pl nl-module-task/nl-module-task-server -am compile BUILD SUCCESS同时验证 MapStruct 注解处理器生成实现类无报错)。

6. 范围外(明确不做)

  • taskCode 数据库唯一索引调整。
  • LMS/WMS 调用方接入代码。
  • 其他 Api 方法的改动。