fix(doctorstation): 解决诊疗项目执行科室验证及耗材价格显示问题 bug#220

- 修复诊疗项目执行科室非空校验逻辑,使用effectiveOrgId替代positionId
- 添加getEffectiveOrgId方法统一获取执行科室ID的兼容处理
- 修复耗材价格处理逻辑,正确区分price和retailPrice字段避免零值判断错误
- 更新数据库查询映射,优化设备定义表与收费项目定义表关联条件
- 添加调试日志输出便于问题排查
This commit is contained in:
2026-03-23 17:58:27 +08:00
parent 251cf263ff
commit e90e541af3
4 changed files with 70 additions and 35 deletions

View File

@@ -1077,7 +1077,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) {
// 🔧 Bug Fix #238: 诊疗项目执行科室非空校验
if (adviceSaveDto.getAdviceType() != null && adviceSaveDto.getAdviceType() == 3) {
if (adviceSaveDto.getPositionId() == null) {
Long effectiveOrgId = adviceSaveDto.getEffectiveOrgId();
if (effectiveOrgId == null) {
throw new ServiceException("诊疗项目必须选择执行科室");
}
}
@@ -1116,8 +1117,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
serviceRequest.setAuthoredTime(curDate); // 请求签发时间
// 执行科室
serviceRequest.setOrgId(adviceSaveDto.getPositionId());
// 执行科室 - 使用兼容方法获取执行科室ID
serviceRequest.setOrgId(adviceSaveDto.getEffectiveOrgId());
serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id

View File

@@ -50,10 +50,32 @@ public class AdviceSaveDto {
/**
* 物理位置id | 可能是 发药药房id,耗材房id,执行科室id
* 前端字段名orgId诊疗项目
* 对应数据库org_id / perform_location
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long positionId;
/**
* 执行科室ID | 诊疗项目使用
* 前端传来字段名orgId
* 对应数据库org_id
* 🔧 Bug Fix #238: 添加此字段以支持前端orgId传参
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
/**
* 获取有效的执行科室ID兼容处理
* 优先使用orgId如果不存在则使用positionId
* 🔧 Bug Fix #238: 统一获取执行科室ID的方法
*
* @return 有效的科室ID如果都为null则返回null
*/
public Long getEffectiveOrgId() {
return orgId != null ? orgId : positionId;
}
/** 药品性质 | 分方使用 */
private String pharmacologyCategoryCode;

View File

@@ -100,10 +100,11 @@
AND T5.instance_table = 'adm_device_definition'
) as maximum_retail_price--最高零售价
FROM adm_device_definition T1
LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id
LEFT JOIN adm_charge_item_definition T2
ON T1.id = T2.instance_id
AND T2.instance_table = 'adm_device_definition'
<where>
T1.delete_flag = '0'
AND T2.instance_table = 'adm_device_definition'
</where>
ORDER BY T1.bus_no
@@ -170,10 +171,11 @@
AND T5.instance_table = 'adm_device_definition'
) as maximum_retail_price--最高零售价
FROM adm_device_definition T1
LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id
LEFT JOIN adm_charge_item_definition T2
ON T1.id = T2.instance_id
AND T2.instance_table = 'adm_device_definition'
<where>
T1.delete_flag = '0'
AND T2.instance_table = 'adm_device_definition'
<if test="id!= null">
AND T1.id = #{id}