# 急救转运任务类型优化说明 ## 优化概述 将急救转运任务的"任务类型"字段从硬编码改为从SQL Server数据库动态加载,提升系统的灵活性和可维护性。 ## 修改对比 ### 优化前 ```javascript // 硬编码的任务类型列表 emergencyTaskTypes: ['急救转运', '航空转运'] ``` ### 优化后 ```javascript // 从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 getServiceOrderTypes(); ``` **Mapper层:** `OrderClassMapper.xml` ```xml ``` **Controller层:** `SqlServerDictionaryController.java` ```java @GetMapping("/serviceOrderTypes") public AjaxResult getServiceOrderTypes() { List 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 任务类型 {{ selectedEmergencyTaskType || '请选择任务类型' }} ``` ### 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) 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