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

113 lines
4.1 KiB
Markdown
Raw Normal View History

2026-07-16 14:11:30 +08:00
# 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 方法的改动。