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

253 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TransportTaskApi RPC 查询接口 实现计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development推荐或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 补全 `TransportTaskApi` 两个 todo——根据 taskId / taskCode 查询任务,返回 `TaskInfoDTO`,自动过滤逻辑删除。
**架构:** ApiFeign GET→ ApiImpl委托→ TransportTaskService查询 + MapStruct 转换,查不到返回 null→ TransportTaskMapperselectById / selectByTaskCode`@TableLogic` 自动滤删)。新建 `TransportTaskConvert`MapStruct字段同名零配置
**技术栈:** 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 |
---
### 任务 1`TransportTaskApi` 新增两个查询方法
**文件:**
- 修改:`nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java`
- [ ] **步骤 1补充 import**
在现有 import 区追加:
```java
import cn.code.nl.module.task.dto.TaskInfoDTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
```
- [ ] **步骤 2删除两行 todo替换为两个方法声明**
将文件末尾的:
```java
// todo 根据taskId查找任务返回TaskInfoDTO、过滤删除
// todo 根据taskCode获取任务返回TaskInfoDTO、过滤删除
```
替换为:
```java
@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创建文件**
```java
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);
}
```
---
### 任务 3`TransportTaskMapper` 新增 `selectByTaskCode`
**文件:**
- 修改:`nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java`
- [ ] **步骤 1在 `selectUnfinishedByBiz` 方法之前新增**
```java
/**
* 根据任务编码查询任务taskCode 业务唯一)
*/
default TransportTaskDO selectByTaskCode(String taskCode) {
return selectOne(TransportTaskDO::getTaskCode, taskCode);
}
```
说明:`selectOne(SFunction, Object)``BaseMapperX` 现有重载BaseMapperX.java:105`@TableLogic` 自动过滤 `deleted=1`
---
### 任务 4`TransportTaskService` 接口与实现新增查询方法
**文件:**
- 修改:`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` 等已存在,勿重复):
```java
import cn.code.nl.module.task.dto.TaskInfoDTO;
```
`dispatchOperation` 声明之后新增:
```java
/**
* 根据 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 区追加:
```java
import cn.code.nl.module.task.convert.transporttask.TransportTaskConvert;
import cn.code.nl.module.task.dto.TaskInfoDTO;
```
新增实现:
```java
/**
* 根据 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;
}
```
---
### 任务 5`TransportTaskApiImpl` 实现两个方法
**文件:**
- 修改:`nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java`
- [ ] **步骤 1补充 import**
```java
import cn.code.nl.module.task.dto.TaskInfoDTO;
```
- [ ] **步骤 2在 `receiveCallbackResult` 方法之后新增**
```java
@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编译仓库根目录**
```bash
mvn -pl nl-module-task/nl-module-task-server -am compile
```
预期:`BUILD SUCCESS`(同时验证 MapStruct 注解处理器生成 `TransportTaskConvertImpl` 无报错)。
---
### 任务 7统一提交可选需用户同意
- [ ] **步骤 1确认用户同意后提交仅本次相关文件**
```bash
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. **`TransportTaskServiceImplTest`**test 目录引用了 `TransportTaskApi``compile` 阶段不编译测试代码,不受影响。