编辑 | blame | 历史 | 原始文档

急救转运任务类型优化说明

优化概述

将急救转运任务的"任务类型"字段从硬编码改为从SQL Server数据库动态加载,提升系统的灵活性和可维护性。

修改对比

优化前

// 硬编码的任务类型列表
emergencyTaskTypes: ['急救转运', '航空转运']

优化后

// 从SQL Server动态加载
emergencyTaskTypes: []  // 运行时从数据库加载
emergencyTaskTypeOptions: []  // 转换为picker组件所需格式

// 数据源SQL
SELECT vID, vtext 
FROM dictionary 
WHERE vtitle='ServiceOrderType' AND vType>=1 
ORDER BY vOrder

技术实现

1. 后端新增接口

Service层: IOrderClassDataService.java
java /** * 从 SQL Server 查询服务订单类型列表(ServiceOrderType) * * SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder * * @return 服务订单类型列表 */ List<OrderClassDTO> getServiceOrderTypes();

Mapper层: OrderClassMapper.xml
xml <!-- 查询服务订单类型列表(ServiceOrderType) --> <select id="selectServiceOrderTypes" resultMap="OrderClassResult"> SELECT vID, vtext FROM dictionary WHERE vtitle = 'ServiceOrderType' AND vType >= 1 ORDER BY vOrder </select>

Controller层: SqlServerDictionaryController.java
java @GetMapping("/serviceOrderTypes") public AjaxResult getServiceOrderTypes() { List<OrderClassDTO> list = orderClassDataService.getServiceOrderTypes(); return AjaxResult.success("查询成功", list); }

2. 前端调用

API接口: app/api/dictionary.js
javascript export function getServiceOrderTypes() { return request({ url: '/sqlserver/dictionary/serviceOrderTypes', method: 'get' }) }

页面实现: create-emergency.vue
```javascript
import { getServiceOrderTypes } from "@/api/dictionary"

// 加载任务类型数据(从 SQL Server)
loadEmergencyTaskTypes() {
getServiceOrderTypes().then(response => {
const list = response.data || []
this.emergencyTaskTypes = list
this.emergencyTaskTypeOptions = list.map(item => ({
id: item.vID,
text: item.vtext
}))
}).catch(error => {
console.error('加载任务类型失败:', error)
this.emergencyTaskTypes = []
this.emergencyTaskTypeOptions = []
})
}

// 任务类型选择
onEmergencyTaskTypeChange(e) {
const index = e.detail.value
const selected = this.emergencyTaskTypeOptions[index]
this.selectedEmergencyTaskType = selected.text
this.selectedEmergencyTaskTypeId = selected.id
}
```

UI组件:
vue <view class="form-item"> <view class="form-label">任务类型</view> <picker mode="selector" :range="emergencyTaskTypeOptions" range-key="text" @change="onEmergencyTaskTypeChange"> <view class="form-input picker-input"> {{ selectedEmergencyTaskType || '请选择任务类型' }} <uni-icons type="arrowright" size="16" color="#999"></uni-icons> </view> </picker> </view>

3. 数据库字段

实体类: SysTaskEmergency.java
java /** 任务类型ID(对应SQL Server的dictionary表vID) */ private String taskTypeId;

数据库表: sys_task_emergency
```sql
ALTER TABLE sys_task_emergency
ADD COLUMN task_type_id VARCHAR(50) COMMENT '任务类型ID(对应SQL Server的dictionary表vID,vtitle=ServiceOrderType)';

CREATE INDEX idx_task_type_id ON sys_task_emergency(task_type_id);
```

Service保存: SysTaskServiceImpl.saveEmergencyInfo()
java // 设置任务类型ID emergencyInfo.setTaskTypeId(createVO.getTaskTypeId());

优化优势

  1. 数据集中管理:任务类型数据统一存储在SQL Server的dictionary表中,便于维护
  2. 动态可配置:无需修改代码,通过修改数据库即可调整任务类型选项
  3. 数据一致性:与旧系统保持数据结构一致,便于后续数据迁移和同步
  4. 扩展性强:未来添加新的任务类型只需在数据库中插入数据,前端自动识别
  5. 用户体验好:下拉选择器自动按vOrder字段排序,显示更加友好

SQL查询条件说明

ServiceOrderType (任务类型):
- 查询条件:vtitle='ServiceOrderType' AND vType>=1
- 说明:vType >= 1 表示获取所有类型值大于等于1的记录,范围匹配

ServiceOrdAreaType (单据类型):
- 查询条件:vtitle='ServiceOrdAreaType' AND vType=1
- 说明:vType = 1 表示精确匹配类型值为1的记录

数据流向

SQL Server dictionary表 (ServiceOrderType)
  ↓ (通过OrderClassMapper查询)
OrderClassDataService
  ↓ (返回List<OrderClassDTO>)
SqlServerDictionaryController
  ↓ (API接口 /sqlserver/dictionary/serviceOrderTypes)
前端 getServiceOrderTypes()
  ↓ (转换为picker组件格式)
emergencyTaskTypeOptions: [{id: vID, text: vtext}]
  ↓ (用户选择)
selectedEmergencyTaskTypeId
  ↓ (提交到后端)
TaskCreateVO.taskTypeId
  ↓ (保存到数据库)
sys_task_emergency.task_type_id

测试验证

  1. 启动后端服务,访问接口:GET /sqlserver/dictionary/serviceOrderTypes
  2. 验证返回数据格式:[{vID: "1", vtext: "急救转运"}, ...]
  3. 打开前端任务创建页面,检查任务类型下拉框是否正常加载
  4. 选择任务类型后提交,验证task_type_id字段正确保存

相关文件清单

后端文件

  • ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java
  • ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TaskCreateVO.java
  • ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java
  • ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java
  • ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java
  • ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
  • ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml
  • ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml
  • ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java

前端文件

  • app/api/dictionary.js
  • app/pages/task/create-emergency.vue

SQL文件

  • sql/add_document_type_to_emergency.sql

版本信息

  • 优化时间:2025-10-19
  • 优化内容:任务类型字段从硬编码改为动态加载
  • 版本:v1.1