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

113 lines
4.1 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 查询接口设计(补全 todo
- 日期2026-07-16
- 分支feature/20260713/task-module
- 状态:已评审通过(方案 1Api → Service → Mapper 标准分层)
## 1. 背景与目标
`TransportTaskApi`Task 服务 RPC 接口LMS/WMS 经 Feign 调用)中有两个 todo 待实现:
```java
// todo 根据taskId查找任务返回TaskInfoDTO、过滤删除
// todo 根据taskCode获取任务返回TaskInfoDTO、过滤删除
```
目标:补全这两个 RPC 查询接口,返回已存在的 `TaskInfoDTO`35 字段全量数据),自动过滤逻辑删除的数据。
## 2. 关键事实(探索确认)
- `TaskInfoDTO` 已存在于 `nl-module-task-api/.../dto/TaskInfoDTO.java`,字段与 `TransportTaskDO` 同名同义vehicleQty=Long、callbackRetryCount=Integer 均一致),可零配置映射。
- `BaseDO.deleted``@TableLogic`MyBatis-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 `TransportTaskApi`api 模块)
删除两行 todo新增两个 GET 方法(遵循"feign 方法名驼峰、url 与方法名一致"规则;注解风格与本文件现有方法保持一致):
```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);
```
需补充 import`GetMapping``RequestParam``TaskInfoDTO`
### 3.2 `TransportTaskApiImpl`server 模块)
只做委托(与现有模式一致):
```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));
}
```
### 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 新建 `TransportTaskConvert`server 模块,仿 infra `ConfigConvert`
路径:`nl-module-task-server/src/main/java/cn/code/nl/module/task/convert/transporttask/TransportTaskConvert.java`
```java
@Mapper
public interface TransportTaskConvert {
TransportTaskConvert INSTANCE = Mappers.getMapper(TransportTaskConvert.class);
TaskInfoDTO convert(TransportTaskDO bean);
}
```
字段全部同名,无需 `@Mapping` 配置。
### 3.5 `TransportTaskMapper`
新增taskCode 业务唯一,返回单对象;`selectOne` 自动滤删):
```java
/**
* 根据任务编码查询任务
*/
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 方法的改动。