原先科室数据从本地MySQL字典表(dict_type='hospital_department')读取,现改为从SQL Server的dictionary表动态加载,并且需要在任务表中存储科室ID,同步旧系统时也要传递医院ID和科室ID。
sys_task_emergency 表中添加科室ID字段文件路径:sql/add_department_id_fields.sql
-- 1. 添加转出医院科室ID字段
ALTER TABLE sys_task_emergency
ADD COLUMN hospital_out_department_id VARCHAR(50) COMMENT '转出医院科室ID(对应SQL Server dictionary表的vID)' AFTER hospital_out_department;
-- 2. 添加转入医院科室ID字段
ALTER TABLE sys_task_emergency
ADD COLUMN hospital_in_department_id VARCHAR(50) COMMENT '转入医院科室ID(对应SQL Server dictionary表的vID)' AFTER hospital_in_department;
-- 3. 创建索引以提升查询性能
CREATE INDEX idx_hospital_out_dept_id ON sys_task_emergency(hospital_out_department_id);
CREATE INDEX idx_hospital_in_dept_id ON sys_task_emergency(hospital_in_department_id);
| 字段名 | 类型 | 说明 | 数据来源 | 允许NULL |
|---|---|---|---|---|
| hospital_out_department_id | VARCHAR(50) | 转出医院科室ID | SQL Server dictionary.vID | 是 |
| hospital_in_department_id | VARCHAR(50) | 转入医院科室ID | SQL Server dictionary.vID | 是 |
数据源SQL:sql SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
文件:SysTaskEmergency.java
/** 转出医院科室ID(对应SQL Server dictionary表的vID) */
private String hospitalOutDepartmentId;
/** 转入医院科室ID(对应SQL Server dictionary表的vID) */
private String hospitalInDepartmentId;
文件:IOrderClassDataService.java
/**
* 从 SQL Server 查询医院科室列表(HospitalDepartment)
*
* SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
*
* @return 医院科室列表
*/
List<OrderClassDTO> getHospitalDepartments();
文件:OrderClassDataServiceImpl.java
@Override
public List<OrderClassDTO> getHospitalDepartments()
{
log.info("开始从 SQL Server 查询医院科室数据...");
List<OrderClassDTO> list = orderClassMapper.selectHospitalDepartments();
log.info("成功查询到 {} 条医院科室数据", list != null ? list.size() : 0);
return list;
}
文件:OrderClassMapper.xml
<!-- 查询医院科室列表(HospitalDepartment) -->
<select id="selectHospitalDepartments" resultMap="OrderClassResult">
SELECT vID, vtext
FROM dictionary
WHERE vtitle = 'HospitalDepartment' AND vType = 1
ORDER BY vOrder
</select>
文件:SqlServerDictionaryController.java
/**
* 查询医院科室列表(HospitalDepartment)
*
* 数据源:SQL Server (dictionary表)
* SQL: SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder
*
* @return 医院科室列表
*/
@PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
@GetMapping("/hospitalDepartments")
public AjaxResult getHospitalDepartments()
{
try
{
List<OrderClassDTO> list = orderClassDataService.getHospitalDepartments();
return AjaxResult.success("查询成功", list);
}
catch (Exception e)
{
logger.error("查询医院科室数据失败", e);
return AjaxResult.error("查询医院科室数据失败:" + e.getMessage());
}
}
文件:SysTaskServiceImpl.java
// 设置转出医院信息
if (createVO.getHospitalOut() != null) {
emergencyInfo.setHospitalOutId(createVO.getHospitalOut().getId());
emergencyInfo.setHospitalOutName(createVO.getHospitalOut().getName());
emergencyInfo.setHospitalOutDepartment(createVO.getHospitalOut().getDepartment());
emergencyInfo.setHospitalOutDepartmentId(createVO.getHospitalOut().getDepartmentId()); // 科室ID
// ... 其他字段
}
// 设置转入医院信息
if (createVO.getHospitalIn() != null) {
emergencyInfo.setHospitalInId(createVO.getHospitalIn().getId());
emergencyInfo.setHospitalInName(createVO.getHospitalIn().getName());
emergencyInfo.setHospitalInDepartment(createVO.getHospitalIn().getDepartment());
emergencyInfo.setHospitalInDepartmentId(createVO.getHospitalIn().getDepartmentId()); // 科室ID
// ... 其他字段
}
文件:LegacySystemSyncServiceImpl.java
// 医院信息
params.put("ServiceOrdPtOutHosp", StringUtils.nvl(emergency.getHospitalOutName(), ""));
params.put("ServiceOrdPtOutHospID", emergency.getHospitalOutId() != null ? emergency.getHospitalOutId().toString() : "0"); // 转出医院ID
params.put("ServiceOrdPtInHosp", StringUtils.nvl(emergency.getHospitalInName(), ""));
params.put("ServiceOrdPtInHospID", emergency.getHospitalInId() != null ? emergency.getHospitalInId().toString() : "0"); // 转入医院ID
// 科室信息
params.put("ServiceOrdPtServices", StringUtils.nvl(emergency.getHospitalOutDepartment(), ""));
params.put("ServiceOrdPtServicesID", StringUtils.nvl(emergency.getHospitalOutDepartmentId(), "0")); // 转出科室ID
params.put("ServiceOrdPtInServices", StringUtils.nvl(emergency.getHospitalInDepartment(), ""));
params.put("ServiceOrdPtInServicesID", StringUtils.nvl(emergency.getHospitalInDepartmentId(), "0")); // 转入科室ID
文件:app/api/dictionary.js
/**
* 查询医院科室列表(HospitalDepartment)
*/
export function getHospitalDepartments() {
return request({
url: '/sqlserver/dictionary/hospitalDepartments',
method: 'get'
})
}
文件:app/pages/task/create-emergency.vue
导入API:javascript import { getServiceOrdAreaTypes, getServiceOrderTypes, getHospitalDepartments } from "@/api/dictionary"
数据结构:javascript hospitalOut: { id: null, // 医院ID name: '', department: '', departmentId: null, // 科室ID bedNumber: '', address: '' }, hospitalIn: { id: null, // 医院ID name: '', department: '', departmentId: null, // 科室ID bedNumber: '', address: '' },
加载科室数据:javascript // 加载科室数据(从 SQL Server 动态加载) loadDepartments() { getHospitalDepartments().then(response => { const list = response.data || [] this.departmentOptions = list.map(item => ({ id: item.vID, text: item.vtext, dictValue: item.vtext // 为了保持兼容性,保留dictValue字段 })) }).catch(error => { console.error('加载科室数据失败:', error) this.departmentOptions = [] }) },
科室选择事件:
```javascript
// 转出医院科室选择
onHospitalOutDepartmentChange(e) {
const index = e.detail.value
const selected = this.departmentOptions[index]
this.taskForm.hospitalOut.department = selected.text // 保存科室名称
this.taskForm.hospitalOut.departmentId = selected.id // 保存科室ID
},
// 转入医院科室选择
onHospitalInDepartmentChange(e) {
const index = e.detail.value
const selected = this.departmentOptions[index]
this.taskForm.hospitalIn.department = selected.text // 保存科室名称
this.taskForm.hospitalIn.departmentId = selected.id // 保存科室ID
},
```
mysql -u root -p ruoyi < sql/add_department_id_fields.sql
确保新代码生效
# H5版本
npm run build:h5
# 微信小程序版本
npm run build:mp-weixin
访问API接口: GET /sqlserver/dictionary/hospitalDepartments
预期响应:json { "code": 200, "msg": "查询成功", "data": [ { "vID": "1", "vtext": "急诊科" }, { "vID": "2", "vtext": "心内科" } // ... 更多科室 ] }
SELECT
task_id,
hospital_out_id,
hospital_out_name,
hospital_out_department,
hospital_out_department_id,
hospital_in_id,
hospital_in_name,
hospital_in_department,
hospital_in_department_id
FROM sys_task_emergency
ORDER BY id DESC
LIMIT 10;
创建任务后,查看同步日志,确认以下参数已正确传递:
- ServiceOrdPtOutHospID:转出医院ID
- ServiceOrdPtInHospID:转入医院ID
- ServiceOrdPtServicesID:转出科室ID
- ServiceOrdPtInServicesID:转入科室ID
| 新系统字段 | 旧系统参数 | 说明 |
|---|---|---|
| hospital_out_id | ServiceOrdPtOutHospID | 转出医院ID |
| hospital_out_name | ServiceOrdPtOutHosp | 转出医院名称 |
| hospital_out_department_id | ServiceOrdPtServicesID | 转出科室ID |
| hospital_out_department | ServiceOrdPtServices | 转出科室名称 |
| hospital_in_id | ServiceOrdPtInHospID | 转入医院ID |
| hospital_in_name | ServiceOrdPtInHosp | 转入医院名称 |
| hospital_in_department_id | ServiceOrdPtInServicesID | 转入科室ID |
| hospital_in_department | ServiceOrdPtInServices | 转入科室名称 |
| 数据类型 | SQL查询 | 用途 |
|---|---|---|
| 医院科室 | SELECT vID, vtext FROM dictionary WHERE vtitle='HospitalDepartment' AND vType=1 ORDER BY vOrder |
科室选择下拉框 |
| 单据类型 | SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrdAreaType' AND vType=1 ORDER BY vOrder |
单据类型选择 |
| 任务类型 | SELECT vID, vtext FROM dictionary WHERE vtitle='ServiceOrderType' AND vType>=1 ORDER BY vOrder |
任务类型选择 |
本次更新实现了:
所有代码变更已完成,执行数据库脚本后即可使用新功能!🚀